Я предлагаю вам не реализовывать это самостоятельно - протокол HTTP 1.1 достаточно сложен, чтобы сделать его проектом в несколько человеко-месяцев.
Вопрос в том, есть ли парсер протокола HTTP-запросов для .NET? Этот вопрос был задан для SO, и в ответах вы увидите несколько предложений, включая исходный код для обработки потоков HTTP.
Преобразование необработанного HTTP-запроса в объект HTTPWebRequest
РЕДАКТИРОВАТЬ: код ротора является достаточно сложным, и трудно читать / перемещаться в виде веб-страниц. Но, тем не менее, усилия по внедрению поддержки SOCKS намного ниже, чем реализация всего протокола HTTP самостоятельно. В течение нескольких дней у вас будет работать что-то, от чего вы можете зависеть, основанное на проверенной и проверенной реализации.
Запрос и ответ считываются из / записываются в NetworkStream
, m_Transport
в классе Connection
. Это используется в следующих методах:
internal int Read(byte[] buffer, int offset, int size)
//and
private static void ReadCallback(IAsyncResult asyncResult)
оба в http://www.123aspx.com/Rotor/RotorSrc.aspx?rot=42903
Сокет создан в
private void StartConnectionCallback(object state, bool wasSignalled)
Таким образом, вы можете изменить этот метод для создания Socket для вашего socks-сервера и выполнить необходимое рукопожатие для получения внешнего соединения. Остальной код может остаться прежним.
Я пробормотал эту информацию примерно за 30 минут, просматривая страницы в Интернете. Это должно пойти намного быстрее, если вы загрузите эти файлы в IDE. Может показаться обременительным чтение этого кода - в конце концов, чтение кода гораздо сложнее, чем его написание, но вы вносите небольшие изменения в уже установленную работающую систему.
Чтобы убедиться, что изменения работают во всех случаях, было бы целесообразно также проверить, когда соединение разорвано, чтобы убедиться, что клиент повторно подключается с использованием того же метода, и поэтому повторно устанавливает соединение SOCKS и отправляет запрос SOCKS. .