常见问题
译者:飞龙
我的 TCP 连接被 Scapy 或者是我的内核重置了
内核不知道 Scapy 在他背后做什么。 如果 Scapy 发送 SYN,目标回复 SYN-ACK,并且你的内核看到它,它将回复 RST。 为了防止这种情况,请使用本地防火墙规则(例如 Linux 上的 NetFilter)。 Scapy 不介意本地防火墙。
我 Ping 不通 127.0.0.1,Scapy 在 127.0.0.1 上或是本地回送接口上不工作
回送接口是一个非常特殊的接口。 通过它的数据包没有真正组装和拆卸。 内核将数据包路由到其目的地,而它仍然存储于内部结构中。 你看到的tcpdump -i lo
只是假的,让你认为一切正常。 内核不知道 Scapy 在背后做什么,所以你在回送接口上看到的也是假的。 这个是不会在本地结构中的,因此内核永远不会收到它。
为了和本地的程序交流,你应该在上层协议中构建你的数据包。使用PF_INET/SOCK_RAW
套接字而不是PF_PACKET/SOCK_RAW
>>> conf.L3socket
<class __main__.L3PacketSocket at 0xb7bdf5fc>
>>> conf.L3socket=L3RawSocket
>>> sr1(IP(dst="127.0.0.1")/ICMP())
<IP version=4L ihl=5L tos=0x0 len=28 id=40953 flags= frag=0L ttl=64 proto=ICMP chksum=0xdce5 src=127.0.0.1 dst=127.0.0.1 options='' |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |>>
BPF 过滤器在 PPP 链路上不能工作
这是一个已知的 bug。BPF 过滤器必须在 PPP 链路上以不同的偏移来编译。如果你使用libpcap
(将用来编译 BFP 过滤器),而不是使用 Linux 本地的支持(PF_PACKET
套接字),他可能会工作。
traceroute()
在 PPP 链路上不能工作
这是一个已知的 bug,BPF 过滤器在 PPP 链路上不能工作。
为了能让他正常工作,使用nofilter=1
:
>>> traceroute("target", nofilter=1)
画图太丑,字体太大,图片被截断
快速修复:用 png 格式
>>> x.graph(format="png")
更新 GraphViz 的最新版本
尝试提供不同的 DPI 选项(比如说:50,70,75,96,101,125):
>>> x.graph(options="-Gdpi=70")
如果它工作了,你可以永久设置它:
>>> conf.prog.dot = "dot -Gdpi=70"
你也可以将这一行放在你的~/.scapy_startup.py
文件中。
获取帮助
常见问题都在 FAQ 中。
在scapy.ml(at)secdev.org
(归档,RSS,NNTP)上有一个低流量邮件列表。 我们鼓励你向此列表发送问题,错误报告,建议,想法,Scapy 的有趣用法等。 通过发送邮件到scapy.ml-subscribe(at)secdev.org
来订阅。
为了避免垃圾邮件,你必须订阅邮件列表才能发布。