【问题标题】:Binding outgoing socket to specific (virtual) adapter将传出套接字绑定到特定(虚拟)适配器
【发布时间】:2015-01-30 00:05:06
【问题描述】:

是否可以将套接字绑定到特定的虚拟适配器? 以下 Python 代码适用于真正的适配器,例如。 eth0 用于电缆,wlan0 用​​于 wifi:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, 25, b"eth0")

但是当我尝试将套接字绑定到虚拟适配器时,例如“eth0:0”我收到错误“OSError: [Errno 19] No such device”。

我的虚拟适配器似乎工作正常,并且可以 ping 通。

基本上,我要做的是从特定 ip(分配给虚拟适配器)生成传出流量。目的是使用单台计算机对网络上的嵌入式设备进行加载/泛洪测试。

【问题讨论】:

  • 您说您在绑定时遇到错误,绑定代码在哪里?通常您使用不需要接口名称或索引的 IP 地址和端口号的主机进行绑定,例如 s.bind('10.10.10.10', 3003)
  • @cmidi,我的问题是传出连接,不接受传入。设置套接字选项时抛出错误。希望这更清楚: 's = socket.socket(socket.AF_INET, socket.SOCK_STREAM)' 's.setsockopt(socket.SOL_SOCKET, 25, adapter)' 's.connect((ADDRESS, PORT))' 's .send(msg)'

标签: python linux sockets


【解决方案1】:

您应该知道,对于内核,这些(eth0 和 eth0:1)是相同的接口 eth0。 仅系统管理员需要标签或“别名”,例如 eth0:1(实际上您可以使用一些更好的用户友好标签,例如 eth0:internal_net),而不是应用程序 所以你应该依赖源IP(或者让内核根据路由表自动选择它)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-23
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多