Saya membuat situs web di mana pengguna dapat masuk dan mengunduh file, menggunakan kerangka kerja Flask (berdasarkan Werkzeug ) yang menggunakan Python (2.6 dalam kasus saya).
Saya perlu mendapatkan alamat IP pengguna ketika mereka masuk (untuk tujuan logging). Adakah yang tahu bagaimana melakukan ini? Tentunya ada cara untuk melakukannya dengan Python?
python
flask
ip-address
werkzeug
Jon Cox
sumber
sumber
HTTP_X_FORWARDED_FOR
jadi pastikan Anda tidak berakhir dengan localhost untuk setiap permintaan.Proxy dapat membuat ini sedikit rumit, pastikan untuk memeriksa ProxyFix ( Flask docs ) jika Anda menggunakannya. Lihatlah
request.environ
di lingkungan khusus Anda. Dengan nginx saya kadang-kadang akan melakukan sesuatu seperti ini:Saat proksi, seperti nginx, meneruskan alamat, mereka biasanya menyertakan IP asli di suatu tempat di header permintaan.
Perbarui Lihat implementasi flask-security . Sekali lagi, tinjau dokumentasi tentang ProxyFix sebelum menerapkan. Solusi Anda dapat bervariasi berdasarkan lingkungan khusus Anda.
sumber
Sebenarnya, yang akan Anda temukan adalah ketika hanya mendapatkan yang berikut ini akan memberi Anda alamat server:
Jika Anda ingin alamat IP klien, gunakan yang berikut ini:
sumber
request.remote_addr
terdengar seperti properti yang harus mendapatkan alamat jarak jauh tergantung pada apakah proxy sebaliknya dipercaya.Alamat IP pengguna dapat diambil menggunakan cuplikan berikut:
sumber
Saya memiliki Nginx dan Dengan di bawah ini Nginx Config :
@ solusi tirtha-r bekerja untuk saya
Permintaan dan Respons Saya:
sumber
Kode di bawah ini selalu memberikan IP publik dari klien (dan bukan IP pribadi di belakang proxy).
sumber
httpbin.org menggunakan metode ini:
sumber
127.0.0.1
karena proxy, tidak terlalu membantu.Jika Anda menggunakan Nginx di belakang penyeimbang lainnya, misalnya Penyeimbang Aplikasi AWS, HTTP_X_FORWARDED_FOR mengembalikan daftar alamat. Bisa diperbaiki seperti itu:
sumber
Jika Anda menggunakan lingkungan Gunicorn dan Nginx maka templat kode berikut ini berfungsi untuk Anda.
sumber
Ini harus melakukan pekerjaan. Ini memberikan alamat IP klien (host jarak jauh).
Perhatikan bahwa kode ini berjalan di sisi server.
sumber