IPv6地址的文本表示的最大長度?

我想將PHP中$_SERVER["REMOTE_ADDR"]返回的數據存儲到DB字段中,很是簡單的任務。 問題是我沒法找到有關IPv6地址的文本表示的最大長度的任何正確信息,這是網絡服務器經過$_SERVER["REMOTE_ADDR"]服務器

我對將文本表示轉換爲地址一般編碼的128位不感興趣,我只想知道存儲$_SERVER["REMOTE_ADDR"]返回的任何IPv6地址須要多少個字符。 網絡


#1樓

回答了我本身的問題: 編碼

IPv6地址一般寫爲八組,每組四個十六進制數字,每組用冒號(:)分隔。 spa

因此最多39個字符。 代理


#2樓

45個字符code

你可能指望一個地址 get

0000:0000:0000:0000:0000:0000:0000:0000

8 * 4 + 7 = 39 io

8組4位數字,7位:它們之間。 搜索

可是若是你有一個IPv4映射的IPv6地址 ,那麼最後兩個組能夠用10分隔的基數寫入. ,例如。 [::ffff:192.168.100.228] 。 徹底寫出來: bug

0000:0000:0000:0000:0000:ffff:192.168.100.228

(6 * 4 + 5)+ 1 +(4 * 3 + 3)= 29 + 1 + 15 = 45

注意,這是一個輸入/顯示約定 - 它仍然是一個128位地址,對於存儲,它可能最好標準化原始冒號分隔格式,即[0000:0000:0000:0000:0000:ffff:c0a8:64e4]上面的地址。


#3樓

我認爲@Deepak在這個連接中的答案更接近正確答案。 客戶端IP地址的最大長度 。 因此正確的大小是45而不是39.有時咱們試圖在字段大小中搜索,可是若是咱們準備足夠的存儲大小彷佛更好。


#4樓

在Linux上,請參見常量INET6_ADDRSTRLEN (包括<arpa/inet.h> ,請參閱man inet_ntop )。 在個人系統上(標題「in.h」):

#define INET6_ADDRSTRLEN 46

最後一個字符用於終止NULL,正如我所說,因此最大長度爲45,與其餘答案同樣。


#5樓

注意某些標題,例如HTTP_X_FORWARDED_FOR ,它們彷佛包含一個IP地址。 它們實際上可能包含多個地址(我假設的代理鏈)。

它們看起來是以逗號分隔的 - 而且可能總共超過45個字符 - 所以請在存儲到DB以前進行檢查。

相關文章
相關標籤/搜索