使用socket.send(packet,(ip,port))时socket.error errno = 10022

时间:2015-09-15 15:30:58

标签: python sockets

我学会了使用socket发送数据包,但在Windows机器上运行下面的代码时出现错误(socket.error errno = 10022),一切正常。我该如何解决?

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
except socket.error , msg:
    print 'Socket could not be created. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()

s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

source_ip = self.source
dest_ip = self.destination

packet = '';
ip_header = self.construct_ip_header()
tcp_header = self.construct_tcp_header()

packet = ip_header + tcp_header
s.sendto(packet, (dest_ip , 0 ))

1 个答案:

答案 0 :(得分:2)

来自Winsock的错误10022表示"无效的参数"可能是因为您试图将SOCK_RAW与不兼容的IPPROTO_TCP混合使用。第三个参数可能在linux上被忽略了,但是Windows正在抱怨它。

您的代码示例也有一些问题 - 您尝试打开原始套接字,但是手动编写tcp和ip标头,但是没有自己处理TCP状态机?除非你有一些非常专业的要求,否则这似乎非常复杂。

如果您只是尝试在此代码和服务器之间打开TCP套接字,我建议您返回https://docs.python.org/2/library/socket.html#example处的示例。 " Echo客户端程序"看起来像你正在尝试做的事情。