The current hostname validation does not cope with IPv6-only hostnames. Use getaddrinfo instead of gethostbyname to fix this. getaddrinfo raises the same exceptions and should work like a drop-in-replacement in this scenario.
We should also address the IPv4-only check for if then input is an IP-address but the use of split on ':' is problematic and prevents code to check for IPv6-addresses as input. I'm not sure what the thought behind allowing "name:host" is so leaving it untouched.
I have proposed code to check and warn for both IPv4 and IPv6 address input that I can provide as soon as I understand the scope of parsing "name:host" input.
name = parts[0]
host = parts[-1]
try:
- self.socket.gethostbyname(host)
+ self.socket.getaddrinfo(host, 0)
except self.socket.gaierror:
msg = "hostname: %s is not resolvable" % host
raise argparse.ArgumentError(None, msg)