Вот собственно простенькая функция вообще без всяких "наворотов", которая пытается подсоединиться к rambler'у по Socks5 TOR к SMTP-порту и послать hello www.rambler.ru! Код (Text): CrLf equ 0Dh,0Ah PROXY_PORT equ 9050 PROXY_ADDR equ "127.0.0.1" SITE equ "www.rambler.ru" CONNECT_TO_PORT equ 25 url db SITE,0h BUFFER_SIZE equ 50000h RECV_SIZE equ 100h DELAY equ 500h myconnect PROTO :DWORD,:DWORD DNS_ERROR equ 465h myconnect proc hWnd,hMemo LOCAL s:SOCKET LOCAL memheap:DWORD LOCAL procheap:DWORD LOCAL sin:SOCKADDR_IN LOCAL handle:DWORD LOCAL bytes:DWORD LOCAL membuffer:DWORD LOCAL result:DWORD LOCAL str_len:DWORD invoke GetProcessHeap mov procheap,eax ;invoke HeapAlloc,eax,HEAP_ZERO_MEMORY,BUFFER_SIZE invoke VirtualAlloc,0h,BUFFER_SIZE,MEM_COMMIT,PAGE_READWRITE mov memheap,eax invoke HeapAlloc,procheap,HEAP_ZERO_MEMORY,4000h mov membuffer,eax invoke WSAStartup,101h,offset wsadata invoke socket,AF_INET,SOCK_STREAM,0h mov s,eax mov eax,memheap comment @ invoke gethostbyname,offset url .if eax==0h mov result,DNS_ERROR .data dns_error db "DNS Error!!!",0h .code invoke SendMessage,hMemo,WM_SETTEXT,sizeof dns_error,offset dns_error jmp endy .endif assume eax:ptr HOSTENT mov eax,[eax].h_addr assume eax:nothing mov eax,[eax] mov eax,[eax] @ .data proxy_addr db PROXY_ADDR,0h .code invoke inet_addr,offset proxy_addr mov sin.sin_addr.s_addr,eax invoke htons,PROXY_PORT mov sin.sin_port,ax mov sin.sin_family,AF_INET invoke connect,s,addr sin,sizeof(sockaddr_in) ;xor eax,eax .if eax==0h .data proxy_connect db 5h,1h,0h,0h .code invoke send,s,offset proxy_connect,3h,0h invoke recv,s,memheap,2h,0h .data site db SITE,0h proxy_command db 5h,1h,0h,3h,sizeof site-1h,SITE,0h,CONNECT_TO_PORT .code invoke send,s,offset proxy_command,sizeof proxy_command,0h invoke recv,s,memheap,10,0h .data helo_mes db "HELO ",SITE,CrLf,0h .code invoke send,s,offset helo_mes,sizeof helo_mes-1h,0h invoke recv,s,memheap,100h,0h toto: invoke closesocket,s invoke WSACleanup ;invoke lstrlen,memheap mov eax,str_len invoke SendMessage,hMemo,WM_SETTEXT,eax,memheap .endif invoke HeapFree,procheap,0h,membuffer ;invoke HeapFree,procheap,0h,memheap invoke VirtualFree,memheap,BUFFER_SIZE,MEM_DECOMMIT endy: mov eax,result ret myconnect endp Команда для TOR - открыть соединение: Код (Text): .data proxy_connect db 5h,1h,0h,0h .code invoke send,s,offset proxy_connect,3h,0h invoke recv,s,memheap,2h,0h Команда для TOR - соединиться с SITE (www.rambler.ru) и установить соединение с CONNECT_TO_PORT (25 - SMTP): Код (Text): .data site db SITE,0h proxy_command db 5h,1h,0h,3h,sizeof site-1h,SITE,0h,CONNECT_TO_PORT .code invoke send,s,offset proxy_command,sizeof proxy_command,0h invoke recv,s,memheap,10,0h Вот тут-то и происходит ошибка recv возвращает в memheap 5h,1h,0h,1h, а должно быть 5h,0h,0h,1h. А почему непонятно! Почему, например, из Англии не удаётся подключиться к 25-му порту rambler'а? Кстати, Socks5 для HTTP (80) работает: Код (Text): CrLf equ 0Dh,0Ah PROXY_PORT equ 9050 PROXY_ADDR equ "127.0.0.1" ;SITE equ "www.rambler.ru" SITE equ "www.cmyip.com" CONNECT_TO_PORT equ 80 url db SITE,0h BUFFER_SIZE equ 50000h RECV_SIZE equ 100h DELAY equ 500h myconnect PROTO :DWORD,:DWORD DNS_ERROR equ 465h myconnect proc hWnd,hMemo LOCAL s:SOCKET LOCAL memheap:DWORD LOCAL procheap:DWORD LOCAL sin:SOCKADDR_IN LOCAL handle:DWORD LOCAL bytes:DWORD LOCAL membuffer:DWORD LOCAL result:DWORD LOCAL str_len:DWORD invoke GetProcessHeap mov procheap,eax ;invoke HeapAlloc,eax,HEAP_ZERO_MEMORY,BUFFER_SIZE invoke VirtualAlloc,0h,BUFFER_SIZE,MEM_COMMIT,PAGE_READWRITE mov memheap,eax invoke HeapAlloc,procheap,HEAP_ZERO_MEMORY,4000h mov membuffer,eax invoke WSAStartup,101h,offset wsadata invoke socket,AF_INET,SOCK_STREAM,0h mov s,eax mov eax,memheap comment @ invoke gethostbyname,offset url .if eax==0h mov result,DNS_ERROR .data dns_error db "DNS Error!!!",0h .code invoke SendMessage,hMemo,WM_SETTEXT,sizeof dns_error,offset dns_error jmp endy .endif assume eax:ptr HOSTENT mov eax,[eax].h_addr assume eax:nothing mov eax,[eax] mov eax,[eax] @ .data proxy_addr db PROXY_ADDR,0h .code invoke inet_addr,offset proxy_addr mov sin.sin_addr.s_addr,eax invoke htons,PROXY_PORT mov sin.sin_port,ax mov sin.sin_family,AF_INET invoke connect,s,addr sin,sizeof(sockaddr_in) ;xor eax,eax .if eax==0h .data proxy_connect db 5h,1h,0h,0h .code invoke send,s,offset proxy_connect,3h,0h invoke recv,s,memheap,2h,0h .data site db SITE,0h proxy_command db 5h,1h,0h,3h,sizeof site-1h,SITE,0h,CONNECT_TO_PORT .code invoke send,s,offset proxy_command,sizeof proxy_command,0h invoke recv,s,memheap,10,0h ;jmp toto .data send_data db "GET / HTTP/1.1",CrLf db "Host: ",SITE,CrLf db "Accept: */*",CrLf db "Accept-Language: ru",CrLf db "Accept-Encoding: deflate",CrLf db "User-Agent: Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 8.1; SV1; .NET CLR 2.4.98777)",CrLf db "Connection: keep-alive",CrLf,CrLf db 0h .code invoke lstrlen,offset send_data invoke send,s,offset send_data,eax,0h ;invoke Sleep,DELAY mov edx,memheap mov eax,1h .while eax!=0h push edx invoke recv,s,edx,RECV_SIZE,0h pop edx add edx,eax .endw sub edx,memheap mov str_len,edx jmp toto invoke CreateFile,$CTA0("log.txt"),GENERIC_READ or GENERIC_WRITE,0h,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h mov handle,eax invoke WriteFile,handle,memheap,str_len,addr bytes,0h invoke CloseHandle,handle toto: invoke closesocket,s invoke WSACleanup ;invoke lstrlen,memheap mov eax,str_len invoke SendMessage,hMemo,WM_SETTEXT,eax,memheap .endif invoke HeapFree,procheap,0h,membuffer ;invoke HeapFree,procheap,0h,memheap invoke VirtualFree,memheap,BUFFER_SIZE,MEM_DECOMMIT endy: mov eax,result ret myconnect endp
Что-то очень странное происходит! Сканирую порты www.rambler.ru, www.yandex.ru и www.google.com - везде 25-й порт открыт! Но через TOR Socks5 не соединяется!!! Случайно попробывал соединиться с www.mail.rambler.ru - получил ответ: 220 mail.rambler.ru ESMTP ready Что за фигня? Получается, что не все SMTP-сервера отвечают? Или они как-то анализируют IP из какой страны и тем, кто не из России не отвечают?
Блин! Это что сам TOR блокирует такие соединения? А у меня ведь только что получалось соединиться с www.mail.rambler.ru по SMTP! 220 mail.rambler.ru ESMTP ready А на сколько это достоверно?
K10 А ты откуда это знаешь? Уже пытался? Что-то пока у меня не прёт... Вот что отвечает www.mail.rambler.ru: Код (Text): 250 mail.rambler.ru SMTP ready 530 5.7.1 Authentication required 500 5.5.1 Invalid command 500 5.5.1 Invalid command 500 5.5.1 Invalid command 221 2.0.0 Bye Может быть это действительно так? А что тогда делать? Искать Socks5 proxy-сервера в Google и пытаться через них соединиться с 25-м портом SMTP-сервера? Хотя не... не может быть, чтоб это было так! Я скачивал почтовую программку которая шлёт через Socks5 письма в частности через TOR, но правда с аутентификацией, и действительно шлёт, а я хочу через TOR Socks5, но без аутентификации! С www.mail.rambler.ru что-то не получается - видимо, он аутентификацию просит, может быть удасться другой SMTP-сервер найти...
Блин! Даже без Proxy не работает!!! Шлю SYN на www.rambler.ru - молчит! Шлю SYN на www.yandex.ru - молчит! Шлю SYN на www.mail.ru - молчит! Шлю SYN на www.mail.yandex.ru - молчит! Шлю SYN на www.mail.rambler.ru - просит аутентификацию! Код (Text): 250 mail.rambler.ru SMTP ready 530 5.7.1 Authentication required 500 5.5.1 Invalid command 500 5.5.1 Invalid command 500 5.5.1 Invalid command 500 5.5.1 Invalid command Короче, пока вывод такой: Раньше я спокойно слал почти анонимки (произвольный отправитель, но мой IP) через все вышеперечисленные... А теперь решил сделать полную анонимность (произвольный отправитель и случайный IP), но: TOR этому не препятствует никак! Дело всё в rambler, в yandex и mail - они позакрывали свои SMTP-порты! Вот пока такой вывод! Может быть удасться найти другие SMTP-сервера...
Номера портов поменяли? То есть можно попробывать посканить порты своими SYN пакетами на предмет ответа в соответствии с протоколом SMTP? Ну, тоже идея... Попробую как-нибудь...