2011-05-13 8 views
16

특정 응답 코드에 대해 라이브 웹 사이트를 검사하는 NUnit 테스트 집합을 실행하는 래퍼 코드가 있습니다..NET 응용 프로그램 내에서 DNS 해상도를 일시적으로 무시할 수 있습니까?

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

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

편집 : 웹 팜의 여러 서버를 테스트하기위한 것입니다. 3 개의 라이브 서버가 있으며, 모두 www.example.com이라고 생각합니다. 서버는 HTTP 호스트 헤더를 사용하기 때문에 http://server1/에 대한 HTTP 요청이 서버 1로 확인 된 http://www.example.com/에 대한 요청과 동일한 결과를 반환하지 않기 때문에 server1, server2, server3에 대한 테스트를 실행할 수 없습니다.

+0

의 새로운 출시와 함께 다른 링크를 발견. 대신, App.config 파일에서 읽을 대상의 URL을 설정하십시오. 그런 다음 Visual Studio에서 관리 할 수있는 환경에 따라 어떤 구성 파일을 읽을 것인지를 전환 할 수 있습니다. – Jeff

+0

Jeff - 편집 참조; 다른 서버를 스캔해야하지만 다른 호스트 이름을 사용하여 대화 할 수는 없습니다 ... –

+0

아, 네. 나는 그것이 어려운 일이 될 것이라고 생각합니다. 나는 당신의 대표자와 금메달에서 의심의 여지가 여기에 뭔가 다른 일이있다 :) – Jeff

답변

7

이전에는 C++에서 WSOCK32.DLL의 gethostbyname 함수에 연결하여 DNS 요청을 다시 라우팅 할 수있었습니다. 필자는 Microsoft Detours 라이브러리를 사용하여이를 수행했습니다.

C#과 관련하여 다음과 같이 나타났습니다. 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가 : 나는 DNS 귀찮게하지 쉬울 것이라고 생각 easyhooks

+0

다른 말로하면, 안돼, 안돼 -. NET에서. –