使用Google App Engine套接字进行DNS查询

时间:2013-04-10 14:44:52

标签: python google-app-engine dns

我正在尝试使用Google App Engine的新套接字支持来执行一些DNS查询。我正在使用dnspython来执行查询,并且代码在GAE之外正常工作。

代码如下:

class DnsQuery(webapp2.RequestHandler):

    def get(self):
       domain  = self.request.get('domain')
       logging.info("Test Query for "+domain)
       answers = dns.resolver.query(domain, 'TXT', tcp=True)
       logging.info("DNS OK")
       for rdata in answers:
          rc =  str(rdata.exchange).lower()
          logging.info("Record "+rc)

当我在GAE中运行时,我收到以下错误:

  File "/base/data/home/apps/s~/one.366576281491296772/main.py", line 37, in post
    return self.get()   
  File "/base/data/home/apps/s~/one.366576281491296772/main.py", line 41, in get
    answers = dns.resolver.query(domain, 'TXT', tcp=True)
  File "/base/data/home/apps/s~/one.366576281491296772/dns/resolver.py", line 976, in query
    raise_on_no_answer, source_port)
  File "/base/data/home/apps/s~/one.366576281491296772/dns/resolver.py", line 821, in query
    timeout = self._compute_timeout(start)
  File "/base/data/home/apps/s~/one.366576281491296772/dns/resolver.py", line 735, in _compute_timeout
    raise Timeout

在时间限制内未返回任何答案时,由dnspython引发的内容。我已将时间限制提高到60秒,而DnsQuery是一项任务,但仍然会出现同样的错误。

Google App Engine套接字实施是否有任何限制,这会阻止DNS请求的执行?

3 个答案:

答案 0 :(得分:7)

这是一个错误,将尽快修复。

作为解决方法,将source =''参数传递给dns.resolver.query。

tcp = True是没有必要的。

答案 1 :(得分:1)

没有。 UDP端口没有限制。 (TCP上只有smtp端口)。

套接字服务路由可能存在问题。请提交应用引擎问题跟踪器的问题。 https://code.google.com/p/googleappengine/issues/list

答案 2 :(得分:1)

dnspython正在使用socket。但是,套接字仅适用于付费应用。1