Python PycURL通过特定接口发送DNS流量

Python PycURL通过特定接口发送DNS流量,python,curl,networking,libcurl,pycurl,Python,Curl,Networking,Libcurl,Pycurl,我在盒子上有多个接口,希望使用python强制流量通过特定接口 解答如何为HTTP流量执行此操作。但是当我查看tcpdump时,DNS查询不支持接口设置。libcurl提供了使用选项和强制DNS流量通过特定接口的选项 我尝试通过C使用同样的方法,当libcurl在C-ares支持下构建时,它似乎尊重这个接口 但是,如果在pycurl版本中使用相同的选项,则会导致以下错误: AttributeError: DNS_INTERFACE AttributeError: DNS_LOCAL_IP4 我

我在盒子上有多个接口,希望使用python强制流量通过特定接口

解答如何为HTTP流量执行此操作。但是当我查看tcpdump时,DNS查询不支持接口设置。libcurl提供了使用选项和强制DNS流量通过特定接口的选项

我尝试通过C使用同样的方法,当libcurl在C-ares支持下构建时,它似乎尊重这个接口

但是,如果在pycurl版本中使用相同的选项,则会导致以下错误:

AttributeError: DNS_INTERFACE
AttributeError: DNS_LOCAL_IP4
我正在尝试猴子修补建议。但是根据评论,其他人已经报告说它不起作用了。谢谢


[edit]通过绑定测试了上述猴子补丁,tcpdump仍然显示通过不同接口的流量。固定格式。

由于PycURL仅支持在src/中列出的curl选项,因此发生AttributeError。可以通过镜像它如何支持CURLOPT_接口来添加对CURLOPT_DNS_接口的支持——添加

    insint_c(d, "DNS_INTERFACE", CURLOPT_DNS_INTERFACE);

在src/module.c和src/easyopt.c中,在关于CURLOPT_接口的行之后,我可以构建一个支持DNS_接口的版本。我在构建中使用了
python setup.py install
(请参阅),遇到了两个错误,这两个错误都用这个和
make src/docstrings.c
(请参阅)解决了

下面是添加了DNS_接口的示例:

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_接口,“enp9s0”)
上给我提供了
pycurl.error:(4',)
,但是这个错误不会发生在您身上,因为您使用c-ares支持构建了libcurl

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)