From: Bob Halley Date: Thu, 18 Jun 2009 10:22:15 +0000 (+0100) Subject: Allow a source port to be specified X-Git-Tag: v1.7.0~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81472eeb38464c551c58078d1525db7b2963fe89;p=thirdparty%2Fdnspython.git Allow a source port to be specified --- diff --git a/dns/resolver.py b/dns/resolver.py index 2bfdaf27..9173d2ba 100644 --- a/dns/resolver.py +++ b/dns/resolver.py @@ -538,7 +538,7 @@ class Resolver(object): return min(self.lifetime - duration, self.timeout) def query(self, qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN, - tcp=False): + tcp=False, source=None): """Query nameservers to find the answer to the question. The I{qname}, I{rdtype}, and I{rdclass} parameters may be objects @@ -554,6 +554,8 @@ class Resolver(object): @type rdclass: int or string @param tcp: use TCP to make the query (default is False). @type tcp: bool + @param source: bind to this IP address (defaults to machine default IP). + @type source: IP address in dotted quad notation @rtype: dns.resolver.Answer instance @raises Timeout: no answers could be found in the specified lifetime @raises NXDOMAIN: the query name does not exist @@ -603,10 +605,12 @@ class Resolver(object): try: if tcp: response = dns.query.tcp(request, nameserver, - timeout, self.port) + timeout, self.port, + source=source) else: response = dns.query.udp(request, nameserver, - timeout, self.port) + timeout, self.port, + source=source) except (socket.error, dns.exception.Timeout): # # Communication failure or timeout. Go to the @@ -709,14 +713,14 @@ def get_default_resolver(): return default_resolver def query(qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN, - tcp=False): + tcp=False, source=None): """Query nameservers to find the answer to the question. This is a convenience function that uses the default resolver object to make the query. @see: L{dns.resolver.Resolver.query} for more information on the parameters.""" - return get_default_resolver().query(qname, rdtype, rdclass, tcp) + return get_default_resolver().query(qname, rdtype, rdclass, tcp, source) def zone_for_name(name, rdclass=dns.rdataclass.IN, tcp=False, resolver=None): """Find the name of the zone which contains the specified name.