Underc0de

Programación Scripting => Python => Mensaje iniciado por: Park33r en Agosto 19, 2020, 07:55:30 PM

Título: Geolocalizacion por IP
Publicado por: Park33r en Agosto 19, 2020, 07:55:30 PM
Hola compas!!! hoy les vengo a traer este script sencillo el cual automatiza la geolocalizacion de IP, aqui les dejo el link de github recien subido. Saludos banda!!!!


https://github.com/OjeadorParker/GeoIP

su uso esta documentado en el pie de la pagina,es muy facil, lo unico que hay que instalar son dos librerias:    beauitfulsoup4 y requests
Título: Re:Geolocalizacion por IP
Publicado por: WHK en Agosto 25, 2020, 03:20:58 AM
Hola, estuve dandole un vistazo a tu módulo, deja darte algunos consejos:

Vi que tu proyecto requiere bs4, si quieres que tu proyecto lo instale de manera automática desde pip, debes crear un archivo llamado requirements.txt con el nombre del módulo y la versión, por ejemplo:

beautifulsoup4==4.9.1

Por otro lado, ten bastante cuidado, esa librería no es muy facil de instalar, a demás de contar con la instalación desde pip también debes contar con las librerías de headers para su compilación, en algunos sistemas da bastantes dolores de cabeza.

También me pude fijar que haces uso de la función "raw_input" pro esta no existe, a demás, intentaste utilizar el coloreado para bash, pero eso no funcionará en terminales de windows, recuerda que python funciona en múltiples sistemas operativos y el usuairo sólo verá caracteres extraños. Si un usuario cancela el script, no hay razón para decirle que lo ha cancelado.

Mejor te recomiendo utilizar expresión regular:

Código (python) [Seleccionar]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
import re


class Controller():

    def __init__(self):

        # Header
        print('-> Programado Por Parker')

        ip = input('IP o enter para saber su localización: ').strip()
       
        print('Realizando la solicitud ...')

        response = requests.get('https://es.geoipview.com/?q=%s&x=0&y=0' % format(ip))
        if(response.status_code == 200):

            items = {
                'host'      : r'del\s+Host:.+?class="host">(.*?)<',
                'ip'        : r'de\s+IP:.+?class="show2">(.*?)<',
                'country'   : r'País:.+?<td>(.*?)<',
                'region'    : r'Región:.+?<td>(.*?)<',
                'city'      : r'Ciudad:.+?class="show2">(.*?)<',
                'postal'    : r'Postal:.+?<td>(.*?)<',
                'latitude'  : r'Latitud:.+?<td>(.*?)<',
                'longitude' : r'Longitud:.+?<td>(.*?)<'
            }

            print('-' * 27)
            for item in items:
                matches = re.search(items[item], response.text, re.I | re.M)
                print(
                    '%s : %s' % (
                        item.title().ljust(9), # Key name
                        matches.group(1).replace('&nbsp;', ' ').strip() if matches else '-'
                    )
                )

        else:
            print('Error de respuesta (%s).' % str(response.status_code))


if __name__ == "__main__":
    try:
        Controller()

    except KeyboardInterrupt:
        pass

    except Exception as e:
        raise e


$ python3 test.py
-> Programado Por Parker
IP o enter para saber su localización: 64.233.186.138
Realizando la solicitud ...
---------------------------
Host      :
Ip        : 64.233.186.138
Country   : USA / US
Region    : CA
City      :
Postal    :
Latitude  : 34.054401397705
Longitude : -118.2440032959


Saludos.
Título: Re:Geolocalizacion por IP
Publicado por: Park33r en Agosto 27, 2020, 04:28:47 PM
leere y aprendere sobre este codigo que me has puesto,Gracias!!!!
Título: Re:Geolocalizacion por IP
Publicado por: Sic en Enero 18, 2021, 01:00:23 PM
Otra forma de obtener la geolocalizacion es utilizando https://ipinfo.io/ este servicio el cual te devuelve
la salida en formato Json, debo recordarte que solo debes introducir una IP no una url.

Modulos usandos:

import requests
import json


EJEMPLO:

def geoip(target):
url = "https://ipinfo.io/"+target+"/json"
r = requests.get(url, headers={'User-agent':randomUA()})

if r.status_code != 200:
print "\nError {}\n".format(r.status_code)
else:
j = json.loads(r.content)

ip = j['ip']
city = j['city']
region = j['region']
geo = j['loc']
isp = j['org']

print """
IP: {}
Ciudad: {}
Region: {}
Geolocalizacion: {}
ISP: {}
""".format(ip, city, region, geo, isp)
Título: Re:Geolocalizacion por IP
Publicado por: omen en Junio 23, 2023, 10:29:18 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuentaHola, estuve dandole un vistazo a tu módulo, deja darte algunos consejos:

Vi que tu proyecto requiere bs4, si quieres que tu proyecto lo instale de manera automática desde pip, debes crear un archivo llamado requirements.txt con el nombre del módulo y la versión, por ejemplo:

beautifulsoup4==4.9.1
Por otro lado, ten bastante cuidado, esa librería no es muy facil de instalar, a demás de contar con la instalación desde pip también debes contar con las librerías de headers para su compilación, en algunos sistemas da bastantes dolores de cabeza.

También me pude fijar que haces uso de la función "raw_input" pro esta no existe, a demás, intentaste utilizar el coloreado para bash, pero eso no funcionará en terminales de windows, recuerda que python funciona en múltiples sistemas operativos y el usuairo sólo verá caracteres extraños. Si un usuario cancela el script, no hay razón para decirle que lo ha cancelado.

Mejor te recomiendo utilizar expresión regular:

Código (python) [Seleccionar]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
import re


class Controller():
 
    def __init__(self):

        # Header
        print('-> Programado Por Parker')

        ip = input('IP o enter para saber su localización: ').strip()
       
        print('Realizando la solicitud ...')

        response = requests.get('https://es.geoipview.com/?q=%s&x=0&y=0' % format(ip))
        if(response.status_code == 200):

            items = {
                'host'      : r'del\s+Host:.+?class="host">(.*?)<',
                'ip'        : r'de\s+IP:.+?class="show2">(.*?)<',
                'country'   : r'País:.+?<td>(.*?)<',
                'region'    : r'Región:.+?<td>(.*?)<',
                'city'      : r'Ciudad:.+?class="show2">(.*?)<',
                'postal'    : r'Postal:.+?<td>(.*?)<',
                'latitude'  : r'Latitud:.+?<td>(.*?)<',
                'longitude' : r'Longitud:.+?<td>(.*?)<'
            }

            print('-' * 27)
            for item in items:
                matches = re.search(items[item], response.text, re.I | re.M)
                print(
                    '%s : %s' % (
                        item.title().ljust(9), # Key name
                        matches.group(1).replace('&nbsp;', ' ').strip() if matches else '-'
                    )
                )

        else:
            print('Error de respuesta (%s).' % str(response.status_code))


if __name__ == "__main__":
    try:
        Controller()

    except KeyboardInterrupt:
        pass

    except Exception as e:
        raise e

$ python3 test.py
-> Programado Por Parker
IP o enter para saber su localización: 64.233.186.138
Realizando la solicitud ...
---------------------------
Host      :
Ip        : 64.233.186.138
Country   : USA / US
Region    : CA
City      :
Postal    :
Latitude  : 34.054401397705
Longitude : -118.2440032959

Saludos.
Si no me equivoco raw_imput es una función que esta contemplada en python2.