gpt4 book ai didi

python - PycURL 通过特定接口(interface)发送 DNS 流量

转载 作者:行者123 更新时间:2023-12-01 08:22:11 24 4
gpt4 key购买 nike

我的盒子上有多个接口(interface),并且想要使用 python 强制流量通过特定接口(interface)。

This thread回答了如何对 HTTP 流量执行此操作。但是当我查看 tcpdump 时,DNS 查询不遵循接口(interface)设置。 libcurl 提供了使用选项 CURLOPT_DNS_INTERFACE 强制 DNS 流量通过特定接口(interface)的选项。和 CURLOPT_DNS_LOCAL_IP4

我尝试通过 C 使用相同的方法,当 libcurl 是使用 c-ares 支持构建时,它似乎尊重该接口(interface)。

但是当使用 pycurl 版本中的相同选项时,会导致以下错误:

AttributeError: DNS_INTERFACE
AttributeError: DNS_LOCAL_IP4

我正在尝试建议猴子修补on this thread 。但根据评论,其他人已经报告说它不起作用。谢谢。

[编辑] 使用绑定(bind)测试了上述猴子修补,tcpdump 仍然显示通过不同接口(interface)的流量。修复了格式。

最佳答案

发生 AttributeError 是因为 PycURL 仅支持在 src/module.c 中列出的curl 选项。人们可以通过镜像 CURLOPT_DNS_INTERFACE 支持 CURLOPT_INTERFACE 的方式来添加对 CURLOPT_DNS_INTERFACE 的支持 - 通过添加

    insint_c(d, "DNS_INTERFACE", CURLOPT_DNS_INTERFACE);

    case CURLOPT_DNS_INTERFACE:

在 src/module.c 和 src/easyopt.c 中有关 CURLOPT_INTERFACE 的行之后,我可以构建一个支持 DNS_INTERFACE 的版本。我使用 python setup.py install 进行构建(请参阅 docs ),遇到两个错误,用此 answer 解决了和 make src/docstrings.c (参见 GitHub )。

这里是 docs 的示例添加了 DNS_INTERFACE:

import pycurl
from StringIO import StringIO

buffer = StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'http://pycurl.io/')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.DNS_INTERFACE, "enp9s0")
c.perform()
c.close()

body = buffer.getvalue()
print(body)

它目前在 c.setopt(c.DNS_INTERFACE, "enp9s0") 上给我 pycurl.error: (4, ''),但此错误会likely自从您使用 c-ares 支持构建 libcurl 以来,这种情况就不会发生。

关于python - PycURL 通过特定接口(interface)发送 DNS 流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com