विशेष रूप से नोड के लिए, घटना कनेक्शन के तहत http सर्वर घटक के लिए प्रलेखन कहता है:
[ट्रिगर] जब एक नई टीसीपी स्ट्रीम स्थापित होती है। [] सॉकेट एक प्रकार का जाल है। आमतौर पर उपयोगकर्ता इस ईवेंट को एक्सेस नहीं करना चाहेंगे। विशेष रूप से, सॉकेट पठनीय घटनाओं का उत्सर्जन नहीं करेगा क्योंकि प्रोटोकॉल पार्सर सॉकेट से कैसे जुड़ता है। सॉकेट पर भी पहुँचा जा सकता है request.connection
।
तो, इसका मतलब request.connection
है कि एक सॉकेट है और प्रलेखन के अनुसार वास्तव में एक सॉकेट है ।remoteAddress विशेषता जो प्रलेखन के अनुसार है:
दूरस्थ आईपी पते का स्ट्रिंग प्रतिनिधित्व। उदाहरण के लिए, '74 .125.127.100 'या' 2001: 4860: a005 :: 68 '।
एक्सप्रेस के तहत, अनुरोध ऑब्जेक्ट भी नोड http अनुरोध ऑब्जेक्ट का एक उदाहरण है, इसलिए यह दृष्टिकोण अभी भी काम करना चाहिए।
हालाँकि, Express.js के तहत अनुरोध में पहले से ही दो विशेषताएँ हैं: req.ip और req.ips
req.ip
दूरस्थ पता लौटें, या जब "प्रॉक्सी पर विश्वास करें" सक्षम हो - अपस्ट्रीम एड्रेस।
req.ips
जब "विश्वास प्रॉक्सी" है true
, तो "एक्स-फॉरवर्ड-फॉर" आईपी पते की सूची को पार्स करें और एक सरणी लौटाएं, अन्यथा एक खाली सरणी वापस आ गई है। उदाहरण के लिए यदि मान "क्लाइंट, प्रॉक्सी 1, प्रॉक्सी 2" था, तो आपको सरणी ["क्लाइंट", "प्रॉक्सी 1", "प्रॉक्सी 2"] प्राप्त होगा, जहां "प्रॉक्सी 2" सबसे नीचे की धारा है।
यह ध्यान देने योग्य हो सकता है कि, मेरी समझ के अनुसार, एक्सप्रेस req.ip
एक बेहतर दृष्टिकोण है req.connection.remoteAddress
, क्योंकि req.ip
इसमें वास्तविक ग्राहक आईपी (बशर्ते कि विश्वसनीय प्रॉक्सी व्यक्त में सक्षम हो), जबकि दूसरे में प्रॉक्सी का आईपी पता हो सकता है (यदि वहां है) एक)।
यही कारण है कि वर्तमान में स्वीकृत उत्तर बताता है:
var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress;
req.headers['x-forwarded-for']
एक्सप्रेस के बराबर हो जाएगा req.ip
।