Як я можу перерахувати всі 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.