Python Scapy(2.3.1)文档学习(七):故常排除

来源:互联网 发布:傲梦编程素质教育 编辑:程序博客网 时间:2024/06/06 03:43

http://blog.csdn.net/dj1174232716/article/details/49079325

常见问题


我的TCP连接被Scapy或者是我的内核重置了

内核不知道Scapy在做什么,在他返回之前。如果Scapy发送一个SYN数据包,目标回复一个SYN-ACK数据包,你的内核看了一下,然后回复了一个RST数据包。为了避免这个问题,使用本地的防火请规则(比如说是Linux的iptables),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"
你也可以将这一行放在你的Python代码文件中。

0 0