繁体   English   中英

在 scapy 中通过物理环回发送数据包

[英]Sending a packet over physical loopback in 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 值。

结果嗅探/日志文件是空的。 没什么可报告的

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

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

谢谢!

只是在自己寻找类似的解决方案时偶然发现了您的问题。 我在Scapy 故障排除页面上找到了这个:

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

为了与本地应用程序对话,您需要使用 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 |>>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM