如何在Linux中运行Scapy Python脚本?脚本无输出问题排查求助
Scapy脚本无输出的排查与解决
可能的问题及解决方法:
网卡名称错误:脚本中指定的
iface='br-xxx'是占位符,并非真实网卡名。运行ip link show(Linux)或Get-NetAdapter(Windows PowerShell)查看系统真实网卡名称,替换成正确值(如eth0、enp0s3)。无符合过滤条件的流量:脚本仅捕获源IP为
10.10.10.10的ICMP包,需确保当前环境有该IP发出的ICMP流量。可手动从该IP发起ping请求,或用tcpdump icmp and src host 10.10.10.10验证是否存在目标流量。权限不足:Scapy抓包需要管理员/root权限。Linux下运行脚本需加
sudo(如sudo python3 your_script.py),Windows需以管理员身份打开终端执行脚本。数据包处理逻辑缺陷:
- 交换IP后未重新计算校验和:修改IP和负载后,原校验和失效,可能导致发送的包被丢弃。可手动删除校验和字段,让Scapy自动重新计算:
del pkt_ld[IP].chksum del pkt_ld[ICMP].chksum - 无调试输出:在处理函数内添加打印语句,确认是否捕获到目标包,比如:
print("捕获到目标ICMP包")
- 交换IP后未重新计算校验和:修改IP和负载后,原校验和失效,可能导致发送的包被丢弃。可手动删除校验和字段,让Scapy自动重新计算:
环境或版本问题:确保安装最新版Scapy,执行
pip install --upgrade scapy更新;部分环境需用python3替代python运行脚本。
修改后的参考脚本
#!/usr/bin/python3 from scapy.all import * def modify_packet_contents_ld(pkt_ld): if ICMP in pkt_ld and pkt_ld[IP].src == '10.10.10.10': print("捕获到目标数据包,开始处理") # 交换源目IP地址 pkt_ld[IP].src, pkt_ld[IP].dst = pkt_ld[IP].dst, pkt_ld[IP].src # 修改ICMP负载内容 pkt_ld[ICMP].load = b"hello-world" # 删除旧校验和,让Scapy自动重新计算 del pkt_ld[IP].chksum del pkt_ld[ICMP].chksum # 发送数据包并显示详细信息 send(pkt_ld, verbose=True) def sniff_packet_ld(): # 替换为你的真实网卡名称 sniff(filter='icmp and src host 10.10.10.10', prn=modify_packet_contents_ld, iface='eth0') sniff_packet_ld()
内容的提问来源于stack exchange,提问作者Leafia Dias
相关产品推荐
相关产品推荐

