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


Answers:


39

尝试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地址查找


12
抱歉,将其标记为正确用了将近4年的时间。
乔恩·哈达德

这意味着“ arp -a将仅显示您的计算机与之交互的IP地址”。?我是否应该先对广播(192.168.110.255)进行ping操作,并从每个设备获取响应,然后再使用arp来获取完整列表,因为我刚刚与所有设备进行了交互/ ping操作?
曾伟石2015年

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

第一个和最后一个响应几乎总是您的本地计算机。该(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 .

问题是要从命令行查找网络上的其他计算机,但是您也可以在GUI中浏览dns-sd通告的服务。例如,Terminal.app>新建远程连接...将打开一个窗口,其中显示了广告的ssh,sftp,ftp和telnet服务。


您期望此命令dns-sd -B _ssh._tcp .运行多快?
AJP

1
@AJP如果正在宣传任何ssh服务,则应立即开始返回结果。但是,如果用“完成”来表示退出,它就不会退出。该命令将运行一个长期查询,并随着服务的出现和消失而不断输出更改,直到服务消失为止。
bames53



4

一种快速的CLI衬板可逐步通过/ 24子网ping每个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发送三个ping。要更改ping的数量,请将3更改为其他内容,并更改地址范围,将192.168.0更改为其他内容。

do ping -c 30 10.10.0.$x;

1
你可以简单地使用fping做到这一点:fping -ag 172.16.0.0/16
ıɾuǝʞ

对我来说,这不过是快而已...
Max Williams

这是一个快速而肮脏的解决方案。与之类似,在缺少诸如nmap之类的正确工具的情况下,它可以快速实现,并且不如诸如nmap之类的正确工具那样高效。ping主机可能在一段时间内没有响应,并且由于它不是多线程的,因此在主机不响应时会花费一些时间。从好的方面来说,除了bash之外,它不需要任何其他东西。
quinnr '16

2

如果您知道局域网中其他计算机的名称,最简单的方法是对它们执行ping操作:

$ 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)。

显然,这不适用于大型LAN或记忆力差的人。


1

如果您使用的是Mac(假设为10.5或更高版本),只需启用VNC进行桌面访问并使用Flame.app。

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

这是一个非常不错的小实用程序,可以非常快速地为您提供所需的内容。唯一的事情是您必须走得比SSH更远。


1

对于Windows:

1)写入:对于(L,1,254)中的/ L%I执行ping -w 30 -n 1 168.29.0。%I 这将ping您本地网络中的所有地址

2)然后输入:arp -a 这将为您提供所有已回答的地址


当然这取决于您的本地网络地址。在我的情况下是168.29.0.xxx。你可能是这样的192.168.0.xxx
Chavdar

1
您的答案是基于Windows的,而OP表示他正在使用Mac。您是否可以编辑问题以考虑到这一点或说明您的解决方案是否可以在Mac上运行。
马修·威廉姆斯

每个MAC用户周围都有一个Windows操作系统...您不能没有它...:D
user2173353
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.