Charter III: LOCALIZANDO AL ISP
Continuando con la saga trabajaremos para localizar IPS: ciudad, país, coordenadas, región y sobre todo el ISP. Para ello necesitaremos manejar json para ello usaremos esta web link para mejorar la perspectiva que se tiene de dicho archivo:
Continuando con la saga trabajaremos para localizar IPS: ciudad, país, coordenadas, región y sobre todo el ISP. Para ello necesitaremos manejar json para ello usaremos esta web link para mejorar la perspectiva que se tiene de dicho archivo:
{"as":"AS6147 Telefonica del Peru S.A.A.","city":"Lima","country":"Peru","countryCode":"PE","isp":"Telefonica del Peru","lat":-12.05,"lon":-77.05,"org":"Telefonica del Peru","query":"190.40.128.190","region":"LMA","regionName":"Provincia de Lima","status":"success","timezone":"America/Lima","zip":""}
Esta información será útil recogeremos los siguiente:
print (IP, Country, City, regionName, IPS,Latitud, Longitud)
El resultado sera el siguiente, no olvidaras el archivo logGeo.txt para almacenar errores:
#!/usr/bin/python3.4
from bs4 import BeautifulSoup
import socket, urllib, sys, os, time, json, nmap, os, optparse, MySQLdb, socket, sys
from json import loads
from urllib.request import urlopen
import urllib.request
#Importamos MYSQL
import http.client
from datetime import datetime
from concurrent.futures import ThreadPoolExecutor
from datetime import datetime
THREADS = 512
CONNECTION_TIMEOUT = 1
t1 = datetime.now()
repet = 50000
dormir=int(2)
myhost="localhost"
usuario="root"
password=""
database="dbdata"
print("-"*80)
print("---------GEOLICALIZANDO LA DIRECCIONES IP------------------")
print("-"*80)
t1 = datetime.now()
print("TIEMPO INICIO:" +time.strftime('%Y/%m/%d %H:%M:%S'))
def escritura(texto):
try:
outfile = open('logGeo.txt', 'a')
outfile.write(str(texto))
outfile.close()
print ("[DETEC] "+time.strftime('%Y/%m/%d %H:%M:%S') +" [!] REGISTRADO EN EL LOG INSERT_LOG: ")
except ValueError:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR ERROR AL MOMENTO DE SER EVALUADO def ESCRITURA()")
except:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR ESCRITURA: ", sys.exc_info()[0])
def geoIp(IP):
try:
return urlopen("http://ip-api.com/json/" + str(IP)).read().decode('utf-8')
except ValueError:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO CONSULTAR IP")
escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR geoIp " + str(IP))
except:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR INSERT_GEOIP: ", sys.exc_info()[0])
escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO [--->] def geoIp(): " + str(IP))
def insert_datos_new(IP):
try:
ip_cut =IP.split('.')
data_geoIP = geoIp(IP)
data_geoIP = json.loads(data_geoIP)
Country = data_geoIP["country"]
City = data_geoIP["city"]
regionName = data_geoIP["regionName"]
countryCode = data_geoIP["countryCode"]
ISP = data_geoIP["isp"]
Latitud = data_geoIP["lat"]
Longitud = data_geoIP["lon"]
conn = MySQLdb.connect(host= myhost,
user=usuario,
passwd=password,
db=database)
cursor1 = conn.cursor()
cursor1.execute("""UPDATE python SET Country=%s ,City=%s, regionName=%s, ISP=%s, Latitud=%s, Longitud=%s WHERE Country='' AND id=%s""",[Country, City, regionName,ISP,Latitud,Longitud,IP])
conn.commit()
conn.close()
print ("[INFO] "+time.strftime('%Y/%m/%d %H:%M:%S') +" [RANGO IP:] " +'\x1b[6;30;44m'+ str((ip_cut[0]+"."+ip_cut[1]+"."+ip_cut[2]+"."+'%')) +" - INSERT GEO NEW"+'\x1b[0m')
except ValueError:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EVALUADO def insert_datos_new")
escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR insert_datos_new"+ str(IP))
except:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR insert_datos_new: ", sys.exc_info()[0])
escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO [--->] def insert_datos_new(IP):"+ str(IP))
def insertar_datos_find(Country, City, regionName,ISP,Latitud,Longitud,IP):
try:
ip_cut =IP.split('.')
conn = MySQLdb.connect(host= myhost,
user=usuario,
passwd=password,
db=database)
cursor1 = conn.cursor()
cursor1.execute("""UPDATE python SET Country=%s ,City=%s, regionName=%s, ISP=%s, Latitud=%s, Longitud=%s WHERE Country='' AND id LIKE %s """,[Country, City, regionName,ISP,Latitud,Longitud,(ip_cut[0]+"."+ip_cut[1]+"."+ip_cut[2]+"."+'%')])
conn.commit()
conn.close()
print ("[INFO] "+time.strftime('%Y/%m/%d %H:%M:%S') +" [RANGO IP:] " +'\x1b[6;30;43m'+ str((ip_cut[0]+"."+ip_cut[1]+"."+ip_cut[2]+"."+'%')) +" - UPDATE GEO OLD"+'\x1b[0m')
except ValueError:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EVALUADO def insertar_datos_find")
escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR def insertar_datos_find"+ str(IP))
except:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR def insertar_datos_find ", sys.exc_info()[0])
escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO [--->] def insertar_datos_find(ip_address,port)"+ str(IP))
def buscar_geop_insert(IP):
try:
ip_cut =IP.split('.')
conn = MySQLdb.connect(host= myhost,
user=usuario,
passwd=password,
db=database)
cursor1 = conn.cursor()
cursor1.execute("""SELECT Country, City, regionName,ISP,Latitud,Longitud FROM python WHERE id LIKE %s AND Country!=''""",[ip_cut[0]+"."+ip_cut[1]+"."+ip_cut[2]+"."+'%'])
result = cursor1.fetchone()
if result is not None:
insertar_datos_find(result[0],result[1],result[2],result[3],result[4],result[5],IP)
else:
insert_datos_new(str(IP))
conn.commit()
conn.close()
except ValueError:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EVALUADO def buscar_geop_insert")
escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR def buscar_geop_insert"+ str(IP))
except:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR def buscar_geop_insert ", sys.exc_info()[0])
escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO [--->] def buscar_geop_insert(ip_address,port)"+ str(IP))
#result = cur.fetchone()
def main():
try:
for i in range(repet):
print("ESTA ES LA REPETICION N: "+ str(i) +" de "+str(repet))
conn = MySQLdb.connect(host= myhost,
user=usuario,
passwd=password,
db=database)
cursor1 = conn.cursor()
cursor1.execute("""SELECT nreg,id FROM python WHERE Country="" GROUP BY(id) ORDER BY nreg ASC LIMIT 1""")
result = cursor1.fetchall()
for row in result:
buscar_geop_insert(row[1])
conn.close()
time.sleep(dormir)
t2 = datetime.now()
total = t2 - t1
print("-------------------------------------------------------")
print("TIEMPO FINALIZADO: "+time.strftime('%Y/%m/%d %H:%M:%S'))
print("TIEMPO TOTAL:" + str(total))
except ValueError:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EVALUADO def MAIN_STATUS")
escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR EVALUAR def MAIN_STATUS")
except:
print ("[ERROR] " +time.strftime('%Y/%m/%d %H:%M:%S') +" [!] ERROR def MAIN_STATUS ", sys.exc_info()[0])
escritura(time.strftime('\n%Y/%m/%d %H:%M:%S') +" [!] ERROR AL MOMENTO DE SER EJECUTADO [--->] def MAIN_STATUS(ip_address,port)")
if __name__ == "__main__":
main()
Continuará......

