2013-07-23 4 views
5

내 컴퓨터가 포트 80을 포트 80으로 전달하는 라우터 뒤에 있습니다. 내 문제는 HttpListener가 외부 IP 주소로 주소가 지정된 요청을 무시하는 것입니다.HttpListener가 외부 요청을 무시하는 이유는 무엇입니까?

라우터에 문제가 없습니다. 나는 빈의 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(); 

... 먼저, this question에서 언급 된 문제로 인해 액세스가 거부되었다고 HttpListenerException이 발생합니다. 그런 다음 Visual Studio를 닫고 관리자로 다시 열면 제대로 실행됩니다. 내가

http://externalipaddress/testpath/ 

로 이동하면 프로그램이 (제대로) 내가

http://localhost/testpath/ 

로 이동하지만, 내 요구는 간단 회에서 종료됩니다 이유는 무엇입니까 아웃 시간 HTTP Listener에가 내 외부 요청? 그 결과는 'externalipaddress'에 대한 숫자 IP 주소 또는 도메인 이름뿐만 아니라 서브 폴더, 슬래시 등의 많은 순열과 접두어 "http : // * : 80/testpath /", "http : // externaldomain : 80/testpath/"및"http : // externalipaddress : 80/testpath/"(공백 없음, 스택 오버플로 형식에 추가됨).

+1

포트 80에서 들어오는 연결을 차단했는지 ISP에 질문 했습니까? 흔하지 않지만 일부는 그렇습니다. 또한 외부 IP를 해결하여'homeusr51363_516.your_isp.com' 또는 비슷한 주소 – rath

+0

ISP가 들어오는 연결을 차단했다면 (외부 IP 주소를 통해 포트 80에 연결하는) 첫 번째 코드의 성공은 어떨까요? 설명하니? 앞서 언급했듯이 브라우저 요청에 숫자 IP 주소와 확인 가능한 도메인 이름을 사용하려고했습니다. – Ben

답변

6

Windows 방화벽이 localhost 외부에서 들어오는 포트 80 요청을 조용히 먹고있는 것으로 나타났습니다. 방화벽을 사용하지 않도록 설정하면 HttpListener가 외부 요청을 감지했습니다. 방화벽을 다시 활성화하면 HttpListener가 외부 요청을 감지하지 못했습니다. HttpListener에 대해 수신 대기하는 TCP를 수행하는 서비스를 호스팅하는 SYSTEM 프로그램이 포트 80에서 수신 대기하도록 허용하는 "BranchCache Content Retrieval (HTTP-In)"이라는 사용 안 함 인바운드 규칙을 사용하도록 설정하면 HttpListener가 외부 요청을 다시 감지했습니다.

Windows 7의 시작 -> 제어판 -> 시스템 및 보안 -> Windows 방화벽 -> 고급 설정 -> 인바운드 규칙에서 인바운드 규칙 목록을 찾으십시오.

+2

이것은 큰 문제입니다. 나는 사용하고있는 포트에 방화벽 예외를 추가하는 것을 꺼린다. IMHO 이것은 나쁜 습관입니다. 그것에 대한 해결책이 아직 없습니까? – Filimindji

+1

방화벽의 정의에 따라 사용하려는 포트에 대한 방화벽 예외가 있어야합니다. 여기서 어려움은 HttpListener가 포트 80에서 수신 대기하도록 프로그램 외부의 내용을 사용하므로 프로그램에 대한 방화벽 예외 만 허용하면 HttpListener가 연결을 수신 대기하는 데 충분하지 않습니다. – Ben

+0

벤 감사합니다, 당신은 내가이 문제를 이해하도록 도왔습니다. 이 문제는 여전히 보안 문제 인 것처럼 보이지만 다른 해결책이 없으므로 귀하의 조언을 따르 겠습니 다. – Filimindji

관련 문제