Python 无法通过OSX上的RAW_SOCK发送数据包

Python 无法通过OSX上的RAW_SOCK发送数据包,python,macos,sockets,raw-sockets,darwin,Python,Macos,Sockets,Raw Sockets,Darwin,在搜索和阅读了大量文档之后,我在OSX上使用RAW_SOCK使用familyAF_INET发送自定义IPv4+UDP数据包时遇到了一些麻烦 给出下面的示例代码(python): 导入套接字 ip_数据包= raw\u sock=socket.socket(socket.AF\u INET,socket.sock\u raw,socket.IPPROTO\u raw) 原始插座设置插座(插座.IPPROTO_IP,插座.IP_HDRINCL,1) 原始套接字发送到(ip_头+udp_头,(“1.1

在搜索和阅读了大量文档之后,我在OSX上使用
RAW_SOCK
使用family
AF_INET发送自定义IPv4+UDP数据包时遇到了一些麻烦

给出下面的示例代码(python):

导入套接字
ip_数据包=
raw\u sock=socket.socket(socket.AF\u INET,socket.sock\u raw,socket.IPPROTO\u raw)
原始插座设置插座(插座.IPPROTO_IP,插座.IP_HDRINCL,1)
原始套接字发送到(ip_头+udp_头,(“1.1.1.1”,0))
我得到了
OSError:[Errno 22]无效参数
。我怀疑我在构建IP数据包时有点不对劲,但是考虑到它在Linux和所有其他BSD上都能工作,我不能完全确定我构建的报头的哪些部分是错误的。唯一的领域

是否有涉及Darwins
原始袜子的文件?具体来说,什么标题应该是什么值(和endianness?)


我在这里收集了一些粗略的代码,说明了我要做的事情:

在链接处的代码中,您分配了两次
ip_头
,对吗?这是正确的-首先生成一个带有空校验和的头,第二步,在您分配给
ip_header
两次的链接中,在代码中生成具有正确校验的报头,是否正确?这是正确的-第一步,生成具有空白校验和的报头,第二步,生成具有正确校验和的报头
import socket

ip_packet = <full code below> 

raw_sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
raw_sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
raw_sock.sendto(ip_header + udp_header, ("1.1.1.1", 0))