2015-01-10 4 views
0

저는 VirtualBox에 Windows Server가 있으며 NAT 포트 80을 가지고 있습니다. Request.UserHostAddress는 가상 네트워크의 로컬 IP를 반환합니다. 사용자의 IP를 어떻게 얻어야합니까?NATed 가상 서버의 사용자 IP 가져 오기

+0

이유는 무엇입니까? 어쨌든 그것은 불가능합니다. – fejesjoco

+0

@fejesjoco 잘 모르겠습니다. 내 서버가 데비안이고 가상 서버에 Windows Server 2012가 설치되었습니다. – Amir

답변

1

당신이있어 문제는 당신이 없습 이상 볼 수 없다는 것입니다. NAT는 Network Address Translation의 약자이므로이 경우 클라이언트가 아닌 NAT 장치의 공용 IP 주소가 표시됩니다. 그것이 작동하는 방식입니다. 클라이언트가 로컬 IP 주소를 보낼 수도 있지만 그렇게하려면 클라이언트에 뭔가가 있어야합니다.

다른 옵션은 NAT에서 브리지 형 네트워킹으로 전환하는 것입니다. Bridged는 VM이있는 가상 네트워크가 호스트가있는 실제 네트워크와 나란히 결합되어 있음을 의미합니다. 즉, 같은 서브넷에 있고 동일한 네트워크의 다른 IP 주소로 라우팅 할 수있는 IP 주소를 갖게됩니다. 브리지는 스위치/허브처럼 작동하며 NAT는 라우터처럼 작동합니다. 그들 사이에 NAT 장치가없는 서버/클라이언트로

동안에는은 IP를 표준 메커니즘을 사용하여 쉽게 볼 수 있어야합니다 (예 : context.Request.ServerVariables["REMOTE_ADDR"], Request.UserHostAddress 등)

+0

테스트 용으로 말한 것은 ... 프로덕션 서버에서 문제가 발생 했습니까? 나는 VPS에서 IIS, MailEnable, FTP를 사용한다. VPS @Basic – Amir

+0

전혀 ... 내가 "테스트 목적으로"라고 말한 유일한 이유는 그것을 시도하고 그것이 효과가 있었다는 것을 증명하는 것이었다. 나는 당신이 임의의 결정에 반대하는 이유 때문에 NAT를 사용했다고 생각했습니다. 그렇지 않다면 브리징은 절대적으로 원하는 방식입니다. 이런 방식으로 많은 프로덕션 서버를 구성했습니다. 내가 편집 할게 – Basic

+0

@ 존 손더스 어떻게 지냈니? 편집하고 코멘트를 삭제하여 더러움을 제거합니다 – Basic

-1

사용자의 공용 IP 주소를 가져 오시겠습니까? 가장 쉬운 방법은 단순히 원격 주소를 반향하는 PHP 스크립트를 작성하거나 그렇게하는 기존 API를 사용하는 것입니다.

PHP :

<?php 
    echo $_SERVER["REMOTE_ADDR"]; 
?> 

C 번호 :

using (var client = new HttpClient()) { 
    var response = await client.GetStringAsync(new Uri("URL")); 
    IPAddress ip; 

    if (IPAddress.TryParse(response, out ip)) { 
     //Success 
    } 
} 
+0

두 코드가 똑같은 일을하지 않습니다. C#은 무엇을합니까? –

+0

그들은 똑같은 일을하기로되어 있지 않습니다. C# 코드는 HttpClient를 사용하여 문자열 (PHP 스 니펫에 의해 반향 된 IP 주소)을 읽습니다. 외부 IP 주소를 얻는 매우 신뢰할 수있는 방법. –

+0

그 정보는 답안에 포함되어 있어야하지만, 여하튼 OP는 공인 IP 주소를 찾고 있지 않습니다. OP는 그가 NAT를 통해 클라이언트의 "실제"IP 주소를 얻을 수 있다고 생각했습니다. –