Проверка трафика веб-сокета с прокси
Я использую Charles Proxy для проверки трафика из моих приложений для Android. У меня телефон настроен на прокси весь трафик через Чарльз, который установлен на моем ПК.
До сих пор все работало (трафик HTTP/HTTPS), за исключением трафика веб-сокетов. Я не смог проверить это у Чарльза и Фиддлера. Во-первых, запрос CONNECT не выполняется следующим образом:
URL https://184.73.XX.XX/
Status Failed
Failure Invalid first line in request
Response Code -
Protocol HTTP/1.0
Method CONNECT
Content-Type -
Client Address /192.168.0.10
Remote Address 184.73.XX.XX/184.73.XX.XX
И сразу после этого запроса отправляется дополнительный запрос на обновление соединения, который выглядит успешным, как видно из ответа:
HTTP/1.1 101 Switching Protocols
Server: nginx
Date: Sun, 16 Feb 2014 02:04:33 GMT
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Accept: CKm+rgmiltNrbQvwU2HzKHzr2eM=
После этого трафик из приложения перестает отображаться, даже если активность продолжается. Итак, что же такого в трафике веб-сокета, что он не перехватывается прокси-сервером? Кроме того, как я могу захватить это, чтобы видеть то, что посылается туда и обратно?
Я пробовал Wireshark и вижу, что трафик TLS продолжается после запроса CONNECT/upgrade, но я не знаю, как преобразовать пакеты в нечто, что я могу понять, и расшифровать зашифрованный трафик TLS.
1 ответ
Сам нашел ответ, если кому-то интересно (источник - blogs.telerik.com)
WebSockets
Поддержка Fiddler HTML5 WebSockets продолжает расти; Расширения Fiddler теперь могут перехватывать и обрабатывать сообщения WebSocket, обрабатывая событие FiddlerApplication.OnWebSocketMessage.
При подготовке к полнофункциональному пользовательскому интерфейсу WebSockets Fiddler больше не выводит сообщения WebSocket на вкладку "Журнал". Если вы хотите включить это поведение до тех пор, пока не будет доступен полный пользовательский интерфейс, вы можете сделать это с помощью FiddlerScript. Просто нажмите "Правила"> "Настроить правила" и добавьте следующую функцию в ваш класс Handlers.
static function OnWebSocketMessage(oMsg: WebSocketMessage) {
// Log Message to the LOG tab
FiddlerApplication.Log.LogString(oMsg.ToString());
/*
// Modify a message's content
var sPayload = oMsg.PayloadAsString();
if (sPayload.Contains("time")) {
oMsg.SetPayload(sPayload + "... bazinga!");
}
*/
}