2013-07-23 16 views
5

मेरा कंप्यूटर राउटर के पीछे है जो आगे पोर्ट 80 (पोर्ट 80 के रूप में) है। मेरी समस्या यह है कि HttpListener बाहरी आईपी पते पर संबोधित अनुरोधों को अनदेखा करता प्रतीत होता है।एचटीपी लिस्टर बाहरी अनुरोधों को अनदेखा क्यों करता है?

समस्या राउटर के साथ नहीं है; अगर मैं एक खाली सी # कंसोल प्रोजेक्ट बना सकते हैं और कोड का केवल निम्न पंक्तियां जोड़ें:

System.Net.Sockets.TcpListener s = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, 80); 
s.Start(); 
System.Net.Sockets.TcpClient c = s.AcceptTcpClient(); 

... और चलाने के कार्यक्रम [ध्यान दें: पहली बार इस कार्यक्रम चलाया जाता है, उपयोगकर्ता एक फ़ायरवॉल अनुमति देने के लिए हो सकता है अपवाद], यह अगर मैं अपने ब्राउज़र में

http://localhost/testpath/ 

पर नेविगेट समाप्त होगा या अगर मैं अपने ब्राउज़र में

http://externalipaddress/testpath/ 

करने के लिए नेविगेट - या तो पता सफलतापूर्वक एक पोर्ट 80 कनेक्शन प्रयास करता है।

System.Net.HttpListener s = new System.Net.HttpListener(); 
s.Prefixes.Add("http://+:80/testpath/"); 
s.Start(); 
System.Net.HttpListenerContext c = s.GetContext(); 
: अगर मैं एक और खाली सी # कंसोल प्रोजेक्ट बना सकते हैं और कोड का केवल निम्न पंक्तियां जोड़ें इस कंप्यूटर बंदरगाह पर आंतरिक और बाह्य कनेक्शन स्वीकार कर सकते हैं 80

अब, - तो, ​​सब कुछ ठीक तरह से स्थापित है

... सबसे पहले, मुझे एक HttpListenerException मिलेगा कि this question में उल्लिखित मुद्दों के कारण एक्सेस अस्वीकार कर दी गई है। फिर जब मैं विजुअल स्टूडियो को बंद करता हूं और इसे प्रशासक के रूप में फिर से खोलता हूं तो यह ठीक से चल जाएगा। अगर मैं

http://externalipaddress/testpath/ 

पर नेविगेट कार्यक्रम (ठीक से) जब मैं

http://localhost/testpath/ 

पर नेविगेट हालांकि, मेरा अनुरोध बस समय समाप्त समाप्त कर देगा HttpListener समय के लिए बाहर करने के लिए अपने बाहरी अनुरोध क्यों पड़ता है? परिणाम 'बाहरीपैड्रेस' के लिए एक संख्यात्मक आईपी पता या डोमेन नाम के साथ पुन: उत्पन्न होता है, साथ ही साथ उपफोल्डर्स, स्लेश इत्यादि के कई क्रमिकताएं, और उपसर्गों के लिए "http: // *: 80/testpath /", http : // बाहरी डोमेन: 80/testpath/", और" http: // बाहरीipaddress: 80/testpath/"(कोई रिक्त स्थान; stackoverflow स्वरूपण के लिए जोड़ा गया)।

+1

क्या आपने पोर्ट आईएस पर आने वाले कनेक्शन को अवरुद्ध करते हुए अपने आईएसपी से पूछा है? यह असामान्य है लेकिन कुछ करते हैं। अपने बाहरी आईपी को हल करने का भी प्रयास करें ताकि यह 'homeusr51363_516.your_isp.com' या इसी तरह के – rath

+0

पर इंगित करे यदि मेरे आईएसपी आने वाले कनेक्शन को अवरुद्ध करता है, तो पहले कोड की सफलता (बाहरी आईपी पते के माध्यम से पोर्ट 80 से कनेक्ट होने वाली) कैसे होगी व्याख्या की? जैसा कि ध्यान दिया गया है, मैंने ब्राउज़र अनुरोधों में एक संख्यात्मक आईपी पता और एक हल करने योग्य डोमेन नाम का उपयोग करने का प्रयास किया है। – Ben

उत्तर

6

यह पता चला है कि विंडोज फ़ायरवॉल चुपचाप आने वाले बंदरगाह 80 अनुरोध स्थानीयहोस्ट के बाहर से खा रहा था। जब मैंने फ़ायरवॉल को अक्षम कर दिया, तो HttpListener ने बाहरी अनुरोधों का पता लगाया। जब मैंने फ़ायरवॉल को फिर से सक्षम किया, तो HttpListener ने बाहरी अनुरोधों का पता लगाना बंद कर दिया। जब मैंने "शाखा कैश कंटेंट पुनर्प्राप्ति (HTTP-In)" नामक अक्षम इनबाउंड नियम को सक्षम किया, जो पोर्ट 80 पर सुनने के लिए सिस्टम प्रोग्राम (जो सेवा को टीसीपी एचटीपी लिस्टनर के लिए सुनता है) को होस्ट करता है, तो HttpListener ने फिर से बाहरी अनुरोधों का पता लगाया।

विंडोज 7 पर इनबाउंड नियम सूची खोजने के लिए, प्रारंभ करें -> नियंत्रण कक्ष -> सिस्टम और सुरक्षा -> विंडोज फ़ायरवॉल -> उन्नत सेटिंग्स -> इनबाउंड नियम।

+2

यह एक बड़ा मुद्दा है। मैं जिस पोर्ट का उपयोग कर रहा हूं उसके लिए फ़ायरवॉल अपवाद जोड़ने में अनिच्छुक हूं। आईएमएचओ यह एक बुरा अभ्यास है। क्या इसके बारे में अभी कोई समाधान नहीं है? – Filimindji

+1

फ़ायरवॉल की परिभाषा के अनुसार, उस पोर्ट के लिए फ़ायरवॉल अपवाद होना चाहिए जिसका आप उपयोग करना चाहते हैं। यहां कठिनाई यह थी कि एचटीपी लिस्टनर पोर्ट 80 पर सुनने के लिए आपके प्रोग्राम के बाहर कुछ उपयोग करता है, इसलिए बस आपके प्रोग्राम के लिए फ़ायरवॉल अपवाद की अनुमति देना एचटीपी लिस्टनर के लिए कनेक्शन सुनने की अनुमति नहीं है। – Ben

+0

धन्यवाद बेन, आपने मुझे इस मुद्दे को समझने में मदद की। ऐसा लगता है कि यह अभी भी एक सुरक्षा मुद्दा है, लेकिन चूंकि कोई अन्य समाधान नहीं है, इसलिए मैं आपकी सलाह का पालन करूंगा। – Filimindji

संबंधित मुद्दे