4

我最近开始探索 Scapy。确实是一个很棒的工具!

我有一个问题...当我使用 Wireshark 监控我的网卡并使用标准 PING 安装从系统命令提示符执行常规 ping 时,wireshark 弹出“Ping 请求”然后“Ping 回复”指示它发送回答。但是当我在 Scapy 中手动执行此操作时,它没有回复任何回复.. 这怎么可能?我花了很多时间试图弄清楚这一点,所以我真的希望有人能对我的这个问题有所了解......

这是我使用的代码:

>>> from scapy.all import IP, ICMP, send
>>> IP = IP(dst="127.0.0.1")
>>> Ping = ICMP()
>>> send(IP/Ping)

数据包发送成功,Wireshark 显示收到了 Ping 请求,但没有回复。

4

2 回答 2

7

这是一个常见问题解答项目

我无法 ping 127.0.0.1。Scapy 不适用于 127.0.0.1 或环回接口

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 |>>
于 2010-11-22T15:00:52.357 回答
0

尝试这个

def ping(host, repeat=3):
    packet = IP(dst=host)/ICMP()
    for x in range(repeat):
        response = sr1(packet)
        response.show2()

您没有正确存储回复

于 2010-11-22T13:45:31.133 回答