使用Scapy创建UDP数据包

时间:2018-07-02 18:03:53

标签: python-3.x networking udp ip scapy

我在使用MacBook的Python3上使用Scapy发送自定义UDP数据包时遇到麻烦。  想要将自定义源IP为192.168.1.11的UDP数据包发送到我的当前计算机,其IP为192.168.1.17,该IP在端口UDP上托管6789服务器。我想使用Scapy发送一条消息,说“嗨”,所以我编写了以下代码,

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

我不知道这是什么意思,或者我做错了什么,在这里谁能帮助我指出正确的方向?

1 个答案:

答案 0 :(得分:1)

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

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

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

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