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!