Comment obtenir l'adresse IP d'un visiteur avec django ?

Exemple de comment obtenir l'adresse ip d'un visiteur sous django:

Obtenir l'adresse ip du visteur

def visitor_ip_address(request):

    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')

    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip

Verifier si l'adresse ip est valide

On peut ensuite vérifier si l'adresse ip est valide on peut utiliser le module socket:

import socket

try:
    socket.inet_aton(ip)
    ip_valid = True
except socket.error:
    ip_valid = False

Localiser une adresse ip

Pour localiser une adresse ip, une solution possible est d'utiliser geoip2 2.9.0. Installer geoip2

pip install geoip2

Télécharger le fichier GeoLite2-City.mmdb sur maxminds

import geoip2.database

reader = geoip2.database.Reader('./GeoLite2-City_20190430/GeoLite2-City.mmdb')

response = reader.city('128.101.101.101')

print(response.country.iso_code)
print(response.country.name)
print(response.country.names['zh-CN'])
print(response.subdivisions.most_specific.name)
print(response.subdivisions.most_specific.iso_code)
print(response.city.name)
print(response.postal.code)
print(response.location.latitude)
print(response.location.longitude)

reader.close()

Références