Blocos de endereçamento IP por país
Bom dia malta das inutilidades.
Venho aqui partilhar mais uma das minhas muitas inutilidades... um escripe em pitão inútil que faz a consulta online de ip address blocks atribuidos a um determinado pais e devolve uma lista dos mesmos.
No site onde faço o request, têm a versão csv disponivel também... mas isso não tem piada e não é inútil pois não poderia usar um html parser e a coisa ia ficar assim meia deslavada e desenquadrada no blol.
A sintaxe não poderia ser mais simples:
$ ./escripe.py acronimo
Eg:
$ ./escripe.py pt
(e receberão uma lista de blocos (um bloco por linha) no formato "from X to Y")
Cá vai:
#!/usr/bin/python import sys import httplib import re from HTMLParser import HTMLParser raw_block_list = [] class ORHTMLParser(HTMLParser): def handle_data(self, data): pat = re.search(r"^((\d{1,3}\.){3,3}\d{1,3})$", data.strip(' ')) if pat: raw_block_list.append(pat.group(1)) if len(sys.argv) != 2: print "Usage: %s <country acronym>\nExamples:\n\t%s pt\n\t%s fr\n\t%s us" % (eval("sys.argv[0]," * 4)) sys.exit(1) try: rhost = httplib.HTTPConnection("www.nirsoft.net") rhost.request("GET", "/countryip/%s.html" % sys.argv[1]) pbody = rhost.getresponse().read() rhost.close() except: print "Ops..." sys.exit(1) ORHTMLParser().feed(pbody) paired_block_list = map(lambda start, end: (start, end), raw_block_list[0::2], raw_block_list[1::2]) for pair in paired_block_list: print "from", pair[0], "to", pair[1]
Saudações
Amo ali o lambda, alta profundidade!