###############################################################################
import argparse
+import gettext
import sys
import syslog
import location
# i18n
-_ = lambda x: x
+def _(singular, plural=None, n=None):
+ if plural:
+ return gettext.dngettext("libloc", singular, plural, n)
+
+ return gettext.dgettext("libloc", singular)
class CLI(object):
def __init__(self):
parser.add_argument("--debug", action="store_true",
help=_("Enable debug output"))
+ # version
+ parser.add_argument("--version", action="version",
+ version="%%(prog)s %s" % location.__version__)
+
# lookup an IP address
lookup = subparsers.add_parser("lookup",
help=_("Lookup one or multiple IP addresses"),
lookup.add_argument("address", nargs="+")
lookup.set_defaults(func=self.handle_lookup)
+ # Get AS
+ get_as = subparsers.add_parser("get-as",
+ help=_("Get information about one or multiple Autonomous Systems"),
+ )
+ get_as.add_argument("asn", nargs="+")
+ get_as.set_defaults(func=self.handle_get_as)
+
+ # Search for AS
+ search_as = subparsers.add_parser("search-as",
+ help=_("Search for Autonomous Systems that match the string"),
+ )
+ search_as.add_argument("query", nargs=1)
+ search_as.set_defaults(func=self.handle_search_as)
+
return parser.parse_args()
def run(self):
try:
n = self.db.lookup(address)
except ValueError:
- sys.stderr.write(_("Invalid IP address: %s") % address)
+ print(_("Invalid IP address: %s") % address, file=sys.stderr)
args = {
"address" : address,
# Nothing found?
if not n:
- print(_("Nothing found for %(address)s") % args)
+ print(_("Nothing found for %(address)s") % args, file=sys.stderr)
ret = 1
continue
return ret
+ def handle_get_as(self, ns):
+ """
+ Gets information about Autonomous Systems
+ """
+ ret = 0
+
+ for asn in ns.asn:
+ try:
+ asn = int(asn)
+ except ValueError:
+ print(_("Invalid ASN: %s") % asn, file=sys.stderr)
+ ret = 1
+ continue
+
+ # Fetch AS from database
+ a = self.db.get_as(asn)
+
+ # Nothing found
+ if not a:
+ print(_("Could not find AS%s") % asn, file=sys.stderr)
+ ret = 1
+ continue
+
+ print(_("AS%(asn)s belongs to %(name)s") % { "asn" : a.number, "name" : a.name })
+
+ return ret
+
+ def handle_search_as(self, ns):
+ for query in ns.query:
+ # Print all matches ASes
+ for a in self.db.search_as(query):
+ print(a)
def main():
# Run the command line interface