Як я можу перерахувати всі IP-адреси в підключеній мережі, бажано через Термінал?


219

Використовуючи Ubuntu 10.10, мені було цікаво, чи існує команда командного рядка, яка може перелічити всі IP-адреси пристроїв, підключених до мережі?

Я б використав це, наприклад, для перерахування всіх комп'ютерів, підключених до моєї домашньої мережі. В ідеалі, він повинен бути командним рядком, оскільки я буду запускати його з C ++.

Будь-які ідеї?




Відповіді:


243

Ознайомтеся з командою arp-scan - можливо, вам доведеться встановити її, наприклад:

sudo apt-get install arp-scan

http://manpages.ubuntu.com/manpages/hardy/man1/arp-scan.1.html

І докладніше:

sudo arp-scan --interface=eth0 --localnet

Де eth0 - ваш пристрій. Ви можете знайти свій пристрій за допомогою:

ifconfig

Ідеально, дякую. Повертає саме потрібний мені формат.
Крістофер Гвілліямс

1
Відмінно працює і на OSX! Встановлено з Brew, а інтерфейс був en0, а не eth0, але працює чудово.
nthonygreen

6
Якщо ви підключились до своєї мережі, використовуючи Wi-Fi wlan0замість цього eth0.
Ніл

3
Чи можете ви отримати це для переліку імен хостів, а також IP-адрес?
користувач1527227

2
Варто зазначити, що для цього не використовується кеш ARP: він виконує фактичне сканування. На відміну від більшості сканерів nmap, це не може перетнути межі рівня 3, що зазвичай потрібно для цього сценарію. (Іншими словами, це обмежено вашою підмережею.)
Zenexer

112

Використовуйте nmap. Приклад: nmap -sn 10.10.10.0/24Кеш-арп повідомляє вам лише ті, з якими ви нещодавно намагалися зв’язатися.


2
10.10.10.0 мій даний IP? Що в цьому випадку 24? Дякую.
полковник

4
@kolonel Це лише приклад. Ви повинні замінити його своєю мережею. 24 - це "похилі позначення" маски підмережі. Це означає використовувати 24 біти зліва. Це еквівалентно 255.255.255.0.
Кіт

2
@Keith, ти знаєш, як я можу дізнатись свою мережеву адресу? Або це просто мій IP з 0/24 наприкінці?
TMH,


20

У Windows це буде " arp -a" Я вважаю, що еквівалент цього в Linux був би " arp -e".

Цю інформацію можна знайти на сторінці man для arp:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).

Схоже, це працює (можливо, потрібно буде грати, як я перебуваю у загальнодоступній мережі, тому здається, що лише перелічені всі сервери в мережі.
Крістофер Гвільямс

Якщо я перебуваю в домашній мережі, чи буде він просто перераховувати пристрої, підключені до мого роутера? Дякую!
Крістофер Гвілліямс

1
Ця команда буде перераховувати лише пристрої в поточному кеш-пам'яті файлів хостів, і це лише ті, з якими хост нещодавно зв’язався.
Linker3000

Обидва працюють на Linux, але arp -aвідображають (усі) хости в альтернативному (BSD) стилі. Простий біг arpробить те саме, що і біг, arp -eтому що за замовчуванням.
simplegamer

15

Якщо ваша мережа 192.168.0.0/24, зробіть виконуваний файл із наступним кодом; Змініть 192.168.0свою фактичну мережу.

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done

Привіт Андерсе ... Мережа користувача може бути не 192.168.0.0/24; Я зробив замітку. Форматування сайту не сподобалося голому # !, і тому клопірувало форматування фрагмента коду: вводячи код, використовуйте блок-цитати або попередньо відформатовані текстові кнопки та перегляньте свою відповідь на відповідне форматування перед тим, як надсилати її, оскільки повернення каретки, вкладки, і місця могли бути позбавлені
Невін Вільямс

Крім того, при постачанні сценарію, який потрібно помістити у файл і зробити його виконуваним, а не просто вирізати та вставити, можливо, найкраще вказати це; деяким може бути не очевидно, що потрібно для реалізації вашого рішення.
Невін Вільямс

12
Технічно це поверне лише ті хости, які відповідають на ping. Можуть бути хости, які підключені, але не відповідають на ехо-запити ICMP. Крім того, можна передавати один пакет всій мережі, вказавши адресу широкомовної передачі, яка є останньою адресою в мережі IP: ping -c 1 -W 1 192.168.0.255 виконає те саме, що і для циклу.
Невін Вільямс

@NevinWilliams (потрібно -b, видалено -W, щоб зачекати більше) ping -b -c 1 192.168.0.255результат "1 пакет передано, 0 отримано, 100% втрата пакету, час 0мс"
Водолій Power

13

Спробуйте встановити nmap( sudo apt-get install nmap) і введіть nmap 192.168.1.0/24підстановку 192.168.1з перших трьох частин ip-адреси (дізнайтеся, використовуючи ip addr).

Ви також можете отримати трохи менш точну (на мій досвід) карту мережі, запустивши ping 192.168.1.255(знову замінивши 192.168.1), який повинен видавати a pingкожній машині в мережі, але, на мій досвід, він не завжди працює правильно.


Насправді жодна з відповідей не завжди буде працювати правильно. IP не розроблений з урахуванням цієї вимоги, і є такі речі, як приватні VLAN, які унеможливлюють пошук інших хостів у тій самій локальній мережі.
Рон Моупін

2

Створено наступне на Nexus, використовуючи tmuxяк arp-scanйого немає в репо, але nmapпопередньо встановлене, відображає лише ip адреси:

nmap -sn 192.168.1.1-254/24 | egrep "scan report" | awk '{print $5}'

1

Для більш компактного переліку підключених пристроїв:

nmap -sL 192.168.0.* | grep \(1

Пояснення.

nmap -sL 192.168.0.* перерахує всі IP-адреси в підмережі та позначить ті, що мають ім'я:

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

Оскільки всі цікаві записи починаються з дужок (і цифр 1, ми фільтруємо для цього за допомогою | grep \(1(зворотний косий рядок потрібен для виходу з дужок)

Химерно
Остерігайтеся, що якщо два пристрої мають однакове ім'я, nmapвідображатиметься лише той, який був підключений до маршрутизатора останнім часом


Якщо у вас є однаковий відповідь на два запитання, то, можливо, варто розглянути позначення питань як дублікатів, а не розміщення дублікатів відповідей. Таким чином знання можна поділити, коли подібні запитання з’єднуються між собою.
Мокубай

1
@Mokubai Ви праві, я додав коментар до ОП. Це свідчить про цікаву проблему. Швидкий пошук виявив 6 дублікатів (це Q і 5 посилань) через 4 мережевих сайтів (SU, Ask Ubuntu, SF, Unix). Впевнені, що набагато більше! Як мені впоратися з цим? В ідеалі кожне з цих 6 дописів має посилатися на 5 інших. Додавання всіх цих посилань вручну очевидно не масштабується. Отже, наразі я пов’язаний з цією посадою (найбільш актуальною). Інша проблема полягає в тому, що неможливо позначити Q на AskUbuntu як дублікат Q на SU. Гм ... Напевно, про це вже йшлося на мета?
Олександр Малахов

не працює для мене на Centos 7, просто перераховує всі можливі IP-адреси в мережі без імен. arp-скан працював на мене.
Джефф

0

Детальна інформація про відповідь Андерса Ларрсона -

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    scan 192.168.1
fi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.