![]() |
[HELP] delphi+winsock+socks5
Приветствую, господа!
вопрос относительно организации прокси соединения через socks5 на winsocks. реализовал алгоритм: 1. шлю запрос на sock5 порт 2. получаю ответ сервера (подтвержение соединения) 3. шлю куда хочу коннектиться (например www.google.com:80) 4. получаю ответ, что соединение установлено 5. шлю данные серверу: GET / HTTP1.1+#13#10+ Host: www.google.com+#13#10#13#10 вот тут непонятки - очень редко когда приходит "200 OK", в основном приходит 400 ошибка, из 1к собранных socks5 примерно половина устанавливает соединение с сервером (остальные недоступны по таймауту), но не понятно как посылают данные ошибка 400 - очень часто приходит. 200 OK бывает очень редко - примерно 10 проксей из этих 1к. Собственно, что делаю неправильно? почему получается ошибка 400? и почему все же иногда получаю таки 200 ОК? уже запарился голову ломать. |
Цитата:
не правильно формируешь запрос Сруктура GET запроса: Код:
GET http://localhost/microtest.php HTTP/1.0 |
AlexTheC0d3r, все тоже самое, что твой запрос, что мой... только попробовал.
по-прежнему 98% ответов - 400 bad request не в этом дело видать. |
rikko, выложи часть кода.
|
Код:
procedure TProxyCheckThread.Execute;реализация таймаута для прокси - взял у Слэша. прокомментил отстальное. повторюсь - иногда работает. 200 ok получаю. Очень часто - ошибка 400 |
У меня все работает стабильно, сервак возвращает код 200.
Я кое-что поменял. Код:
socks5_req_TPC.ip:=inet_addr(Pansichar(GetipAddress(form1.edit2.Text)));Код:
socks5_req_TPC.ip:=Integer(LookupName(form1.edit2.Text));Код:
function LookupName(str: String): TInAddr;Код:
SockAddrIn.sin_addr.s_addr := inet_addr(Pansichar(PROXY_IP));Код:
SockAddrIn.sin_addr := LookupName(PROXY_IP); |
Chrome~, спасибо за совет, но у меня ничего не изменилось:
из 100 заведомо работающих проксей 18 отдают 200 OK, 82 прокси 400 Bad request, странно как то... |
2 rikko
socks5_req_TPC.port:=htons(strtoint('80')); - это жестоко. лучше уж socks5_req_TPC.port := htons(80); Вообще поподробнее попроверяй эти прокси. Могут быть следующие ошибки 1) С коде проксей есть ошибка и запрос не полностью отправляется или хз что еще происходит. бывает всякое. 2) попробуй найти прокси которые дывают ошибку постоянно и подконнектится куданить туда где можно проверить всё. Если у тя есть внешний IP то на него на какойнить порт или проверить логи сервака. Как вариант пробовать запрос на echo сервис. тогда он ответит темже что ты ему послал и таким образом сможеш увидеть запрос который идет уже от прокси. Также желательно проверять кол-во посланных данных с длинной буфера который ты посылал. просто хз почему но может быть такое что не до конца от тебя данные уходят. Еще иногда бывает что траф компов както хитро фильтруется. Такое у сотовых операторов часто бывает Это та часть по которой чтото может не пахать. А вот часть по которой скорее всего не пашет Код:
send_buf:='GET http://'+form1.edit2.Text+'/ HTTP/1.1'#13#10+Ты посылаешь на HTTP сервер через socks5 прокси по этому он должен быть типа такой: Код:
'GET / HTTP/1.0'#13#10+P.S. 2 AlexTheC0d3r если не знаешь, то лучше не пиши, а то путаешь человека. |
| Время: 17:49 |