sábado, 14 de enero de 2017

Análisis de Servicios dentro de un Rango de IP visualizados Gráfico Real-Time(IV)

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:


{"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á......

No hay comentarios. :

Publicar un comentario