【问题标题】:Python Windows raw socket invalid bind argumentPython Windows 原始套接字无效绑定参数
【发布时间】:2019-01-21 09:46:23
【问题描述】:

我想在 Windows 中创建一个原始套接字以连接到笔记本电脑上的特定接口。我让它在 Linux 上运行,但它在 Windows 上不运行。

这是我的代码,在 Linux 中可以,但在 Windows 中不行:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
#s.bind(("192.168.1.100", 0))
s.bind((socket.gethostname(), 0))
#s.bind((socket.gethostbyname(socket.gethostname()), 0))

注释掉的行是我在这里找到的建议:Python Raw Socket to Ethernet Interface (Windows) 但它们对我不起作用。我总是收到这个错误:

Traceback (most recent call last):
  File "D:/raw_socket.py", line 5, in <module>
    s.bind((socket.gethostname(), 0))
OSError: [WinError 10022] An invalid argument was supplied

我在研究这个问题时无法找到解决方案。非常感谢任何帮助。

【问题讨论】:

    标签: python windows python-3.x sockets raw-sockets


    【解决方案1】:

    我在另一篇文章中添加了答案:https://stackoverflow.com/a/53681616/5459467 您可以查看代码示例

    简短回答:由于 Windows 限制,您不能在 Python 中使用本机

    但您可以使用 Npcap / Winpcap 解决它。但是,这需要在它和 Python 之间有一个兼容性包装器(它们只提供一个dll API 来使用)

    存在各种包装器,最跨平台的包装器是 scapy,因为它创建的套接字将在 Windows 上使用 Npcap/Winpcap,在 Linux 上使用套接字模块,在 OSX 上使用 pcapy(或类似)......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 2014-01-04
      • 2017-02-16
      • 2011-04-29
      • 1970-01-01
      • 2018-12-02
      相关资源
      最近更新 更多