У меня есть несколько компьютеров Mac в моей домашней сети, и оболочка имеет доступ только к одному из них извне. Как я могу определить IP-адрес других машин?
У меня есть несколько компьютеров Mac в моей домашней сети, и оболочка имеет доступ только к одному из них извне. Как я могу определить IP-адрес других машин?
Ответы:
Попробуйте 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-адреса .
arp -a
покажет только те IP-адреса, с которыми взаимодействовал ваш компьютер». ? Должен ли я сначала пропинговать широковещательную рассылку (192.168.110.255) и получить ответ от каждого устройства, а затем использовать arp для получения полного списка, поскольку я только что взаимодействовал / пинговал все устройства?
Предполагая, что все другие машины находятся в том же широковещательном домене, что и тот, к которому у вас есть доступ, пинг широковещательного адреса часто будет достаточным. Он не найдет машины, которые спят, ни те, которые настроены не отвечать на пинги, ни те, которые будут отвечать на пинги, но не широковещательные.
% 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.
Все ваши компьютеры 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.
dns-sd -B _ssh._tcp .
?
Вы можете попробовать использовать его dns-sd
для выполнения запросов Bonjour в локальной сети.
dns-sd -B _ssh._tcp .
Может быть, это немного излишне, но вы могли бы использовать Nmap
Быстрый 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;
fping -ag 172.16.0.0/16
Если вы знаете имена других компьютеров в локальной сети, самый простой способ - проверить их:
$ 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 ).
Очевидно, что это плохо работает для больших локальных сетей или людей с плохой памятью.
Если вы используете Mac (при условии 10,5 или более), просто включите VNC для доступа к рабочему столу и используйте Flame.app.
Это действительно хорошая маленькая утилита, которая дает вам именно то, что вам нужно, очень быстро. Единственное, что вам придется идти дальше, чем SSH.
Для Windows:
1) Запись: для / L% I в (1,1254) DO ping -w 30 -n 1 168.29.0.% I Это будет пинговать все адреса в вашей локальной сети
2) Затем напишите: arp -a Это даст вам все адреса, которые ответили