Skip to content

Instantly share code, notes, and snippets.

@taroved
Created December 4, 2020 23:04
Show Gist options
  • Save taroved/a85b779180244b8dd712b99076a40f4e to your computer and use it in GitHub Desktop.
Save taroved/a85b779180244b8dd712b99076a40f4e to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- test-case-name: twisted.names.test.test_examples -*-
# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.
"""
Print the IP address for a given hostname. eg
python gethostbyname.py www.google.com
This script does a host lookup using the default Twisted Names
resolver, a chained resolver, which attempts to lookup a name from:
* local hosts file
* memory cache of previous lookup results
* system recursive DNS servers
"""
import sys
from twisted.names import client, error
from twisted.internet.task import react
from twisted.python import usage
class Options(usage.Options):
synopsis = "Usage: gethostbyname.py HOSTNAME"
def parseArgs(self, hostname):
self["hostname"] = hostname
def printResult(address, hostname):
"""
Print the IP address or an error message if an IP address was not
found.
"""
if address:
sys.stdout.write(address + "\n")
else:
sys.stderr.write(
"ERROR: No IP addresses found for name {!r}\n".format(hostname)
)
def printError(failure, hostname):
"""
Print a friendly error message if the hostname could not be
resolved.
"""
failure.trap(error.DNSNameError)
sys.stderr.write("ERROR: hostname not found {!r}\n".format(hostname))
def main(reactor, *argv):
options = Options()
try:
options.parseOptions(argv)
except usage.UsageError as errortext:
sys.stderr.write(str(options) + "\n")
sys.stderr.write("ERROR: {}\n".format(errortext))
raise SystemExit(1)
hostname = options["hostname"]
d = client.createResolver(servers=[('8.8.8.8', 53), ('8.8.4.4', 53)]).getHostByName(hostname)
d.addCallback(printResult, hostname)
d.addErrback(printError, hostname)
return d
if __name__ == "__main__":
react(main, sys.argv[1:])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment