我的家庭网络上有几台 Mac,但从外部只能访问其中一台。我如何才能知道其他机器的 IP 地址?
答案1
尝试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 地址查找。
答案2
假设所有其他机器都与您有权访问的机器位于同一个广播域中,则 ping 广播地址通常就足够了。它不会找到处于休眠状态的机器,也不会找到配置为不响应 ping 的机器,也不会找到只响应 ping 但不响应广播 ping 的机器。
% 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!)
s 均表示其他机器,并且本地机器很容易被识别为 127.0.0.1。
答案3
您的 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 .
问题是询问如何从命令行查找网络上的其他计算机,但您也可以在 GUI 中浏览 dns-sd 公布的服务。例如,Terminal.app > New Remote Connection... 会弹出一个窗口,其中显示公布的 ssh、sftp、ftp 和 telnet 服务。
答案4
也许有点过头了,但你可以使用nmap