我想在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
研究此问题时找不到解决方案。我们非常感谢您的帮助。
答案 0 :(得分:0)
我在另一篇文章中添加了答案:https://stackoverflow.com/a/53681616/5459467 您可以查看它的代码示例
简短回答:由于Windows的限制,您无法在Python中使用本机
但是您可以使用 Npcap / Winpcap 解决它。但是,这要求它与Python之间具有兼容性包装器(它们仅提供dll
API才能使用)
存在各种各样的包装器,其中最跨平台的是scapy,因为它创建的套接字将在Windows上使用Npcap / Winpcap,在Linux上使用套接字模块,在OSX上使用pcapy(或类似)...