IPv6 पते के पाठ प्रतिनिधित्व की अधिकतम लंबाई?


430

मैं $_SERVER["REMOTE_ADDR"]PHP द्वारा DB डेटा में लौटाए गए डेटा को स्टोर करना चाहता हूं , बहुत सरल कार्य, वास्तव में। समस्या यह है कि मुझे अधिकतम लंबाई के बारे में कोई उचित जानकारी नहीं मिल रही है IPv6 पते पाठ , जो कि एक वेबसर्वर प्रदान करता है $_SERVER["REMOTE_ADDR"]

मैं 128 बिट्स में पाठात्मक प्रतिनिधित्व को परिवर्तित करने में दिलचस्पी नहीं रखता हूं, जिसका पता आमतौर पर इनकोड होता है, मैं सिर्फ यह जानना चाहता हूं कि किसी भी IPv6 पते को वापस करने के लिए अधिकतम कितने वर्णों की आवश्यकता है $_SERVER["REMOTE_ADDR"]


6
जोन इंडेक्स के बारे में क्या?
रॉबर्ट टुपेलो-श्नेक

5
#define INET_ADDRSTRLEN (16) #define INET6_ADDRSTRLEN (48)

स्रोत: lxr.free-electrons.com/source/include/linux/inet.h

1
प्रश्न stackoverflow.com/questions/1076714/… के कुछ समान लेकिन उपयोगी उत्तर हैं।
एडवर्ड १

जवाबों:


615

45 अक्षर

आप एक पते की उम्मीद कर सकते हैं

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

* ४ + * = ३ ९

:उनके बीच 7 के साथ 4 अंकों के 8 समूह ।

लेकिन अगर आपके पास IPv4- मैप्ड IPv6 पता है , तो अंतिम दो समूहों को आधार 10 में अलग से लिखा जा सकता है ., जैसे। [::ffff:192.168.100.228]। पूरी तरह से लिखित:

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

(६ * ४ + ५) + १ + (४ * ३ + ३) = २ ९ + १ + १५ = ४५

ध्यान दें, यह एक इनपुट / डिस्प्ले कन्वेंशन है - यह अभी भी एक 128 बिट एड्रेस है और स्टोरेज के लिए कच्चे कोलन सेपरेटेड फॉर्मेट पर, यानी [0000:0000:0000:0000:0000:ffff:c0a8:64e4]ऊपर दिए गए एड्रेस के लिए इसे मानकीकृत करना सबसे अच्छा होगा ।


245
हैडर फाइलें INET6_ADDRSTRLEN को 46 के रूप में परिभाषित करती हैं, जो 45 वर्णों के साथ एक अनुगामी नल के साथ फिट बैठता है।
बुद्धिमानीज

6
वर्थ ध्यान में रखते हुए कि IPv6 एड्रेस में स्कोप जोन stackoverflow.com/questions/5746082/… भी हो सकता है , उदाहरण के लिए आपको RemoteEndpointMessageProperty.Address
Rory

ipv4 नहीं लिखे गए हैं जैसे :: ffff: 127.0.0.1?
ग्रेवॉल्फ

52
@FelipeSchenone इस तरह की सोच है जो उपयोगी नहीं है - आकार का पता लगाएं और इसका उपयोग करें। केवल एक बफ़र को विस्तारित करने के लिए इच्छित समय है यदि यह 64 चर के साथ मदद करता है, लेकिन 45 (+1) इष्टतम है।
gbjbaanb 11

1
क्या यह आईपीवी 6 पते में प्रतिशत के संकेत को ध्यान में रखता है? देखें - superuser.com/questions/99746/…
गौरव

85

लिनक्स पर, निरंतर देखें INET6_ADDRSTRLEN(शामिल करें <arpa/inet.h>, देखें man inet_ntop)। मेरे सिस्टम पर (हेडर "in.h"):

#define INET6_ADDRSTRLEN 46

अंतिम वर्ण NULL को समाप्त करने के लिए है, जैसा कि मैंने माना है, इसलिए अधिकतम लंबाई 45 है, अन्य उत्तरों के रूप में।


2
तो यह 48 मैं क्या देख रहा हूँ? github.com/torvalds/linux/blob/master/include/linux/inet.h#L50
eis

@eis शायद 2013 में था। संभवतः संरचनात्मक संरेखण के लिए वेतन वृद्धि।
इरिडेन

13

मेरे अपने प्रश्न का उत्तर दिया:

IPv6 पते को आम तौर पर चार हेक्साडेसिमल अंकों के आठ समूहों के रूप में लिखा जाता है, जहां प्रत्येक समूह को एक बृहदान्त्र (:) द्वारा अलग किया जाता है।

तो वह अधिकतम 39 वर्ण है।


7
हालांकि, जाहिरा तौर पर एक चेतावनी है, देखें stackoverflow.com/a/7477384/3787376 ("क्लाइंट आईपी पते के लिए अधिकतम लंबाई") - उद्धरण: "IPv4 मैप किए गए IPv6 पते के लिए, स्ट्रिंग 39 वर्णों से अधिक लंबा हो सकता है।" यह कहता है कि "IPv4- मैप्ड IPv6" 45 वर्णों का है और प्रारूप में "NNNN: NNNN: NNNN: NNNN: NNNN: NNNN: 192-68.158.190" है। इसलिए अधिकतम 45 वर्ण होना चाहिए। Stackoverflow.com/a/166157/3787376 (यह सवाल) का जवाब भी इस बिंदु को प्रदर्शित करता है।
एडवर्ड १

6

मुझे लगता है कि इस लिंक में @Deepak उत्तर सही उत्तर के अधिक करीब है। क्लाइंट आईपी पते के लिए अधिकतम लंबाई । अतः सही आकार 45 नहीं 39 है। कभी-कभी हम खेतों के आकार में स्क्रब करने की कोशिश करते हैं लेकिन अगर हम पर्याप्त भंडारण आकार तैयार करते हैं तो यह बेहतर प्रतीत होता है।


4

जैसा कि संकेत दिया गया है कि एक मानक ipv6 पता अधिकतम 45 वर्णों पर है, लेकिन एक ipv6 पते में "स्कोप" या "ज़ोन" स्ट्रिंग के बाद समाप्त होने वाला% भी शामिल हो सकता है, जिसकी कोई निश्चित लंबाई नहीं है, लेकिन आम तौर पर एक छोटा सकारात्मक पूर्णांक या एक नेटवर्क इंटरफ़ेस है नाम, इसलिए वास्तव में यह 45 वर्णों से बड़ा हो सकता है। नेटवर्क इंटरफ़ेस के नाम आमतौर पर "eth0", "eth1", "wlan0" होते हैं, इसलिए 50 को चुनना क्योंकि सीमा काफी अच्छी है।


3
सच है, लेकिन यह केवल लिंक-स्थानीय पते हैं, और आपकी वेबसाइट इंटरनेट पर चलने के बाद आप उनमें से किसी को भी नहीं देख सकते हैं (और उम्मीद है कि इसे विकसित करते समय भी नहीं)।
माइकल हैम्पटन

1

कुछ हेडर जैसे के लिए बाहर देखो HTTP_X_FORWARDED_FOR कि एक एकल IP पता होता है। उनमें वास्तव में कई पते हो सकते हैं (मैं मानने वाली एक श्रृंखला)।

वे कॉमा सीमांकित दिखाई देंगे - और कुल 45 वर्णों की तुलना में बहुत अधिक लंबा हो सकता है - इसलिए DB में संग्रहीत करने से पहले जांच लें।


3
थोड़ा विवादित -1 (विवादित होने के कारण मैं पहले भी इस जाल में पड़ चुका हूं, और मुझे लगता है कि इस उत्तर में कुछ लोगों के लिए प्रासंगिक जानकारी शामिल है, जो इस पृष्ठ पर पहुंचेंगे) क्योंकि फिर भी यह स्पष्ट रूप से पूछे गए प्रश्न का उत्तर नहीं है। यह शायद सवाल पर टिप्पणी के रूप में बेहतर होगा।
मार्क एमी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.