Python Windows Raw套接字无效的绑定参数

时间:2018-08-14 13:48:08

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

我想在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

研究此问题时找不到解决方案。我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

简短回答:由于Windows的限制,您无法在Python中使用本机

但是您可以使用 Npcap / Winpcap 解决它。但是,这要求它与Python之间具有兼容性包装器(它们仅提供dll API才能使用)

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