سؤال

أريد أن تخزين البيانات التي تم إرجاعها من قبل $_SERVER["REMOTE_ADDR"] في PHP إلى DB مجال بسيط جدا مهمة حقا.المشكلة هي أنني لا يمكن العثور على أي معلومات صحيحة عن أقصى طول التمثيل النصي من عنوان IPv6 ، وهو ما يقدم من خلال خادم الويب $_SERVER["REMOTE_ADDR"].

أنا غير مهتم في تحويل التمثيل النصي إلى 128 بت العنوان عادة ما تكون مشفرة ، أنا فقط أريد أن أعرف كم عدد الأحرف الأقصى هناك حاجة إلى تخزين أي عنوان IPv6 عاد قبل $_SERVER["REMOTE_ADDR"].

هل كانت مفيدة؟

المحلول

45 الشخصيات.

قد تتوقع أن يكون عنوان

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

8 * 4 + 7 = 39

8 مجموعات من 4 أرقام 7 : بين لهم.

ولكن إذا كان لديك IPv4-تعيين عنوان IPv6, آخر مجموعتين يمكن أن تكون مكتوبة في قاعدة 10 مفصولة ., ، على سبيل المثال. [::ffff:192.168.100.228].مكتوبة بالكامل:

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] على العنوان المذكور أعلاه.

نصائح أخرى

على لينكس ، انظر المستمر INET6_ADDRSTRLEN (تشمل <arpa/inet.h>, انظر man inet_ntop).على نظام (رأس "في.ح"):

#define INET6_ADDRSTRLEN 46

آخر حرف هو إنهاء NULL, كما أنني اجد حتى أقصى طول 45 ، إجابات أخرى.

أجاب عن سؤالي:

عناوين IPv6 عادة كما هو مكتوب ثماني مجموعات من أربعة أرقام ست عشرية ، حيث كل مجموعة مفصولة بنقطتين (:).

بحيث 39 حرفا كحد أقصى.

أعتقد @ديباك الإجابة في هذا الرابط هو أقرب إلى الإجابة الصحيحة. أقصى طول العميل عنوان ip.لذلك الحجم الصحيح هو 45 لا 39.أحيانا نحاول أن استدان في مجالات الحجم ولكن يبدو أن من الأفضل إذا نحن نستعد بما فيه الكفاية حجم التخزين.

كما أشارت إلى معيار عنوان ipv6 هو في معظم 45 حرف ، ولكن عنوان ipv6 يمكن أن تشمل أيضا النهاية % تليها "نطاق" أو "المنطقة" السلسلة الذي ليس له طول ثابت وإنما هو عموما صغير عدد صحيح موجب أو اسم واجهة شبكة الاتصال, حتى في واقع الأمر يمكن أن يكون أكبر من 45 حرفا.أسماء واجهة الشبكة عادة "eth0", "eth1", "wlan0" ، وذلك باختيار 50 والحد من المرجح جيدة بما فيه الكفاية.

احترس من بعض رؤوس مثل HTTP_X_FORWARDED_FOR التي يبدو أنها تحتوي على عنوان IP واحد.أنها قد تحتوي على عناوين متعددة (سلسلة من الوكلاء أفترض).

وسوف تظهر بفواصل - و يمكن أن يكون هناك الكثير أكثر من 45 حرفا المجموع - حتى تحقق قبل تخزينها في قاعدة البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top