दिखाता है मुझे PHP में $ _SERVER ['REMOTE_ADDR'] के साथ कोई समस्या आ रही है। यह आईपीवी 6 का उपयोग कर रहा है भले ही सर्वर आईपीवी 4 का उपयोग कर रहा हो।
क्या कोई इस समस्या को हल करने में मेरी सहायता कर सकता है।
दिखाता है मुझे PHP में $ _SERVER ['REMOTE_ADDR'] के साथ कोई समस्या आ रही है। यह आईपीवी 6 का उपयोग कर रहा है भले ही सर्वर आईपीवी 4 का उपयोग कर रहा हो।
क्या कोई इस समस्या को हल करने में मेरी सहायता कर सकता है।
सर्वर तब आईपीवी 6 सॉकेट पर कनेक्शन स्वीकार कर रहा है। कुछ ऑपरेटिंग सिस्टम आईपीवी 6 और आईपीवी 6 दोनों को आईपीवी 6 सॉकेट पर कर सकते हैं। जब ऐसा होता है तो IPv6 पता ::ffff:192.0.2.123
या ::ffff:c000:027b
जैसा दिखाई देगा जो एक ही पता है लेकिन हेक्साडेसिमल में लिखा गया है।
आप 2a00:8640:1::224:36ff:feef:1d89
तरह IPv6 पतों तो आपके वेब सर्वर वास्तव में आईपीवी 6 से अधिक पहुंच योग्य वैसे भी है :-)
, वापस एक विहित प्रपत्र आप की तरह कुछ का उपयोग कर सकते करने के लिए सब कुछ परिवर्तित करने के लिए:
// Known prefix
$v4mapped_prefix_hex = '00000000000000000000ffff';
$v4mapped_prefix_bin = pack("H*", $v4mapped_prefix_hex);
// Or more readable when using PHP >= 5.4
# $v4mapped_prefix_bin = hex2bin($v4mapped_prefix_hex);
// Parse
$addr = $_SERVER['REMOTE_ADDR'];
$addr_bin = inet_pton($addr);
if($addr_bin === FALSE) {
// Unparsable? How did they connect?!?
die('Invalid IP address');
}
// Check prefix
if(substr($addr_bin, 0, strlen($v4mapped_prefix_bin)) == $v4mapped_prefix_bin) {
// Strip prefix
$addr_bin = substr($addr_bin, strlen($v4mapped_prefix_bin));
}
// Convert back to printable address in canonical form
$addr = inet_ntop($addr_bin);
इस कोड, जब आप इनपुट निम्न में से एक का उपयोग करना:
::ffff:192.000.002.123
::ffff:192.0.2.123
0000:0000:0000:0000:0000:ffff:c000:027b
::ffff:c000:027b
::ffff:c000:27b
192.000.002.123
192.0.2.123
आप हमेशा कैनोनिका मिल एल IPv4 पता 192.0.2.123
आउटपुट के रूप में।
और हां IPv6 पतों के विहित IPv6 पतों के रूप में वापस हो: 2a00:8640:0001:0000:0224:36ff:feef:1d89
हो जाता है 2a00:8640:1::224:36ff:feef:1d89
आदि
धन्यवाद। मैं आईपी फ़िल्टर करने के लिए कुछ करूँगा। – Brijesh
मैंने आपके सभी उदाहरणों को मेरी टेस्ट स्क्रिप्ट में जोड़ने का प्रयास किया, और मैंने उपसर्ग की स्ट्रिपिंग निष्पादित नहीं की। क्या आपके सभी उदाहरणों के लिए आपके नमूना कोड में बहुत सारे 0 हैं? –
नहीं, सभी उदाहरण वैध हैं। क्या आप अपनी टेस्ट स्क्रिप्ट दिखा सकते हैं? –
आप सुनिश्चित करें कि आपके सर्वर आईपीवी 4 पर चल रहा है कर रहे हैं? –
ऐसा इसलिए है क्योंकि आपका वेब सर्वर बाध्यकारी है [::], 0.0.0.0 नहीं। –