如何在Python中将套接字绑定到接口(缺少socket.SO_BINDTODEVICE)
这可能是个很简单的事情。
我刚学Python,所以别太苛责我。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, IN.SO_BINDTODEVICE, "eth1"+'\0')
上面的命令给我的结果是:
NameError: name 'IN' is not defined
我唯一的导入是
import socket
4 个回答
2
你甚至可以“导出”一个缺失的选项:
if not hasattr(socket,'SO_BINDTODEVICE') :
socket.SO_BINDTODEVICE = 25
然后
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, interface+'\0')
3
在 Python
中,SO_BINDTODEVICE
是 IN
模块里的一个东西。导入 IN
模块就能解决这个问题。
import socket
import IN
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, IN.SO_BINDTODEVICE, "eth0")
12
如果你不明白错误信息的意思,那就是你在某个地方提到了一个名字 IN
,但这个名字在那个时候是不存在的。你的代码可能缺少一个 导入 语句。
socket模块可能因为兼容性问题不提供 SO_BINDTODEVICE。如果你非常确定你是在支持这个功能的 Linux 系统上运行,可以尝试用它的数字值来替代,那个值是 25
:
s.setsockopt(socket.SOL_SOCKET, 25, "eth1"+'\0')
或者对于 Python 3:
s.setsockopt(socket.SOL_SOCKET, 25, str("eth1" + '\0').encode('utf-8'))