首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免RDNS查找HTTP请求

避免RDNS查找HTTP请求
EN

Stack Overflow用户
提问于 2012-11-07 17:48:56
回答 1查看 570关注 0票数 2

我尝试使用python设置HTTP连接,使用以下代码。我自己解决DNS问题,因为我不能更改有关机器上的hostsresolv.conf文件。

代码语言:javascript
复制
class resolver(object):
    def __init__(self, server):
        self.server = server
    def __call__(self, host):
        res = check_output('host %s %s' % (host, self.server), shell = True)
        ips = findall('has address (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', res)
        return choice(ips)

class http_connection(httplib.HTTPConnection):
    dns_server = '8.8.8.8'
    def connect(self):
        resolv = resolver(http_connection.dns_server)
        self.sock = socket.create_connection((resolv(self.host), self.port), self.timeout)
...
x = http_connection('%s:%d' % (args.host, args.port))
x.request('GET','/start/')
rep = x.getresponse()
print rep.read()

一切正常,我从DNS获得一个IP,套接字被创建(带有一个ip端口对,而不是主机名),我确实得到了答案。唯一的问题是,这需要很长时间,最多5-6秒。调试后,我发现由于某种原因,会发生解析IP的反向DNS查找,这是超时的。在向/etc/host添加了一个条目之后,我在另一台机器上复制了它,从而验证了这是一个问题。此外,它的价值:使用curl或wget也导致了RDNS。

我看到了两种解决这些问题的方法,但无法找到实际实现它们的方法:

  1. 理想情况下,我确实希望一个反向查找尽可能匹配默认行为,那么是否有一种方法可以强制此查找到我自己提供的dns_server (这不是resolv.conf中的)。
  2. 如果不可能,我可以在某个地方禁用这个RDNS吗?我可以升到setsockopt级别。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-08 09:53:45

我终于找到了一个自己解决这个问题的方法。显然,当我自己没有显式地提供源地址并让系统选择时,就会发生这种情况。我想Linux做了一些技巧来找出哪个接口最适合使用,而RDNS就是其中之一。

通过提供如下所示的source_address,一切都很好:

代码语言:javascript
复制
class http_connection(httplib.HTTPConnection):
    def __init__(self, dns_server, *args, **kwargs):
        httplib.HTTPConnection.__init__(self, *args, **kwargs)
        self.resolv = resolver(dns_server, self.source_address)
    def connect(self):
        self.sock = socket.create_connection((self.resolv(self.host), self.port), self.timeout, self.source_address)
...
x = http_connection(args.dns_server, '%s:%d' % (args.host, args.port), source_address = (args.source_address, 0))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13275291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档