Вопрос по статье - "Работа с протоколом Socks5 на MASM"

Тема в разделе "WASM.BEGINNERS", создана пользователем _sheva740, 22 сен 2009.

  1. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    c4m310t
    Статья хорошая спасибо.
    Вопрос на каком серваке ты тестировал своего клиента?
     
  2. bomz

    bomz New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2011
    Сообщения:
    26
    http://www.wasm.ru/print.php?article=socks5
    сделал все по этой статье. с смтп яндекса все работает как в примере, а с хттп нет, сервер отвечает: неправильный запрос. просмотрел все параметры никаких вроде нету таких чтоб разница была в протоколе. в чем дело может быть?

    разобрался. оказывается и смтп то не работал. после второго запроса нужно любую парашу послать тогда второй запрос нормально получается, вот что с хттп делать не пойму.
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Работать по протоколу. Там простым хелло не обойдешься. Ищи примеры в Интернете или используй сниффер.
     
  4. bomz

    bomz New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2011
    Сообщения:
    26
    да ты что. не может быть.

    чета он не дописал в своей статье.

    Код (Text):
    1.     invoke send, s1, addr szEHLO, sizeof szEHLO,0
    2.     invoke recv, s1, addr String, 65536,0
    3.     lea ebx, String
    4.     add ebx, eax
    5.     mov byte ptr [ebx],0
    6.     invoke  StdOut,ADDR String
    7.     invoke send, s1, addr szEHLO, sizeof szEHLO,0
    8.     invoke recv, s1, addr String, 65536,0
    9.     lea ebx, String
    10.     add ebx, eax
    11.     mov byte ptr [ebx],0
    12.     invoke  StdOut,ADDR String
    тупо два раза хело посылаешь, на первое (можно вместо хело че угодно послать пустую строку например) получаешь неправельный синтакс, на второй получаешь ответ сервера.
    [​IMG]
    а с хттп не получается так.
    [​IMG]
    причем не понятно кто отвечает сервер или прокси

    Код (Text):
    1.     .386
    2.  
    3.     .model flat, stdcall
    4.     option casemap :none
    5.  
    6.     include \masm32\include\windows.inc
    7.  
    8.     include \masm32\include\user32.inc
    9.     include \masm32\include\kernel32.inc
    10.     include \masm32\include\wsock32.inc
    11.     include \masm32\include\masm32.inc
    12.  
    13.     includelib \masm32\lib\masm32.lib
    14.     includelib \masm32\lib\user32.lib
    15.     includelib \masm32\lib\kernel32.lib
    16.     includelib \masm32\lib\wsock32.lib
    17.  
    18. .data
    19.     MessageBuffer       db INTERNET_MAX_URL_LENGTH dup (0)
    20.     ProxyAddress        db '127.0.0.1',0                ; прокси адрес
    21.     szNOAUTH        db 5h, 1h, 0h                   ; Начальное приветствие от клиента
    22.     szCONNECT       db 5, 1, 0, 3, 14, 'smtp.yandex.ru', 0, 25, 0   ; Последующая идентификация
    23.     szEHLO              db 'HELO localhost', 13, 10
    24.     szSEND          db 13,10
    25. .data?
    26.     String          db 65536 dup(?)
    27.     wsaData         WSADATA<>
    28.     s1          SOCKET ?
    29.     sin1            sockaddr_in <>
    30.  
    31. .code
    32. start:
    33.  
    34.     invoke WSAStartup, 0101h, ADDR wsaData
    35.     mov ax,0101h
    36.     cmp ax, wsaData.wVersion
    37.     jne NoTelnet
    38.     invoke socket,AF_INET,SOCK_STREAM,IPPROTO_TCP;0
    39.     mov s1,eax
    40.     mov ax,AF_INET
    41.     mov sin1.sin_family,ax
    42.     invoke htons,9050                           ; прокси порт
    43.     mov sin1.sin_port,ax
    44.     invoke inet_addr, addr ProxyAddress
    45.     mov sin1.sin_addr,eax
    46.  
    47.     invoke connect, s1, addr sin1, sizeof sockaddr_in
    48.     cmp eax, -1
    49.     je NoTelnet
    50.     invoke send, s1, addr szNOAUTH, 3, 0
    51.     invoke recv, s1, addr String, 65536,0
    52.     invoke send, s1, addr szCONNECT, sizeof szCONNECT, 0
    53.     invoke recv, s1, addr String, 65536,0
    54.     cmp byte ptr [String+1],0
    55.     jne ProxyFail
    56.  
    57.     invoke recv, s1, addr String, 65536,0
    58.     lea ebx, String
    59.     add ebx, eax
    60.     mov byte ptr [ebx],0
    61.     invoke  StdOut,ADDR String
    62.  
    63.     invoke send, s1, addr szSEND, sizeof szSEND,0
    64.     invoke recv, s1, addr String, 65536,0
    65.     lea ebx, String
    66.     add ebx, eax
    67.     mov byte ptr [ebx],0
    68.     invoke  StdOut,ADDR String
    69.  
    70.     invoke send, s1, addr szEHLO, sizeof szEHLO,0
    71.     invoke recv, s1, addr String, 65536,0
    72.     lea ebx, String
    73.     add ebx, eax
    74.     mov byte ptr [ebx],0
    75.     invoke  StdOut,ADDR String
    76.  
    77. ProxyFail:
    78.     invoke closesocket, s1
    79. NoTelnet:
    80.     invoke WSACleanup
    81.     invoke Sleep, 5000
    82.     invoke ExitProcess,0
    83. end start
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    тупо два раза хело посылаешь
    Надо было через телнет смотреть. smtp сразу присылает тебе ответ и естественно не принимает твою первую посылку. С http не знаю. Дома посмотрю - на работе прокси у меня. Но ентер http кушает нормально. Если сформируешь Good request, то и не получишь bad... При ответе bad яндекс рвет соединение - это чтобы "экспериментаторы" не висели в коннекте :)
     
  6. bomz

    bomz New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2011
    Сообщения:
    26
    что значит естественно не понимает, если бы он его не понимал он бы не отвечал на него. в его примере якобы все работает.

    в статье дословно вот так. AddStrToEdit - это глупая функция окна. которое только все запутывает тут
    Код (Text):
    1. invoke send, hSocket, offset szNOAUTH, 3, 0
    2. invoke recv, hSocket, addr szSocksRecvBuff, sizeof szSocksRecvBuff, 0
    3.  
    4. invoke send, hSocket, offset szCONNECT, sizeof szCONNECT, 0
    5. invoke recv, hSocket, addr szSocksRecvBuff, 30, 0
    6.  
    7.  
    8. mov edx, offset szSocksRecvBuff                     ; Проверка  второго байта ответа сервера
    9. cmp byte ptr [edx]+1,0
    10. je next
    11.  
    12.     invoke AddStrToEdit, addr ErrServ
    13. invoke closesocket, hSocket
    14. invoke WSACleanup
    15.     ret
    16.  
    17. next:
    18.  
    19. invoke recv, hSocket, addr szRecvTrashBuff, sizeof szRecvTrashBuff, 0
    20. invoke AddStrToEdit, addr szRecvTrashBuff
    21. invoke send, hSocket, addr szEHLO, sizeof szEHLO, 0
    22. invoke recv, hSocket, addr szRecvBuff, sizeof szRecvBuff, 0
    23. invoke AddStrToEdit, addr szRecvBuff
     
  7. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    хм, только что проверил - работает.
    как руками в телнете, точно так же в окошке вывод.

    если что то не понятно - лучше почитать RFC по протоколам smtp и socks5.

    про хттп - надеюсь вы не ссылку слали ?! xD
    покажите код пожалуйста.

    в таком случае, можно пример "умной" ф-ии ?
     
  8. bomz

    bomz New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2011
    Сообщения:
    26
    пример "умного" примера - в том что в нем нет ничего лишнего и он передает только суть проблемы. в итоге статья неизвестно сколько проболталась на сайте и никто ни разу не обратил внимания что пример нерабочий
    в телнете и у меня все работает.
     
  9. bomz

    bomz New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2011
    Сообщения:
    26
    szCONNECT db 5, 1, 0, 3, 14, 'smtp.yandex.ru', 0, 25;, 0

    вот этот нуль в конце был лишний.
    так что пример с идиотским окном болтался на сайте неизвестно сколько а в нем была ошибка.
    будете примеры городить пишите их просто и понятно
     
  10. bomz

    bomz New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2011
    Сообщения:
    26
    [​IMG]

    вот тут лажа написана получается
     
  11. Xml

    Xml New Member

    Публикаций:
    0
    Регистрация:
    18 май 2011
    Сообщения:
    54
  12. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    в комментах же прояснили давно этот момент.
    в окне ошибок не было.
    не, больше не будем.
    такие как вы, отбивают охоту что то делать.

    кстати последний ноль игнорился на момент написания статьи, как минимум (по этому и не заметил ошибки сразу)
    ошибка банальная - значение порта должно передаваться в "сетевом порядке байт".
     
  13. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    с чего бы ?
    2 байта на значение порта, это цитата из RFC. =|
     
  14. bomz

    bomz New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2011
    Сообщения:
    26
    да в статье ошибка, а не в рфц, это у меня уже в голове за день все попуталось, я уже на что только не думал.

    а как ее проверить. какой там прокси зашит внутри неизвестно. скомпилить самому малореально, какое то нагромождение инклудов и пути непонятные. в масме такие же примеры. вот simple dll например. я из него 80% кода выкинул пока он действительно simple стал.