通过命令行查找网络上的其他计算机

Jon*_*dad 30 networking command-line macos

我的家庭网络上有几台 Mac,并且只能从外部访问其中一台。我怎样才能弄清楚其他机器的IP地址是什么?

Dou*_*ris 40

尝试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]
Run Code Online (Sandbox Code Playgroud)

如果没有进一步的信息,该计算机是,你可以得到一点点通过识别网卡的制造商的更多信息MAC地址查找

  • 抱歉,花了将近 4 年的时间才将此标记为正确。 (13认同)

Chr*_*sen 10

假设所有其他机器与您有权访问的机器在同一广播域中,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
Run Code Online (Sandbox Code Playgroud)

第一个和最后一个响应几乎总是你的本地机器。该(DUP!)反应是从其他机器(尽管这个例子也显示一些机器的广播地址本身,这还不是特别有用的响应)。

你也可以试试全1的广播地址:

% 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
Run Code Online (Sandbox Code Playgroud)

这个例子显示了更少的麻烦。所有的(DUP!)s 都是其他机器,本地机器很容易识别为 127.0.0.1。


bam*_*s53 9

您的 Mac 都有主机名,因此您不需要知道 IP 地址。相反,您将只使用主机名。

主机名基于您为计算机指定的任何名称。因此,如果计算机名为“Jon's Mac”,则您将使用的主机名类似于“jons-mac.local”。

$ ssh jons-mac.local
Run Code Online (Sandbox Code Playgroud)

如果您还不知道您计算机的主机名,那么您可以在该计算机的共享首选项中查找该计算机的主机名,或者您可以使用 dns-sd 命令查找网络上其他计算机的主机名。此命令使用 Bonjour 来让您浏览网络服务;您只会找到实际宣传某些网络服务的计算机(总的来说,这是您唯一关心的服务)。

如果您想连接到某些提供 ssh 的计算机,您可以使用以下命令找到可用的计算机:

dns-sd -B _ssh._tcp .
Run Code Online (Sandbox Code Playgroud)

通常,您可以使用服务名称搜索提供特定服务的主机:http : //www.dns-sd.org/ServiceTypes.html

Bonjour 协议还提供浏览所有服务的能力,而不仅仅是特定的服务。您可以通过浏览特殊服务来做到这一点_services._dns-sd._udp

dns-sd -B _services._dns-sd._udp .
Run Code Online (Sandbox Code Playgroud)

问题是询问如何从命令行查找网络上的其他计算机,但您也可以在 GUI 中浏览 dns-sd 广告服务。例如,Terminal.app > New Remote Connection... 会弹出一个窗口,显示广告的 ssh、sftp、ftp 和 telnet 服务。


Ign*_*ams 7

您可以尝试使用dns-sd以在 LAN 上执行 Bonjour 查询。

  • 我喜欢这个答案是特定于 OS X 的,并且与 bonjour 挂钩以避免获得我不关心的其他网络详细信息(在这个问题的上下文中)。适合我需要的特定命令是:`dns-sd -B _ssh._tcp .` (3认同)

Wag*_*ock 6

也许这有点矫枉过正,但你可以使用nmap

  • 虽然这可能会回答这个问题,但如果您能提供一些解释**为什么**这样做,那将是一个更好的答案。 (2认同)