Saya ingin menyimpan data yang dikembalikan oleh $_SERVER["REMOTE_ADDR"]
dalam PHP ke bidang DB, tugas yang cukup sederhana, sungguh. Masalahnya adalah bahwa saya tidak dapat menemukan informasi yang tepat tentang panjang maksimum representasi tekstual dari alamat IPv6, yang disediakan oleh server web $_SERVER["REMOTE_ADDR"]
.
Saya tidak tertarik untuk mengubah representasi tekstual ke dalam 128 bit alamat yang biasanya dikodekan, saya hanya ingin tahu berapa banyak karakter maksimum yang diperlukan untuk menyimpan alamat IPv6 yang dikembalikan oleh $_SERVER["REMOTE_ADDR"]
.
ip
ip-address
ipv6
Gilles
sumber
sumber
Jawaban:
45 karakter .
Anda mungkin mengharapkan sebuah alamat
8 kelompok 4 digit dengan 7 di
:
antaranya.Tetapi jika Anda memiliki alamat IPv6 yang dipetakan IPv4 , dua grup terakhir dapat ditulis dalam basis 10 yang dipisahkan oleh
.
, mis.[::ffff:192.168.100.228]
. Ditulis sepenuhnya:Catatan, ini adalah konvensi input / tampilan - ini masih berupa alamat 128 bit dan untuk penyimpanan mungkin akan lebih baik untuk membakukan pada format yang dipisahkan oleh titik dua mentah, yaitu
[0000:0000:0000:0000:0000:ffff:c0a8:64e4]
untuk alamat di atas.sumber
Di Linux, lihat konstanta
INET6_ADDRSTRLEN
(termasuk<arpa/inet.h>
, lihatman inet_ntop
). Di sistem saya (tajuk "in.h"):Karakter terakhir adalah untuk mengakhiri NULL, seperti yang saya yakini, jadi panjang maksimalnya adalah 45, sebagai jawaban lain.
sumber
Menjawab pertanyaan saya sendiri:
Jadi, maksimal 39 karakter.
sumber
Saya pikir jawaban @Deepak di tautan ini lebih dekat dengan jawaban yang benar. Panjang maksimum untuk alamat ip klien . Jadi ukuran yang benar adalah 45 bukan 39. Kadang-kadang kita mencoba untuk mengemis dalam ukuran bidang tetapi tampaknya lebih baik jika kita menyiapkan ukuran penyimpanan yang cukup.
sumber
Seperti yang ditunjukkan alamat ipv6 standar paling banyak 45 karakter, tetapi alamat ipv6 juga dapat menyertakan% akhir yang diikuti oleh string "lingkup" atau "zona", yang tidak memiliki panjang tetap tetapi umumnya merupakan bilangan bulat positif kecil atau antarmuka jaringan nama, jadi pada kenyataannya itu bisa lebih besar dari 45 karakter. Nama antarmuka jaringan biasanya "eth0", "eth1", "wlan0", jadi memilih 50 sebagai batas kemungkinan cukup bagus.
sumber
Perhatikan header tertentu seperti
HTTP_X_FORWARDED_FOR
yang tampaknya berisi satu alamat IP. Mereka mungkin benar-benar berisi beberapa alamat (rangkaian proxy yang saya asumsikan).Mereka akan tampak dibatasi koma - dan bisa jauh lebih lama dari total 45 karakter - jadi periksa sebelum menyimpan di DB.
sumber