http://www.wasm.ru/print.php?article=socks5 сделал все по этой статье. с смтп яндекса все работает как в примере, а с хттп нет, сервер отвечает: неправильный запрос. просмотрел все параметры никаких вроде нету таких чтоб разница была в протоколе. в чем дело может быть? разобрался. оказывается и смтп то не работал. после второго запроса нужно любую парашу послать тогда второй запрос нормально получается, вот что с хттп делать не пойму.
Работать по протоколу. Там простым хелло не обойдешься. Ищи примеры в Интернете или используй сниффер.
да ты что. не может быть. чета он не дописал в своей статье. Код (Text): invoke send, s1, addr szEHLO, sizeof szEHLO,0 invoke recv, s1, addr String, 65536,0 lea ebx, String add ebx, eax mov byte ptr [ebx],0 invoke StdOut,ADDR String invoke send, s1, addr szEHLO, sizeof szEHLO,0 invoke recv, s1, addr String, 65536,0 lea ebx, String add ebx, eax mov byte ptr [ebx],0 invoke StdOut,ADDR String тупо два раза хело посылаешь, на первое (можно вместо хело че угодно послать пустую строку например) получаешь неправельный синтакс, на второй получаешь ответ сервера. а с хттп не получается так. причем не понятно кто отвечает сервер или прокси Код (Text): .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\wsock32.inc include \masm32\include\masm32.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\wsock32.lib .data MessageBuffer db INTERNET_MAX_URL_LENGTH dup (0) ProxyAddress db '127.0.0.1',0 ; прокси адрес szNOAUTH db 5h, 1h, 0h ; Начальное приветствие от клиента szCONNECT db 5, 1, 0, 3, 14, 'smtp.yandex.ru', 0, 25, 0 ; Последующая идентификация szEHLO db 'HELO localhost', 13, 10 szSEND db 13,10 .data? String db 65536 dup(?) wsaData WSADATA<> s1 SOCKET ? sin1 sockaddr_in <> .code start: invoke WSAStartup, 0101h, ADDR wsaData mov ax,0101h cmp ax, wsaData.wVersion jne NoTelnet invoke socket,AF_INET,SOCK_STREAM,IPPROTO_TCP;0 mov s1,eax mov ax,AF_INET mov sin1.sin_family,ax invoke htons,9050 ; прокси порт mov sin1.sin_port,ax invoke inet_addr, addr ProxyAddress mov sin1.sin_addr,eax invoke connect, s1, addr sin1, sizeof sockaddr_in cmp eax, -1 je NoTelnet invoke send, s1, addr szNOAUTH, 3, 0 invoke recv, s1, addr String, 65536,0 invoke send, s1, addr szCONNECT, sizeof szCONNECT, 0 invoke recv, s1, addr String, 65536,0 cmp byte ptr [String+1],0 jne ProxyFail invoke recv, s1, addr String, 65536,0 lea ebx, String add ebx, eax mov byte ptr [ebx],0 invoke StdOut,ADDR String invoke send, s1, addr szSEND, sizeof szSEND,0 invoke recv, s1, addr String, 65536,0 lea ebx, String add ebx, eax mov byte ptr [ebx],0 invoke StdOut,ADDR String invoke send, s1, addr szEHLO, sizeof szEHLO,0 invoke recv, s1, addr String, 65536,0 lea ebx, String add ebx, eax mov byte ptr [ebx],0 invoke StdOut,ADDR String ProxyFail: invoke closesocket, s1 NoTelnet: invoke WSACleanup invoke Sleep, 5000 invoke ExitProcess,0 end start
тупо два раза хело посылаешь Надо было через телнет смотреть. smtp сразу присылает тебе ответ и естественно не принимает твою первую посылку. С http не знаю. Дома посмотрю - на работе прокси у меня. Но ентер http кушает нормально. Если сформируешь Good request, то и не получишь bad... При ответе bad яндекс рвет соединение - это чтобы "экспериментаторы" не висели в коннекте
что значит естественно не понимает, если бы он его не понимал он бы не отвечал на него. в его примере якобы все работает. в статье дословно вот так. AddStrToEdit - это глупая функция окна. которое только все запутывает тут Код (Text): invoke send, hSocket, offset szNOAUTH, 3, 0 invoke recv, hSocket, addr szSocksRecvBuff, sizeof szSocksRecvBuff, 0 invoke send, hSocket, offset szCONNECT, sizeof szCONNECT, 0 invoke recv, hSocket, addr szSocksRecvBuff, 30, 0 mov edx, offset szSocksRecvBuff ; Проверка второго байта ответа сервера cmp byte ptr [edx]+1,0 je next invoke AddStrToEdit, addr ErrServ invoke closesocket, hSocket invoke WSACleanup ret next: invoke recv, hSocket, addr szRecvTrashBuff, sizeof szRecvTrashBuff, 0 invoke AddStrToEdit, addr szRecvTrashBuff invoke send, hSocket, addr szEHLO, sizeof szEHLO, 0 invoke recv, hSocket, addr szRecvBuff, sizeof szRecvBuff, 0 invoke AddStrToEdit, addr szRecvBuff
хм, только что проверил - работает. как руками в телнете, точно так же в окошке вывод. если что то не понятно - лучше почитать RFC по протоколам smtp и socks5. про хттп - надеюсь вы не ссылку слали ?! xD покажите код пожалуйста. в таком случае, можно пример "умной" ф-ии ?
пример "умного" примера - в том что в нем нет ничего лишнего и он передает только суть проблемы. в итоге статья неизвестно сколько проболталась на сайте и никто ни разу не обратил внимания что пример нерабочий в телнете и у меня все работает.
szCONNECT db 5, 1, 0, 3, 14, 'smtp.yandex.ru', 0, 25;, 0 вот этот нуль в конце был лишний. так что пример с идиотским окном болтался на сайте неизвестно сколько а в нем была ошибка. будете примеры городить пишите их просто и понятно
в комментах же прояснили давно этот момент. в окне ошибок не было. не, больше не будем. такие как вы, отбивают охоту что то делать. кстати последний ноль игнорился на момент написания статьи, как минимум (по этому и не заметил ошибки сразу) ошибка банальная - значение порта должно передаваться в "сетевом порядке байт".
да в статье ошибка, а не в рфц, это у меня уже в голове за день все попуталось, я уже на что только не думал. а как ее проверить. какой там прокси зашит внутри неизвестно. скомпилить самому малореально, какое то нагромождение инклудов и пути непонятные. в масме такие же примеры. вот simple dll например. я из него 80% кода выкинул пока он действительно simple стал.