【问题标题】:Address family not supported by protocol While using Scapy L3socket with WSL协议不支持的地址系列在将 Scapy L3socket 与 WSL 一起使用时
【发布时间】:2022-06-15 09:43:13
【问题描述】:

我尝试使用 Scapy 来配置 L3 套接字:

from scapy.all import *
soc = conf.L3socket(iface="eth1")

当我在 Ubuntu VM 中使用此代码时,一切正常,但是当我将此代码与 WSL 一起使用时,我得到了这个错误:

/usr/local/lib/python3.10/dist-packages/scapy/layers/ipsec.py:471: CryptographyDeprecationWarning: Blowfish has been deprecated
  cipher=algorithms.Blowfish,
/usr/local/lib/python3.10/dist-packages/scapy/layers/ipsec.py:485: CryptographyDeprecationWarning: CAST5 has been deprecated
  cipher=algorithms.CAST5,
Traceback (most recent call last):
  File "........./python/test.py", line 2, in <module>
    soc = conf.L3socket(iface="eth1")
  File "/usr/local/lib/python3.10/dist-packages/scapy/arch/linux.py", line 486, in __init__
    self.ins = socket.socket(
  File "/usr/lib/python3.10/socket.py", line 232, in __init__
    _socket.socket.__init__(self, family, type, proto, fileno)
OSError: [Errno 97] Address family not supported by protocol

我该如何解决这个问题?

【问题讨论】:

  • 涉及的 Windows 越多,我希望看到的支持就越少; Windows strictly limits raw sockets;只有管​​理员可以创建它们,即使他们这样做了,它也会执行检查以防止某些常见形式的恶意软件滥用(例如,伪造数据包的发件人地址,通常由 DDoS 僵尸网络使用)。我不知道是否认为 WSLv2 进程以您需要的提升权限级别运行(或者它是否真的需要它们);完整的虚拟机将与操作系统更加隔离。

标签: python-3.x sockets windows-subsystem-for-linux scapy wsl-2


【解决方案1】:

首先,我有一种强烈的预感,您实际上正在使用 WSL1 实例。首先使用wsl.exe -l -v 仔细检查。

安装/启用 WSL2 但仍有 WSL1 实例从未转换为 WSL2 的情况很常见。

有几件事表明这是 WSL1:

  • 你有一个eth1 接口——WSL2 通常没有,因为它只设置 一个 虚拟以太网设备供 Linux 内核使用。

    另一方面,WSL1 使用 Windows API(通过系统调用转换层)枚举 Windows 可用的实际网络接口。

  • 错误消息OSError: [Errno 97] Address family not supported by protocol 仅在 WSL1 上可见。系统调用转换层不提供所有 Linux API 的完整实现,网络接口配置是未完全实现的一个领域。

因此,至少,您需要转换为 WSL2 才能使其正常工作。假设 WSL2 已实际安装并在您的系统上可用,您可以通过以下方式执行此操作:

  • 退出 WSL
  • 来自 PowerShell:
    • 使用wsl -l -v 确认实例/发行版的名称。
    • (可选)使用wsl --export distro_name path/to/backup.tar 备份现有实例
    • wsl --set-version &lt;distro_name&gt; 2

您仍然应该了解,在 WSL2 下,网络接口确实在具有所有功能的普通 Linux 内核下运行。但是,它是一个运行在经过 NAT 的虚拟交换机后面的虚拟化 NIC。尽管that's changing to some degree,目前对该开关没有太多控制。也就是说,第 3 层在 WSL2 中应该可以正常工作,尽管您当然需要确保适当的权限。例如,您问题中的示例代码需要sudo/root。

无论如何,您都可以在真正的虚拟机中更好地控制网络。如果你在 WSL2 中遇到了太多的 scapy 障碍,那么我会考虑切换到这个特定的用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2019-02-01
    • 2013-12-20
    • 2013-11-21
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    相关资源
    最近更新 更多