2012-06-11 13 views
11

मैं PHP के साथ एक फॉर्म बना रहा हूं और मैं उपयोगकर्ता के आईपी पते का रिकॉर्ड रखना चाहता हूं।

<input type="hidden" name="ip" value="::1" /> 

:

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" /> 

जब मैं XAMPP में कोड को खोलने और स्रोत पढ़ा है, मूल्य एक आईपी पता क्या मेरा था की तुलना में अलग था: यह कोड मैं प्रयोग किया जाता है स्निप-यह है क्या यह आईपी पता आमतौर पर तब होता है जब मैं इसे लोकहोस्ट (एक्सएएमपीपी) में उपयोग करता हूं?
यदि नहीं, तो उपयोगकर्ता के आईपी पते को पकड़ने में कोई विकल्प हैं?

उत्तर

18

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

कि ऐसा मत करो। फ़ॉर्म सबमिट होने पर $_SERVER से अनुरोध प्राप्त करें। जब फॉर्म उत्पन्न होता है और इसे फ़ॉर्म में संग्रहीत किया जाता है तो इसे प्राप्त करने से लोगों को इसे बदलने का मौका मिलता है।

Does this IP address normally happen when I use it in a localhost (XAMPP)?

हां। जब आप स्थानीयहोस्ट से किसी पृष्ठ का अनुरोध करते हैं तो स्थानीय आईपी (आईपीवी 6) पता प्राप्त करना सामान्य है।

+0

सबमिट करते समय इसे बदलने पर टिप के लिए Thx;) – zeldarulez

+0

क्या होगा यदि कोई व्यक्ति अपना आईपी पता किसी भी तरह बदलता है (जैसे वीपीएन या कुछ भी उपयोग करना)? तब मुझे उस पीसी का सही आईपी नहीं मिलेगा। क्या यह? टिप के लिए – partho

4

':: 1' लोकलहोस्ट का IPV6 संस्करण (या 127.0.0.1) है।

ओपन पोर्ट 80 और अपने आईपी पते से पृष्ठ पर जाएं। तब ठीक काम करना चाहिए :)।

1

यह वास्तव में आपका आईपी है। यद्यपि आपका आईपीवी 6 आईपी और आईपीवी 4 नहीं।

आईपीवी 6 में, :: 1 लोकहोस्ट/127.0.0.1 के लिए खड़ा है।

25

आईपी ::1 आईपीवी 6 संस्करण में "लोकलहोस्ट" है। आपकी मशीन आईपीवी 6 के साथ कॉन्फ़िगर की गई है - और इसलिए आपको यह आईपी पता मिल रहा है। शायद, जब आप अपने सर्वर को लाइव सर्वर पर तैनात करते हैं, तो IPv6 सर्वर पर कॉन्फ़िगर नहीं किया जाएगा और आपके ऐप को एक और परिचित आईपीवी 4 पता मिलेगा (उदा। Aaa.bbb.ccc.ddd)।

एक और नोट पर, $_SERVER['REMOTE_ADDR'] में हमेशा सही पता नहीं हो सकता है। इसका उपयोग करना बेहतर है:

if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR']; 
} else { 
    $ip_address = $_SERVER['REMOTE_ADDR']; 
} 
+0

Thx! में इसे याद रखूंगा। ;) – zeldarulez

+3

बेल्ट, लेकिन अगर आप HTTP_X_FORWARDED_FOR का उपयोग करते हैं तो भी ध्यान रखें, आप इस पर भरोसा नहीं कर सकते हैं कि केवल सुरक्षित व्यवस्थापक पृष्ठों के लिए स्थानीय आईपी तक पहुंच की अनुमति दें, क्योंकि उस सिर को आसानी से धोखा दिया जा सकता है। वास्तव में, स्टैक ओवरव्लो एक बार इस बात का शिकार हो गया और सौभाग्य से एक दोस्ताना उपयोगकर्ता ने उन्हें बताया। – smdrager

+0

@smdrager: तो उपयोगकर्ता मशीन के आईपी पते को पाने का सुरक्षित तरीका क्या है? मुझे अपने पृष्ठ को केवल एक ही आईपी के लिए खोलने की अनुमति देना है। – sqlchild

4

1)। फ़ॉर्म बनाने के लिए आपको <?php echo $_SERVER['REMOTE_ADDR']; ?> जोड़ने की आवश्यकता नहीं है। इस मामले में इसे बनाना आसान है (वास्तव में यह किसी भी मामले में आसान है)। सर्वर पक्ष पर डेटा में बेहतर आईपी जोड़ें।

2) आप $_SERVER['HTTP_X_FORWARDED_FOR'] पर भी देख सकते हैं। यदि उपयोगकर्ता के पास प्रॉक्सी है, तो उनमें से कुछ (पारदर्शी प्रॉक्सी) वास्तविक उपयोगकर्ता के आईपी को वहां रखती हैं।

3) बस ध्यान दें: आईपी के बारे में डेटा बिल्कुल भरोसेमंद नहीं है।

0
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') { 
       $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR']; 
      } else { 
       $ip_address = $_SERVER['REMOTE_ADDR']; 
      } 

यह कोड क्लाइंट का आईपी देता है। यदि आपको लगता है कि यह सर्वर आईपी है, तो आप शायद सही हैं क्योंकि आपका सर्वर (संभवतः) आपके पीसी पर होस्ट किया गया है। चूंकि आपके क्लाइंट (पीसी) और सर्वर एक ही पीसी पर चलते हैं, इसलिए दोनों के पास एक ही आईपी है। यदि आप इसे समझ में नहीं आते हैं, तो आपको वास्तव में ips, स्थानीय ips और उन सभी चीजों में कुछ शोध करना चाहिए।