簡體   English   中英

為什么HttpListener會忽略外部請求?

[英]Why does HttpListener ignore external requests?

我的計算機位於路由器后面,它將端口80轉發給它(作為端口80)。 我的問題是HttpListener似乎忽略了發往外部IP地址的請求。

問題不在於路由器; 如果我創建一個空白的C#控制台項目並只添加以下代碼行:

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連接。 因此,一切都設置正確 - 這台計算機可以接受端口80上的內部和外部連接。

現在,如果我創建另一個空白的C#控制台項目並僅添加以下代碼行:

System.Net.HttpListener s = new System.Net.HttpListener();
s.Prefixes.Add("http://+:80/testpath/");
s.Start();
System.Net.HttpListenerContext c = s.GetContext();

......首先,我會得到一個HttpListenerException說的訪問,因為中提到的問題,否認了這一問題 然后,當我關閉Visual Studio並以管理員身份重新打開它時,它將正常運行。 當我導航到該程序時,程序將終止(正確)

http://localhost/testpath/

但是,如果我導航到我的請求,我的請求就會超時

http://externalipaddress/testpath/

為什么我對HttpListener的外部請求超時? 結果可以使用'externalipaddress'的數字IP地址或域名重現,以及子文件夾,斜杠等的許多排列,以及前綴“http:// *:80 / testpath /”,“http: // externaldomain:80 / testpath /“和”http:// externalipaddress:80 / testpath /“(沒有空格;為stackoverflow格式化添加)。

事實證明,Windows防火牆正在默默地從localhost外部進入傳入端口80請求。 當我禁用防火牆時,HttpListener檢測到外部請求。 當我重新啟用防火牆時,HttpListener停止檢測外部請求。 當我啟用名為“BranchCache內容檢索(HTTP-In)”的禁用入站規則時,它允許SYSTEM程序(承載執行TCP偵聽HttpListener的服務)偵聽端口80,HttpListener再次檢測到外部請求。

要在Windows 7上找到“入站規則”列表,請單擊“開始” - >“控制面板” - >“系統和安全” - >“Windows防火牆” - >“高級設置” - >“入站規則”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM