| #!/usr/bin/python -S |
| # Prints one of the IP addresses of each of the hostnames given on the |
| # command line. If no arguments are given, returns nonzero. |
| # Only prints addresses that have an active IP route to them. |
| import errno |
| import socket |
| import sys |
| |
| TEST_PORT = 123 |
| |
| ok = 0 |
| for i in sys.argv[1:]: |
| try: |
| ailist = socket.getaddrinfo(i, TEST_PORT, |
| socket.AF_UNSPEC, socket.SOCK_DGRAM) |
| except socket.error as e: |
| sys.stderr.write('%s: %r: %s\n' % (sys.argv[0], i, e)) |
| else: |
| for family, _, _, _, addr in ailist: |
| s = socket.socket(family, socket.SOCK_DGRAM) |
| try: |
| # Datagram sockets don't actually "connect" here. This just |
| # tests whether we have a route that can handle it. |
| s.connect(addr) |
| except socket.error as e: |
| if e.errno != errno.ENETUNREACH: |
| sys.stderr.write('%s: %r: %s\n' % (sys.argv[0], addr, e)) |
| else: |
| print addr[0] |
| ok = 1 |
| sys.exit(0 if ok else 1) |