python - 为 python 脚本禁用 IPv6

标签 python ipv6

我正在寻找一种通用方法来在一个特定的 Python 脚本中抑制 AAAA 分辨率。有没有简单的方法可以做到这一点?

我使用适用于 python 的 Youtube 数据 API,它使用 httplib2 进行握手。我想我需要一些低级别的东西,比如套接字覆盖或其他东西。

要查找的域是谷歌域的问题,因此使用特定前缀的 IPv6 首选项将不起作用。

潜在的问题是我的 IPv6 地址目前位于伊拉克,这是错误的...我已经提交了修复该问题的请求,但我想同时运行该脚本。

最佳答案

对此没有全局 Python 开关,httplib2 似乎也没有提供任何控制它的方法。

httplib2 使用 socket.getaddrinfo (参见 httplib2.HTTPConnectionWithTimeout.connect 的来源)根据域名查找要连接的地址。它将 0 作为 family 参数传入,这意味着使用任何可用的 family。

所以,要解决这个问题,您需要有一些方法来覆盖它。一种方法是实现您自己的连接类,我们称之为 IPv4Connection,它继承自 httplib2.HTTPConnectionWithTimeouthttplib.Connection 并覆盖 connect 强制它使用 IPv4,然后在调用 Http.request(uri, connection_type=IPv4Connection) 时将其作为 connection_type 参数传递。

另一种方法是对 socket.getaddrinfo 进行猴子修补,以强制 family 参数始终为 socket.AF_INET

另一种方法是使用底层方法让您的 C 库更喜欢 IPv4 或禁用 IPv6。这将因平台而异,但在使用 glibc 的 Linux 上,您可以编辑 /etc/gai.conf总是喜欢 IPv4 而不是 IPv6:

precedence ::ffff:0:0/96  100

关于python - 为 python 脚本禁用 IPv6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31519567/

相关文章:

c - 为逐跳扩展 header IPv6 指定新选项?

Android Lollipop (5.1.1) - 创建套接字连接时如何使用 IPV6 地址

python - 在 Django 中序列化外键对象

python - 执行涉及索引和列的 Pandas 连接的最干净的方法

python - 根据另一列的掩码修改 Pandas 数据框列的符号?

python - 使用 python 在 Windows XP 中创建 IPv6 套接字

ios - PJSIP 在 IOS 中从 Nat64 网络注册到 IPV4 服务器

ios - 无法重现 App Store 审核团队遇到的(IPv6?)连接问题

python - 最新的 Python 版本缺少更新的库,如何处理?

python - 有效计算两个数据集之间的成对半正弦距离 - NumPy/Python