在scapy

时间:2016-12-15 14:19:54

标签: python linux networking scapy

我最近发现了Scapy&它看起来很棒

我正在尝试通过NIC上的物理环回模块/存根查看简单流量。

但Scapy嗅闻不给任何东西

我发送数据包的目的是:

payload = 'data'*10
snf = sniff(filter="icmp", iface="eth0")
for x in xrange(1, 10):
  sendp(Ether(dst=src_mac, src=spoof_src_mac)/IP(dst=dst_ip, src=spoof_src_ip)/ICMP()/payload, iface=ifname)

f.open('scapylog.log', 'w')
f.write(str(snf))

使用src_mac =我的mac地址& dsp_ip我的IP地址。 “恶搞”字段只是随机(有效)的mac& ip值。

生成的sniff / logfile为空。无需报告

我可以看到流量通过接口的ifconfig统计信息进入网络,每次调用此脚本时都会增加 - 因此流量正在流动......

如果有人知道为什么我没有看到我的流量,我会很高兴听到:)

谢谢!

1 个答案:

答案 0 :(得分:2)

在我自己寻找类似解决方案的同时偶然发现了你的问题。我在Scapy Troubleshooting页面上找到了这个:

  

loopback接口是一个非常特殊的接口。通过它的数据包并没有真正组装和拆解。内核将数据包路由到其目标,同时它仍然存储在内部结构中。你用tcpdump -i lo看到的只是假的,让你觉得一切正常。内核不知道Scapy在他背后做了什么,所以你在loopback接口上看到的也是假的。除此之外,并非来自当地的结构。因此内核永远不会收到它。

     

为了与本地应用程序对话,您需要使用PF_INET / SOCK_RAW套接字而不是PF_PACKET / SOCK_RAW(或者在Linux以外的其他系统上等效)来构建一层上层数据包:

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