使用 Scapy 创建 UDP 数据包

UDP Packet Creation With Scapy

我在 Python3 上用 Mac 本书发送自定义 UDP 数据包时遇到问题。 想要将自定义源 IP 为 192.168.1.11 的 UDP 数据包发送到我当前的机器,IP 为 192.168.1.17,该机器在端口 6789 上托管 UDP 服务器。我想用 Scapy 发送一条消息说 "Hi" 所以我写了下面的代码,

from scapy.all import *
from random import randrange
sendp(IP(src="192.168.11",dst="192.168.1.17")/UDP(sport=randrange(80,65535),dport=6789)/"Hi",iface="en0",count=10)

然后我有一个服务器等待在收到数据后响应并将收到的消息打印到屏幕上。但是当以提升的权限执行这段代码时,scapy 说 the packets were sent but the server didn't receive the response.

所以我去en0我Mac上的无线接口调试。这是我发现的:

Wireshark 说

the source is Applicon_11:f8:61, the destination is 45:00:00:1e:00:01, the protocol is 0xc0a8(Unknown) and the data is 16 bytes of Hex: 0000   45 00 00 1e 00 01 00 00 40 11 f8 61 c0 a8 00 0b ASCII Dump:  E.......@.øaÀ¨..
0010   c0 a8 01 11 67 18 1a 85 00 0a b3 66 48 69         À¨..g.....³fHi

我不知道这意味着什么或我在这里做错了什么任何人都可以帮助我指出正确的方向吗?

sendp用于第2层发送 send 用于第 3 层发送

在你的情况下,你应该使用

  • 第 2 层:sendp(Ether()/IP(..)....)。 (如果需要,将 Ether 替换为 Loopback

  • 在第 3 层:send(IP(...))