获取局域网的所有主机方法
一、 使用nmap
- 安装
sudo apt-get install nmap
- 查看ip下的所有主机
但实际测试中,路由器管理中有26个设备,两次测量中,一次显示12个设备,一次显示14个设备。
但一般的设备的ip都能正常显示出来
nmap -sP 192.168.1.2-255|grep -i 'report for'|awk '{print $5;}'|cat -n
二、使用scapy(python代码)
参考:scapy
- 安装scapy
pip3 install scapy
- 参考代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 显示局域网下所有主机的MAC地址和ip
from scapy.all import srp, Ether, ARP, conf
ipscan='192.168.1.1/24' # 24是子网掩码,对应255.255.255.0
def main():
try:
ans, unans = srp(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst=ipscan),timeout=2,verbose=False)
except Exception as e:
print(str(e))
else:
for snd,rcv in ans:
list_mac = rcv.sprintf("%Ether.src% - %ARP.psrc%")
print(list_mac)
if __name__ == '__main__':
main()
在windows下会报错,显示未安装某固件,但安装后会显示使用npcap更合适,因此直接下载安装npcap。链接:NPCAP下载
三、scapy进阶
参考:使用scapy模块进行ARP局域网扫描,获取主机IP和MAC
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 将局域网下所有ip整理成list
# 运行需要使用root权限
# 写成脚本:
#!/bin/bash
# cd /home/tju
# sudo echo '123456' | sudo -S "python3 test.py"
from scapy.all import srp, Ether, ARP, conf
def get_IP(ip = '192.168.1.1/24' ):
try:
#模拟发包,向整个网络发包,如果有回应,则表示活跃的主机
p = Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst=ip)
#ans表示收到的包的回复
ans,unans=srp(p, timeout=2, verbose=False)
except Exception as e:
pass
else:
#将需要的IP地址和Mac地址存放在result列表中
ip_res = []
mac_res = []
result = []
for s,r in ans:
#解析收到的包,提取出需要的IP地址和MAC地址
ip_res.append(r[ARP].psrc)
mac_res.append( r[ARP].hwsrc)
result.append([r[ARP].psrc, r[ARP].hwsrc])
#将获取的信息进行排序,看起来更整齐一点
result.sort()
#打印出局域网中的主机
# for ip,mac in result:
# print(ip,'------>',mac)
return ip_res, mac_res
if __name__ == '__main__':
ip_res,mac_res = get_IP()
print(ip_res)