.NET 응용 프로그램 내에서 DNS 해상도를 일시적으로 재정의 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/5992700

문제

특정 응답 코드를 위해 라이브 웹 사이트를 검색하는 NUNIT 테스트 집합을 실행하는 래퍼 코드가 있습니다.

다른 서버에 대해이 테스트를 실행하고 싶습니다. 수동으로 실행 중일 때 Windows \ System32 \ Drivers에서 / etc / hosts 파일을 편집하고 일시적으로 www.mysite.com을 10.0.0으로 설정하면이 작업을 수행 할 수 있습니다

는 .NET 콘솔 응용 프로그램에서 동일한 작업을 수행 할 수 있습니다. - DNS 레코드를 일시적으로 재정의하거나 해상도를 가로 채고 다른 IP 주소를 반환하고 다른 IP 주소를 반환합니까?

편집 : 웹 팜에서 여러 서버를 테스트하기위한 것입니다. 나는 그들이 www.example.com이라고 생각하는 세 가지 라이브 서버가 있습니다. 서버는 HTTP 호스트 헤더를 사용하기 때문에 HTTP 요청은 "Nofollow Noreferrer"> HTTP에 대한 HTTP 요청이므로 Server1, Server2, Server3에 대한 테스트를 실행할 수 없습니다. : // server1 / "nofollow noreferrer"> http : //www.example에 대한 요청과 동일한 것을 반환하지 않습니다. com / server1로 해결되었습니다 ...

도움이 되었습니까?

해결책

과거의 C ++에서는 wsock32.dll의 gethostbyname 함수와 Reroute DNS 요청에 연결할 수있었습니다.Microsoft Entours 라이브러리를 사용하여 그렇게합니다.

C #에 대한 C #은 다음을 찾았습니다. "noreferrer"> http://easyhook.codeplex.com/ 도움이 될 것입니다.당신.기본적으로 gethostbyname Windows 기능에 연결하고 자신의 코드를 실행하거나 다른 결과 (다른 IP)를 반환 할 수 있습니다.

응용 프로그램이 시작되고 끝나면 호스트 파일을 일시적으로 (프로그래밍 방식으로) 편집하는 것입니다.자신의 코드에서.

편집 : 내 오래된 C ++ 코드를 발견했을 수도 있습니다, 어쩌면 그것은 당신에게 무엇을 해야할지 힌트를 줄 것입니다.

struct hostent FAR * WSAAPI MyGetHostByName(IN const char FAR * name)
{
    // Call the regular function 
    struct hostent* ret = GetHostByNameFunction(name);
    // Check if it's the hostname you want to reroute
    if ( strcmp(host, (char*)name) == 0 )
    {
        // Edit the IP returned by the regular gethostbyname
        ret->h_addr_list[0] = hostIP;
        ret->h_length = 15;
    }
    // Return the result
    return ret;
}
.

edit2 : EasyHooks 의 새로운 릴리스로 다른 링크를 발견했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top