问题描述
如何列出连接到本地网络(LAN)的机器的所有MAC addresses及其关联的IP addresses?
最佳解决方法
您可以使用Nmap实用程序。 Nmap是一个免费的网络扫描器工具。
尝试只是:
sudo nmap -sn 192.168.1.0/24
请替换您的网络标识符和子网掩码。
如何查找网络ID和子网掩码
使用命令ip a
:
bash~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether c4:85:08:94:ee:9a brd ff:ff:ff:ff:ff:ff
inet 192.168.3.66/24 brd 192.168.3.255 scope global wlan0
inet6 fe80::c685:8ff:fe94:ee9a/64 scope link valid_lft forever preferred_lft forever
在第2点,我有wlan0
设备。它说inet 192.168.3.66/24 brd 192.168.3.255 scope global wlan0
,IP地址:192.168.3.66
,子网掩码:24
。网络ID是192.168.3.0
,只需将最后一个数字替换为0即可。
或者像nmap
那样说:
sudo nmap -sn 192.168.1.0/24
这里是手册页nmap(1)的一个小引用:
-sn (No port scan)
This option tells Nmap not to do a port scan after host discovery, and only print out the available hosts that responded to the scan. This is often known as a “ping scan”, but you can also request that traceroute and NSE host scripts be run.
这是默认情况下比列表扫描更加侵入的一个步骤,并且通常可以用于相同的目的。它可以轻松侦察目标网络,而不会引起太多注意。
知道有多少主机对攻击者来说比列表扫描每个单一IP地址和主机名所提供的列表更有价值。
Systems administrators often find this option valuable as well. It can easily be used to count available machines on a network or monitor server availability. This is often called a ping sweep, and is more reliable than pinging the broadcast address because many hosts do not reply to broadcast queries.
The default host discovery done with
-sn
consists of an ICMP echo request, TCP SYN to port 443, TCP ACK to port 80, and an ICMP timestamp request by default.
当由非特权用户执行时,仅向目标上的端口80和443发送SYN数据包(使用connect
调用)。
当特权用户尝试扫描本地以太网网络上的目标时,除非指定了--send-ip
,否则将使用ARP请求。 -sn
选件可以与任何发现探头类型(-P*
选件,不包括-Pn
)结合使用,以获得更大的灵活性。
如果使用这些探测器类型和端口号选项中的任何一个,则覆盖默认探测器。如果运行Nmap的源主机和目标网络之间存在严格的防火墙,则建议使用这些高级技术。否则,当防火墙丢弃探测器或其响应时,可能会丢失主机。
In previous releases of Nmap,
-sn
was known as-sP
.
次佳解决方法
arp
将缓慢返回活动MAC地址和IP列表或其主机名(如果有)。如果你希望它变得更快,你可以使用arp -n
,它应该跳过DNS查找。如果您需要将其解析为arp -an
将跳过固定宽度的列。
$ arp
Address HWtype HWaddress Flags Mask Iface
10.10.0.11 ether 00:04:ff:ff:ff:d0 C eth0
10.10.0.16 ether 00:04:ff:ff:ff:a6 C eth0
raspbmc.local ether 00:1f:ff:ff:ff:9c C eth0
10.10.0.19 ether 00:04:ff:ff:ff:c9 C eth0
10.10.0.12 ether bc:f5:ff:ff:ff:93 C eth0
10.10.0.17 ether 00:04:ff:ff:ff:57 C eth0
10.10.0.1 ether 20:4e:ff:ff:ff:30 C eth0
HPF2257E.local ether a0:b3:ff:ff:ff:7e C eth0
10.10.0.15 ether 00:04:ff:ff:ff:b9 C eth0
tim ether 00:22:ff:ff:ff:af C eth0
10.10.0.13 ether 60:be:ff:ff:ff:e0 C eth0
否则,你的路由器应该能够让你了解有源设备(大部分都是这样)。
编辑Per davidcl的评论,这个答案并不像我第一次希望的那样完美。
arp
依靠以前的某种联系工作。然而,在我看来,现代设备在广播级别上非常健谈(你应该真的看到wireshark–这是一种教育),因此,如果没有至少回复广播,设备就不会出现在网络上。 (为了确保您可以先使用10.10.0.255 ping网络上的所有设备,然后您可能会获得90%以上的设备。)
为了给你一些我的意思,上面的10.10.0.16是我们的PVR。我的PC和PVR之间没有直接的交互,PVR上也没有运行任何服务(也没有UPNP /DLNA)。
只是为了快速播放参数…
-
但是我的网络中的黑客呢?!1他们也可以阻止ICMP ping。他们可以阻止对每种扫描类型的所有响应。
-
哦,但肯定
nmap
仍然是最好的解决方案在这里运行时,它仍然缺少四个设备。四个在网络上处于活动状态的设备。要么他们没有回应ping或nmap没有等待足够长的时间让他们回应……我不知道。nmap
是一个很棒的工具(特别是对于你可能要做的下一步的端口扫描),但对于这个问题它仍然有点笨拙(而且有点慢)。别叫我雪莉。
第三种解决方法
我为此使用arp-scan
:
$ sudo arp-scan -l
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.2.1 ec:1a:59:61:07:b2 (Unknown)
192.168.2.50 90:59:af:3d:6d:bc (Unknown)
192.168.2.51 3c:97:0e:48:22:12 (Unknown)
192.168.2.52 00:18:31:87:8f:b0 Texas Instruments
4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 256 hosts scanned in 1.282 seconds (199.69 hosts/sec). 4 responded
第四种方法
您可以使用arp-scan
。
使用此命令安装:
sudo apt-get install arp-scan
要列出所有IP地址和关联的MAC地址,请使用:
sudo arp-scan --interface=eth0 --localnet
输出将如下所示:
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 16777216 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.1.3 38:60:77:29:31:36 (Unknown)
192.168.1.8 4c:72:b9:7c:bb:7e (Unknown)
192.168.1.110 00:15:17:5f:d2:80 Intel Corporate
192.168.1.111 00:ff:88:5f:fd:f0 (Unknown)
192.168.1.153 00:15:17:5f:d2:82 Intel Corporate
192.168.1.180 52:54:00:70:04:02 QEMU
192.168.1.199 52:54:00:fe:7f:78 QEMU
第五种方法
GUI
你可以试试avahi-discover。
-
使用此命令安装它(或点击上面的链接):
sudo apt-get install avahi-discover
-
从终端运行Avahi Zeroconf浏览器或
avahi-discover
。 -
您应该会看到一个窗口,其中包含本地网络上的设备列表。 MAC地址将是方括号中的字符串。
命令行
您可以在终端中使用此命令:
avahi-browse -a -t -d local
它是默认安装的。
第六种方法
-
首先使用
nmap -sn 1.2.3.4/24
或fping -g 1.2.3.4/24
扫描网络以查看哪些主机可到达/联机 -
然后使用
arping
查询与IP地址对应的MAC地址。 Pseudo-code提前:for i in $(cat list-of-reachable-hosts) do arping $i done
-
Cheatery:请咨询本地交换机的arp-cache;这应该给你一个很好的概述…
第七种方法
如果支持NetBIOS protocol,我宁愿使用
nbtscan 192.168.1.1-192.168.1.255
。
第八种方法
我对这篇文章很感兴趣。我有这个需要。
我编写了一个shell脚本,使用awk
语句分析arp
输出并生成HTML输出。如果您执行该脚本并将输出重定向至HTML文件,则剩下的HTML文件将显示IP,完整的MAC地址以及指向IEEE OUI查找页面的链接。这有助于通过NIC制造商确定客户端。
printf "<html>\n<title>LAN IPs and their MACs</title>\n<body>\n"
arp -a | awk '{print $2,$4}' | awk -F'[().: ]' '{print $2"."$3"."$4"."$5,$6,$7":"$8":"$9":"$10":"$11":"$12,"<a href=\"http://standards.ieee.org/cgi-bin/ouisearch?"$7$8$9"\">IEEE OUI Lookup "$7"-"$8"-"$9"</a><br>"}'
printf "\n</body>\n</html>\n"
它有助于首先在您的LAN上执行nmap
扫描,以便在ARP表中有条目。希望格式翻译。你可以修改它以使表格格式的文本。