Created
December 4, 2020 23:04
-
-
Save taroved/a85b779180244b8dd712b99076a40f4e to your computer and use it in GitHub Desktop.
This file contains 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
#!/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