Пошук інших комп'ютерів у мережі за допомогою командного рядка


30

У моїй домашній мережі є кілька комп’ютерів Macs та доступ до однієї з них ззовні. Як я можу зрозуміти, що таке IP-адреса інших машин?

Відповіді:


39

Спробуйте arp -aпереглянути поточну таблицю арп на вашому комп’ютері. Він відображатиме лише ті IP-адреси, з якими взаємодіє ваш комп’ютер. Виведіть такий вихід (приховано трохи, щоб приховати MAC адреси в моїй мережі):

$ arp -a
? (10.1.168.1) at xx:xx:9e:82:ab:f6 on en1 ifscope [ethernet]
? (10.1.168.16) at xx:xx:29:d3:17:8 on en1 ifscope [ethernet]
? (10.1.168.115) at xx:xx:2:4f:76:14 on en1 ifscope [ethernet]
? (10.1.168.131) at xx:xx:6b:d0:36:a5 on en1 ifscope [ethernet]
? (10.1.168.134) at (incomplete) on en1 ifscope [ethernet]
? (10.1.168.137) at xx:xx:65:46:cd:b8 on en1 ifscope [ethernet]
? (10.1.168.255) at ff:ff:ff:ff:ff:ff on en1 ifscope [ethernet]
? (192.168.4.255) at ff:ff:ff:ff:ff:ff on vmnet8 ifscope [ethernet]
? (192.168.110.255) at (incomplete) on vmnet1 ifscope [ethernet]

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


12
Вибачте, це знадобило майже 4 роки, щоб відзначити це правильним.
Джон Хаддад

Що це означає, " arp -aвідображатимуться лише ті IP-адреси, з якими взаємодіє ваш комп'ютер". ? Чи повинен я спочатку пінг-трансляцію (192.168.110.255) і отримати відповідь від кожного пристрою, а потім використовувати arp, щоб отримати повний список, оскільки я щойно взаємодіяв / пінгував весь пристрій?
Weishi Zeng

10

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

% ifconfig -a | grep broadcast
        inet 192.168.1.241 netmask 0xffffff00 broadcast 192.168.1.255
% ping -i 5 -c 2 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.241: icmp_seq=0 ttl=64 time=0.393 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=2.511 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=5.810 ms (DUP!)
64 bytes from 192.168.1.255: icmp_seq=0 ttl=64 time=7.886 ms (DUP!)
64 bytes from 192.168.1.241: icmp_seq=1 ttl=64 time=0.312 ms

--- 192.168.1.255 ping statistics ---
2 packets transmitted, 2 packets received, +3 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.312/3.382/7.886/3.010 ms

Перша і остання відповідь майже завжди буде вашою локальною машиною. Ці (DUP!)відповіді від інших машин (хоча цей приклад показує яку - то машину надає самого широковещательного адреса, яка не дуже корисно).

Ви також можете спробувати адресу трансляції всіх:

% ping -i 5 -c 2 255.255.255.255
PING 255.255.255.255 (255.255.255.255): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.392 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=3.053 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=8.685 ms (DUP!)
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.319 ms

--- 255.255.255.255 ping statistics ---
2 packets transmitted, 2 packets received, +2 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.319/3.112/8.685/3.401 ms

Цей приклад показує менше грубості. Усі (DUP!)інші машини є іншими машинами, і локальну машину легко ідентифікувати як 127.0.0.1.


8

Усі ваші Macs мають імена хостів, тому вам не потрібно знати IP-адреси. Натомість ви просто використовуватимете ім'я хоста.

Імена хостів засновані на тому, яке ім’я ви дали комп'ютеру. Отже, якщо комп’ютер названий "Макет Джона", ім'я хоста, яке ви будете використовувати, є чимось на зразок "jons-mac.local".

$ ssh jons-mac.local

Якщо ви ще не знаєте імен хостів своїх комп’ютерів, то ви можете дізнатися імена хостів комп'ютера в налаштуваннях спільного використання на цьому комп'ютері, або ви можете дізнатися імена хостів інших комп'ютерів у мережі за допомогою команди dns-sd. Ця команда використовує Bonjour для перегляду мережевих послуг; ви знайдете лише комп’ютери, які насправді рекламують певну мережеву послугу (яка, за великим рахунком, є єдиною, що вас цікавить).

Якщо ви хочете підключитися до якогось комп’ютера, що надає ssh, ви можете знайти доступні комп'ютери за допомогою:

dns-sd -B _ssh._tcp .

Загалом ви можете шукати хостів, які надають певні послуги, використовуючи назви служб: http://www.dns-sd.org/ServiceTypes.html

Протокол Bonjour також надає можливість перегляду всіх сервісів, а не лише окремих. Це можна зробити, переглянувши спеціальну службу_services._dns-sd._udp

dns-sd -B _services._dns-sd._udp .

Питання полягає у пошуку інших комп’ютерів у мережі з командного рядка, але ви також можете переглядати рекламні послуги dns-sd у графічному інтерфейсі. Наприклад, Terminal.app> New Remote Connection ... відкриває вікно, де відображаються рекламовані послуги ssh, sftp, ftp та telnet.


Наскільки швидко ви можете розраховувати на виконання цієї команди dns-sd -B _ssh._tcp .?
AJP

1
@AJP Якщо рекламуються будь-які служби ssh, вони повинні негайно почати повертати результати. Але якщо під «закінченням» ви маєте на увазі вихід, він не виходить; команда виконує довговічний запит і виводить зміни постійно, коли служби з’являються і зникають з мережі, поки ви не вб'єте його.
bames53

7

Ви можете спробувати використовувати dns-sdдля виконання запитів Bonjour в локальній мережі.


3
Мені подобається, що ця відповідь є специфічною для ОС X і перетворюється на bonjour, щоб уникнути отримання додаткових мережевих деталей, які мене б не хвилювали (у контексті цього питання). Конкретна команда, яка працювала на мої потреби, була:dns-sd -B _ssh._tcp .
stevenhaddox

6

Можливо, це трохи надмірності, але ви можете використовувати nmap


1
Хоча це може відповісти на питання, було б кращою відповіддю, якщо ви могли б дати пояснення, чому це так.
DavidPostill

4

Швидкий CLI один вкладиш, щоб перейти через / 24 підмережі, пінг кожної IP-адреси. Швидкий і вид брудний, але це працює.

for (( x=1; x <= 254; x++ )); do ping -c 3 192.168.0.$x; done

Пояснення: Щоб змінити діапазон, змініть x = 1 на x = 130, або все, що ви хочете починати, і 254 до кінця, скажімо, 135.

for (( x=130; x <= 135; x++ ));

ping -c 3 - це надіслати три пінгви. Щоб змінити кількість пінгів, змініть 3 на щось інше, а щоб змінити діапазон адрес, змініть 192.168.0 на щось інше.

do ping -c 30 10.10.0.$x;

1
ви можете просто скористатися fping, щоб зробити це:fping -ag 172.16.0.0/16
1313

Для мене це все, крім швидкого ...
Макс Вільямс

Це швидке та брудне рішення. Як і в, це швидко реалізувати за відсутності правильних інструментів, таких як nmap, і це не настільки ефективно, як правильні інструменти, як nmap. Пістонг-хостів може зайняти деякий час, коли вони не відповідають, і оскільки це не багатопотокове перетворення, пройде деякий час, коли хост не відповість. З іншого боку, він не вимагає нічого, крім баш.
quinnr

2

Якщо ви знаєте ім'я інших комп’ютерів у локальній мережі, найпростіший спосіб - це відстежувати їх:

$ ping foobar

Pinging foobar.lan [192.168.0.25] with 32 bytes of data:

Reply from 192.168.0.25: bytes=32 time<1ms TTL=64
Reply from 192.168.0.25: bytes=32 time<1ms TTL=64

Це може залежати від вашого локального маршрутизатора або сервера DHCP. Якщо оголене ім’я хоста не працює, спробуйте додати .local (тобто, ping hostname.local ).

Очевидно, що це не добре працює для великих локальних мереж або людей із поганою пам’яттю.


1

Якщо ви використовуєте Macs (припускаючи 10.5 або більше), просто увімкніть VNC для доступу до робочого столу та використовуйте Flame.app.

http://husk.org/apps/flame/

Це дійсно приємна маленька утиліта, яка дає вам саме те, що вам потрібно, дуже швидко. Єдине, що вам доведеться йти далі, ніж SSH.


1

Для Windows:

1) Напишіть: для / L% I в (1,1254) DO ping -w 30 -n 1 168,29,0.% I Це буде перенаправляти всі адреси у вашій локальній мережі

2) Потім напишіть: arp -a Це дасть вам усі адреси, які відповіли


Звичайно, це залежить від вашої адреси локальної мережі. У моєму випадку це 168.29.0.xxx. Ваш може бути щось на зразок 192.168.0.xxx
Чавдар

1
Ваша відповідь ґрунтується на Windows, тоді як ОП заявив, що він використовує Mac. Чи можете ви відредагувати своє запитання, щоб врахувати це, або заявити, чи ваше рішення працюватиме на Mac.
Меттью Вільямс

Кожен користувач MAC має ОС Windows, що сидить ... Не можна без нього жити ...: D
user2173353
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.