使用scapy伪造arp请求及解析回传数据包 获取同一局域网下的其他主机的IP和MAC

接着上一篇博客继续说,填下坑…
使用 python 实现 获取与本机在同一局域网下的其他设备 IP和MAC的映射关系(Windows 下_S4n_v1的博客-CSDN博客

运行截图如下:
在这里插入图片描述

代码实现(附详细注释):

# 获取在通一个局域网下的所有主机的mac地址
from scapy.all import ARP, Ether, srp

# '192.168.202.1' 指示了要扫描的网络的子网地址 '/24' 表示子网掩码
# 扫描指定IP的整个子网 (范围是 192.168.202.1 - 192.168.202.255
target_ip = '192.168.202.1/24'
# 当然这里使用单个具体的ip地址也是可以的 也就是获得具体主机的mac地址
# target_ip = '192.168.202.107'

# 构造 arp 请求报文对象
arp = ARP(pdst=target_ip)

# 创建以太网广播包 使报文发送到广播地址
ether = Ether(dst="ff:ff:ff:ff:ff:ff")

# 组装广播包和arp请求包
packet = ether/arp

# packet 创建完成后 使用srp函数发送构造好的数据包
# 返回收到的所有响应报文 存在response变量中
response = srp(packet, timeout=3)[0]

# 遍历每个报文中的IP和MAC地址 存储在字典中 然后添加到客户端列表clients中
clients = []
for sent, receieved in response:
    clients.append({'ip': receieved.psrc, 'mac': receieved.hwsrc})

# 打印捕获到的IP和MAC
print("Available devices in the network:")
print("IP" + " "*18 + "MAC")
for client in clients:
    print("{:16}    {}".format(client['ip'], client['mac']))

这里就没实现自动获取当前IP地址了,需要自己去设置 target_ip。上一篇博客(贴在最上面的链接)有实现,直接把那部分代码摘过来用就行。

踩坑

踩了些小坑,记录一下问题。
发包之后,收不到任何包,提示:
Begin emission: Finished sending 256 packets. Received 0 packets, got 0 answers, remaining 256 packets

解决方法:

0x01
网上一些博客说 可能是因为防火墙拦截了回传的数据包,导致收不到包。可以在 控制面板 -- 防火墙 -- 启动或关闭防火墙 关闭防火墙。(测试完一定要记得重新启用防火墙!!

但是这个解决办法在我这没任何效果…

0x02
后来想用 wireshark 抓个包看看发包收包情况,误打误撞更新了 Npcap (一般安装 wireshark 的时候都会顺带安装的),然后突然就可以了。(Npcap 是一个网络数据包截获软件

另外友情提醒一下,如图,安装 Npcap 的时候不要勾选第一项!不然打开 wireshark 的时候会拼命弹窗… 网上的安装教程基本上都是把这项勾上的,狠狠踩坑,我因此又重装了一遍这软件。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值