小编Art*_*ais的帖子

原始套接字和python中的sendto

我正在努力将scapy与扭曲整合,但我遇到了OSX上这个非常奇怪的错误,我似乎无法弄明白.

基本上我无法通过原始套接字发送有效的TCP数据包(包括IP头).这就是我在做的事情:

import socket
from scapy.all import IP, TCP
pkt = IP(src='0.0.0.0', dst='127.0.0.1')/TCP()
spkt1 = str(pkt)
outs = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
outs.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1)
outs.sendto(spkt1, ('127.0.0.1', 0))
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我收到以下错误:

outs.sendto(spkt1, ('127.0.0.1', 0)) socket.error: [Errno 22] Invalid argument

如果您没有scapy on不想使用它,这是数据包base64编码:

import base64
spkt1 = base64.b64decode("RQAAKAABAABABvvOAAAAAH8AAAEAFABQAAAAAAAAAABQAiAAEH4AAA==")
Run Code Online (Sandbox Code Playgroud)

非常奇怪的是,几乎相同的数据包似乎正确发送:

spkt2 = base64.b64decode("RQBAAAWwAAACBgAAAAAAAH8AAAEAyAOEAAAAAAAAAACwAgDIAHsAAAIEBbQBAwMBAQEICk3PUjMAAAAABAIAAA==")
Run Code Online (Sandbox Code Playgroud)

这是两个数据包的样子:

SPKT1
0000   45 00 00 28 00 01 00 00  40 06 FB CE 00 00 00 00   E..(....@.......
0010   7F 00 00 01 00 14 00 50  00 00 00 00 …
Run Code Online (Sandbox Code Playgroud)

python ip networking tcp scapy

13
推荐指数
1
解决办法
7317
查看次数

标签 统计

ip ×1

networking ×1

python ×1

scapy ×1

tcp ×1