【问题标题】:socket.error errno=10022 when using socket.send(packet, (ip, port))socket.error errno=10022 使用 socket.send(packet, (ip, port)) 时
【发布时间】:2015-09-15 23:54:50
【问题描述】:

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

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 ))

【问题讨论】:

    标签: python sockets


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 2011-03-04
      • 1970-01-01
      • 2013-10-04
      • 2013-10-12
      • 2013-02-12
      • 2017-04-22
      • 1970-01-01
      • 2021-10-03
      相关资源
      最近更新 更多