Подтвердить что ты не робот

Могу ли я временно переопределить разрешение DNS в приложении .NET?

У меня есть код оболочки, который запускает набор тестов NUnit, которые сканируют живые сайты для определенных кодов ответов.

Я хотел бы запустить эти тесты на другом сервере. При запуске вручную я могу это сделать, отредактировав файл /etc/hosts в Windows\System32\drivers и временно установив www.mysite.com на 10.0.0.whatever

Есть ли способ сделать то же самое в консольном приложении .NET - временно переопределить запись DNS или каким-то образом перехватить разрешение и вернуть другой IP-адрес?

EDIT: это для тестирования нескольких серверов в веб-ферме. У меня есть три живых сервера, все из которых ДУМАЮТ, что они www.example.com. Поскольку серверы используют заголовки хостов HTTP, я не могу просто запустить тест с server1, затем server2, а затем server3, потому что HTTP-запрос http://server1/ НЕ будет возвращать то же самое, что запрос http://www.example.com/, который разрешен для сервера1...

4b9b3361

Ответ 1

В прошлом с С++ я смог подключиться к функции gotostbyname WSOCK32.DLL и перенаправить DNS-запросы. Для этого я использовал библиотеку Microsoft Detours.

Что касается С#, я нашел это: http://easyhook.codeplex.com/, возможно, это поможет вам. В основном вы можете подключиться к функции windows gethostbyname и выполнить свой собственный код или вернуть другой результат (другой IP).

Другим возможным решением является временное (и программное) редактирование файла hosts, когда приложение запускается и заканчивается. Из вашего собственного кода.

EDIT: я нашел свой старый код на С++, возможно, он даст вам подсказку, что делать.

struct hostent FAR * WSAAPI MyGetHostByName(IN const char FAR * name)
{
    // Call the regular function 
    struct hostent* ret = GetHostByNameFunction(name);
    // Check if it 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