常见问题

译者:飞龙

原文:Troubleshooting

协议:CC BY-NC-SA 4.0

我的 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

  1. >>> conf.L3socket
  2. <class __main__.L3PacketSocket at 0xb7bdf5fc>
  3. >>> conf.L3socket=L3RawSocket
  4. >>> sr1(IP(dst="127.0.0.1")/ICMP())
  5. <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:

  1. >>> traceroute("target", nofilter=1)

画图太丑,字体太大,图片被截断

快速修复:用 png 格式

  1. >>> x.graph(format="png")

更新 GraphViz 的最新版本

尝试提供不同的 DPI 选项(比如说:50,70,75,96,101,125):

  1. >>> x.graph(options="-Gdpi=70")

如果它工作了,你可以永久设置它:

  1. >>> conf.prog.dot = "dot -Gdpi=70"

你也可以将这一行放在你的~/.scapy_startup.py文件中。

获取帮助

常见问题都在 FAQ 中。

scapy.ml(at)secdev.org归档RSS,NNTP)上有一个低流量邮件列表。 我们鼓励你向此列表发送问题,错误报告,建议,想法,Scapy 的有趣用法等。 通过发送邮件到scapy.ml-subscribe(at)secdev.org来订阅。

为了避免垃圾邮件,你必须订阅邮件列表才能发布。