Захват HTTPS-запроса на несуществующий сервер с помощью FiddlerCore
Я пытаюсь ответить на запрос https, используя fiddlercore. Мне нужно, чтобы все работало так: я вставил в браузер фальшивый URL, например https://my_url_that_doesnt_exist.com/
Я перехватываю этот запрос с помощью fiddlercore и отвечаю на него своими данными. Но я вижу только CONNECT и URL хоста. Я знаю, что его HTTPS и Fiddler является прокси. Но есть ли способ получить реальный URL и иметь возможность ответить на запрос https, используя ядро Fiddler?
Также я использую этот код для создания корневого сертификата, если его нет:
if (!Fiddler.CertMaker.rootCertExists())
{
if (!Fiddler.CertMaker.createRootCert())
{
throw new Exception("Could not create a certificate.");
}
}
также я использую настройки запуска:
FiddlerCoreStartupFlags fcsf = FiddlerCoreStartupFlags.Default | FiddlerCoreStartupFlags.DecryptSSL|FiddlerCoreStartupFlags.AllowRemoteClients;
а также CONFIG.IgnoreServerCertErrors = true;
Этот запрос https не виден в самом фиддлере. Я имею в виду, если я попробую какой-нибудь несуществующий URL, на который я бы хотел, чтобы мое приложение ответило каким-то пользовательским контентом. Кроме того, HTTP, а не HTTPS, и сам Fiddler содержат в ответ следующее:[Fiddler] DNS Lookup for "my_url_that_doesnt_exist.com" failed. The requested name is valid, but no data of the requested type was found
Но если я использую какой-либо существующий URL-адрес https, например, Google Plus или что-то подобное, я вижу https и все детали запроса.
Итак, возникает вопрос: как я могу перехватить https-запрос к несуществующему URL и вместо этого обслуживать мой контент? Я могу предоставить любые дополнительные детали, если это необходимо.
Также makecert.exe находится в той же папке, где находятся все мои файлы.
1 ответ
Проблема заключается в том, что трафик HTTPS проходит через туннель CONNECT, и по умолчанию этот безопасный трафик не отправляется, если сначала не удается создать туннель CONNECT на целевом сервере. Конечно, если этот целевой сервер не существует, вы в результате создаете туннель с ошибкой DNS, поэтому защищенные запросы никогда не отправляются.
Обходной путь должен сказать Fiddler сообщить клиенту, что туннель CONNECT был создан, даже не пытаясь связаться с сервером. Сделайте это, добавив это внутри BeforeRequest
обработчик:
if (oSession.HTTPMethodIs("CONNECT"))
{
oSession.oFlags["x-replywithtunnel"] = "GenerateTunnel";
return;
}