30

У меня есть несколько компьютеров Mac в моей домашней сети, и оболочка имеет доступ только к одному из них извне. Как я могу определить IP-адрес других машин?

9 ответов9

35

Попробуйте arp -a чтобы увидеть текущую таблицу arp вашего компьютера. Он покажет только те 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-адреса.

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

Все ваши компьютеры Mac имеют имена хостов, поэтому вам не нужно знать IP-адреса. Вместо этого вы просто будете использовать имя хоста.

Имена хостов основаны на любом имени, которое вы дали компьютеру. Поэтому, если компьютер называется «Jon's Mac», имя хоста, которое вы будете использовать, будет выглядеть как «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> Новое удаленное соединение ... открывает окно, в котором отображаются рекламируемые службы ssh, sftp, ftp и telnet.

7

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

6

Может быть, это немного излишне, но вы могли бы использовать Nmap

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;
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

Для Windows:

1) Напишите: для /L% I в (1,1254) DO ping -w 30 -n 1 168.29.0.% I Это будет пинговать все адреса в вашей локальной сети

2) Затем напишите: arp -a Это даст вам все адреса, которые ответили

1

Если вы используете Mac (при условии 10,5 или более), просто включите VNC для доступа к рабочему столу и используйте Flame.app.

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

Это действительно хорошая маленькая утилита, которая дает вам именно то, что вам нужно, очень быстро. Единственное, что вам придется идти дальше, чем SSH.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .