Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DNS query using Google App Engine socket

I'm trying to use the new socket support for Google App Engine in order to perform some DNS queries. I'm using dnspython to perform the query, and the code works fine outside GAE.

The code is the following:

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)

When I run in GAE I get the following error:

  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

Which is raised by dnspython when no answer is returned within the time limit. I've raised the timelimit to 60 seconds, and DnsQuery is a task, but still getting the same error.

Is there any limitation in Google App Engine socket implementation, which prevents the execution of DNS requests ?

like image 654
ROOTto Avatar asked Apr 10 '13 14:04

ROOTto


2 Answers

This is a bug and will be fixed ASAP.

As a workaround, pass in the source='' argument to dns.resolver.query.

tcp=True is not necessary.

like image 120
Iain Wade Avatar answered Sep 29 '22 10:09

Iain Wade


No. There is no limit on UDP ports. (only smtp ports on TCP).

It is possible there is an issue with the socket service routing. Please file an issue with the app engine issue tracker. https://code.google.com/p/googleappengine/issues/list

like image 37
ozzee Avatar answered Sep 29 '22 09:09

ozzee