【问题标题】:DNS query using Google App Engine socket使用 Google App Engine 套接字的 DNS 查询
【发布时间】:2013-04-02 11:37:19
【问题描述】:

我正在尝试使用对 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 请求的执行?

【问题讨论】:

  • Google App Engine 也有类似的问题。
  • @Cyril N:检查一下,除了付费应用之外,您还为它设置了每日预算——至少去年有报道称某些付费功能在达到每日预算之前无法正常工作已初始化。
  • @DanCornilescu 我去了计费>预算和警报,我已经定义了某些三分之二的警报。这是你的意思吗?我在stackoverflow.com/a/10894376/330867 看到Google will wait until the first payment is cleared before increasing your mail quota.。也许这就是我的问题。但后来我转到我的 App Engine > Quotas,我可以看到在 Sockets 条目下,我的应用程序做了一些请求(可能使用了我使用的 Python 包requests)。所以Sockets 应该可以工作,但不能与dnspython 一起工作?
  • @CyrilN。我的意思是:stackoverflow.com/questions/27616776/…(你需要调整新的开发者控制台位置,快捷方式是console.cloud.google.com/appengine/settings?project
  • @DanCornilescu 我有两个类似的项目(dev/prod)并且 prod 启用了计费(来自您的链接),所以我用它进行了测试,但它仍然不起作用:/

标签: python google-app-engine dns


【解决方案1】:

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

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

tcp=True 不是必须的。

【讨论】:

  • 它现在对我不起作用。还有其他解决方法吗?
  • 正如 VJudge 提到的,它可能只适用于付费应用,也许这就是为什么这个解决方案对你 Uri 不起作用?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    dnspython 正在使用socket。但是,socket 仅在付费应用中可用。1

    【讨论】:

      猜你喜欢
      • 2018-01-23
      • 1970-01-01
      • 2011-01-15
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 2013-06-21
      相关资源
      最近更新 更多