如何在python中将socket绑定到接口(socket.SO_BINDTODEVICE丢失)

2024-09-27 21:29:16 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是一件很简单的事情。 我对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

Tags: in命令streamsosocketeth1事情sock
3条回答

如果您不理解错误消息,则表示您所指的名称IN在此时不可用。您的代码片段可能缺少import语句。

出于可移植性的原因,套接字模块可能不提供sou 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'))

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

您甚至可以“导出”缺少的选项:

if not hasattr(socket,'SO_BINDTODEVICE') :
    socket.SO_BINDTODEVICE = 25

那么

sock.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, interface+'\0')

相关问题 更多 >

    热门问题