2
4

1 回答 1

3

scapy 文档提到环回地址是一种特殊情况

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

|\>

但是,在我的 OS-X 机器上进行测试会导致以下错误:

>>> conf.L3socket=L3RawSocket
>>> sr1(IP(dst="127.0.0.1")/ICMP())
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scapy/sendrecv.py", line 334, in sr1
    s=conf.L3socket(filter=filter, nofilter=nofilter, iface=iface)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scapy/supersocket.py", line 64, in __init__
    self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))
AttributeError: 'module' object has no attribute 'AF_PACKET'

所以你的里程可能会有所不同

编辑

显然,这是 BSD 类系统(包括 OS-X)上 scapy 中的一个已知错误:http: //bb.secdev.org/scapy/issue/174/sniffing-loopback-in-mac-os-x-darwin

于 2014-06-29T03:57:56.143 回答