[PYTHON] Holen Sie sich die IP-Adresse des Kunden mit Django

Nur direkter Zugriff

Wenn Sie entscheiden, dass der Client direkt auf Django zugreifen soll, können Sie die IP-Adresse einfach über den HTTP-Header "REMOTE_ADDR" abrufen.

views.py


from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        #Aus dem Anforderungsobjekt'REMOTE_ADDR'Holen Sie sich den Header.
        client_addr = request.META.get('REMOTE_ADDR')

        #Die erfasste Adresse wird zurückgegeben, um den Vorgang zu überprüfen.
        return HttpResponse(client_addr)

Reverse-Proxy-Unterstützung

Wenn bei der obigen Methode jedoch ein Reverse-Proxy wie Nginx zwischen dem Client und Django vorhanden ist, ist die IP-Adresse, die mit "REMOTE_ADDR" abgerufen werden kann, die Adresse des Reverse-Proxys (z. B. befindet sich Nginx auf demselben Host). Wenn ja, ist es 127.0.0.1).

Wenn die Übertragung mehr als einmal in der Mitte erfolgt, können Sie auch auf den HTTP-Header "HTTP_X_FORWARDED_FOR" zugreifen, um die IP-Adresse der Übertragungsroute als durch Kommas getrennte Zeichenfolge abzurufen. Rufen Sie daher die IP-Adresse des Clients von diesem ersten Element ab. tun können.

Wenn es keinen HTTP_X_FORWARDED_FOR-Header gibt, handelt es sich um einen direkten Zugriff. Rufen Sie ihn daher wie oben beschrieben mit REMOTE_ADDR auf.

views.py


from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        # 'HTTP_X_FORWARDED_FOR'Ermitteln Sie die IP-Adresse der Übertragungsroute anhand des Headers.
        forwarded_addresses = request.META.get('HTTP_X_FORWARDED_FOR')
        if forwarded_addresses:
            # 'HTTP_X_FORWARDED_FOR'Wenn es einen Header gibt:Holen Sie sich das erste Element der Transferroute.
            client_addr = forwarded_addresses.split(',')[0]
        else:
            # 'HTTP_X_FORWARDED_FOR'Wenn es keinen Header gibt:Weil es eine direkte Verbindung ist'REMOTE_ADDR'Siehe die Überschrift.
            client_addr = request.META.get('REMOTE_ADDR')

        #Die erfasste Adresse wird zurückgegeben, um den Vorgang zu überprüfen.
        return HttpResponse(client_addr)

Verwenden Sie IPware

Installieren Sie django-ipware mit pip.

python


pip3 install django-ipware

Wenn Sie es importieren und die Funktion get_client_ip verwenden, können Sie die Adresse des Clients in nur einer Zeile abrufen, und natürlich unterstützt es Reverse Proxy.

views.py


from django.http import HttpResponse
from django.views import View
from ipware import get_client_ip

class MyView(View):
    def get(self, request):
        client_addr, _ = get_client_ip(request)

        return HttpResponse(client_addr)

Der referenzierte HTTP-Header erhält die Adresse des Clients in der folgenden Prioritätsreihenfolge sowie "HTTP_X_FORWARDED_FOR" und "REMOTE_ADDR".

python


 # The default meta precedence order
 IPWARE_META_PRECEDENCE_ORDER = (
     'HTTP_X_FORWARDED_FOR', 'X_FORWARDED_FOR',  # <client>, <proxy1>, <proxy2>
     'HTTP_CLIENT_IP',
     'HTTP_X_REAL_IP',
     'HTTP_X_FORWARDED',
     'HTTP_X_CLUSTER_CLIENT_IP',
     'HTTP_FORWARDED_FOR',
     'HTTP_FORWARDED',
     'HTTP_VIA',
     'REMOTE_ADDR',
 )

Sie können die Standardpriorität auch mit der angegebenen Priorität überschreiben, wenn Sie die Funktion "get_client_ip" aufrufen.

python


client_addr, is_routable = get_client_ip(request, request_header_order=['X_FORWARDED_FOR', 'REMOTE_ADDR'])

Referenzlink

Stack Overflow "How do I get user IP address in django?" https://stackoverflow.com/questions/4581789/how-do-i-get-user-ip-address-in-django

GitHub - un33k/django-ipware "A Django application to retrieve client's IP address" https://github.com/un33k/django-ipware

Recommended Posts

Holen Sie sich die IP-Adresse des Kunden mit Django
Holen Sie sich die Abfragezeichenfolge (Abfragezeichenfolge) mit Django
Holen Sie sich Ihre eigene IP-Adresse in Python
Holen Sie sich die lokale IP-Adresse
[Django] Ändern Sie die Standard-IP-Adresse des Befehls runserver
Ruft alle IP-Adressen von Instanzen in der Autoscaling-Gruppe ab
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Skriptpfad in Python
Wechseln Sie die in Django 1.9 angezeigte Sprache
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Hostnamen in Python
Holen Sie sich eine Adresse aus einer Postleitzahl
[OCI] Python-Skript zum Abrufen der IP-Adresse einer Recheninstanz in Cloud Shell
Holen Sie sich die der Netzwerkschnittstelle zugewiesene IPv4-Adresse in Code (Linux)
Django ~ Lass es uns im Browser anzeigen ~
Holen Sie sich die besten n-ten Werte in Pandas
Fehler bei bereits verwendeter Adresse beheben
Abfrageparameter für GET-Anforderungen mit Django abrufen
Programmgesteuert eine lokale IP-Adresse abrufen
Ich kann das Element in Selen nicht bekommen!
Ruft die EDINET-Codeliste in Python ab
Holen Sie sich die Adresse von Längen- und Breitengrad
Versuchen Sie, die Spotify-API in Django zu aktivieren.
Holen Sie sich nur den Text aus dem Django-Formular.
Ein Skript, das die von wercker in der Sicherheitsgruppe verwendete IP-Adresse registriert
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Holen Sie sich das Wetter in Osaka über Web-API (Python)
Der einfachste Weg, um mit Django zu beginnen
Modell in Django
Holen Sie sich den Aufrufer einer Funktion in Python
Holen Sie sich nur Unterklassenelemente in eine Liste
Ruft den Fenstertitel des X-Fenstersystems in Python ab
Legen Sie eine feste IP in der Linux-Umgebung fest
[Django] Erstellen Sie ein Formular, das automatisch die Adresse aus der Postleitzahl ausfüllt
So erhalten Sie die Dateien im Ordner [Python]
Geben Sie die Ansichts-URL in der Django-Vorlage an
Holen Sie sich nur den Adressteil der Netzwerkkarte (eth0)
Die Geschichte der Anzeige von Mediendateien in Django
[Django] CSS im Projekt kann nicht gelesen werden
Loggen Sie sich mit json mit pygogo ein.
Form in Django
Tool zum Einfügen des Ländernamens und des Ländercodes in einen Teil der IP-Adresse
Lernnotizen für die Migrationsfunktion im Django-Framework (2)
So erhalten Sie den Variablennamen selbst in Python
So erhalten Sie mehrere Modellobjekte zufällig in Django
Abrufen des Dateinamens in einem Ordner mithilfe von glob
So ermitteln Sie die Anzahl der Stellen in Python
[Python] Holen Sie sich die Zahlen im Diagramm mit OCR
[Python] Ruft die Liste der im Modul definierten Klassen ab
[Django] Tabelle abschneiden (alle Tabellendaten löschen)
Setzen Sie DateField des Formulars in Django auf type = date
Mit Python psycopg2 erhalten Sie Ergebnisse im Diktatformat
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Rufen Sie den im Pulldown-Menü Selenium Python VBA ausgewählten Wert ab
Lernnotizen für die Migrationsfunktion im Django-Framework (3)
Lernnotizen für die Migrationsfunktion im Django-Framework (1)
[Django 2.2] Sortieren und erhalten Sie den Wert des Beziehungsziels
Rufen Sie die URL des HTTP-Umleitungsziels in Python ab