Skip DNS resolving if provided host is already an ip address#874
Closed
lphuberdeau wants to merge 1 commit intoaio-libs:masterfrom
Closed
Skip DNS resolving if provided host is already an ip address#874lphuberdeau wants to merge 1 commit intoaio-libs:masterfrom
lphuberdeau wants to merge 1 commit intoaio-libs:masterfrom
Conversation
| ipaddress.ip_address(host) | ||
| return True | ||
| except ValueError: | ||
| return False |
Member
There was a problem hiding this comment.
Everybody most of their time use host names not IP addresses,
so most of time this method will raise and except ValueError what is not very efficient.
Contributor
Author
There was a problem hiding this comment.
Anything else to suggest? The ipaddress module does not have a way to verify the format while avoiding the exception. Custom-made validation does not seem like a better route.
|
For this, we have: class IPAwareAsyncResolver(AsyncResolver):
@asyncio.coroutine
def resolve(self, host, port=0, family=socket.AF_INET):
if not host or family not in {socket.AF_UNSPEC, socket.AF_INET, socket.AF_INET6}:
return []
if hasattr(socket, 'inet_pton'):
if family == socket.AF_UNSPEC:
afs = [socket.AF_INET, socket.AF_INET6]
else:
afs = [family]
for af in afs:
# Linux's inet_pton doesn't accept an IPv6 zone index after host,
# like '::1%lo0', so strip it. If we happen to make an invalid
# address look valid, we fail later in sock.connect or sock.bind.
try:
if af == socket.AF_INET6:
socket.inet_pton(af, host.partition('%')[0])
else:
socket.inet_pton(af, host)
return [{'hostname': host, 'host': host, 'port': port, 'family': family, 'proto': 0, 'flags': socket.AI_NUMERICHOST}]
except OSError:
pass
# ... if we reach here, this means it's not a valid IP. try a DNS lookup.
hosts = yield from super(IPAwareAsyncResolver, self).resolve(host, port, family)
return hosts |
Member
|
Fixed by #905 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When using the AsyncResolver, there is a DNSError when trying to access a url where the host is an ip address.
This patch skips the resolver step if the host is an ip address.
An alternative would have been to move the same patch to the AsyncResolver, but other resolvers would likely have the same issue. Also, there was also a condition formatting the result properly in the TCPConnector.