ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Очередной OpenSource от меня
  #1  
Старый 12.06.2007, 22:53
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию Очередной OpenSource от меня

На этот раз я выкладываю исходник весьма полезного модуля для работы с sock5 прокси.
Модуль очень маленький и не сильно увеличивает размер проги. т.к. юзает на прямую winsock.

Вот прога - демонстрация возможности модуля.
Короче суть проги:
Обычный телнет, но тока пашуший через socks5 прокси.
Основные характеристики:
1) консольная прога. вес в чистом виде 22,5 кила
2) работа как и с виндовым прокси, тока в параметрах еще указывается IP и порт прокси
3) поддержка DNS в указании адреса. (не прокси сервера)
4) нет авторизации. Но модуль предусматривает работу с авторизацией.
6) зависимость: windows,winsock.


Исходник проги:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
 windows,winsock,socksfunc;
var
mysocket:dword;
socks:socks_cfg;
thID:dword;
res:integer;
s:string;
x:integer;

function is_ip(s:string):boolean;
var
x:integer;
begin
result:=true;
for x:=1 to length(s) do
case s[x] of
'0'..'9','.':;
else result:=false;
end;
end;

procedure showhelp;
begin
writeln('SOCKS TELNET');
writeln('(C) SLESH (slesh-2000@yandex.ru) 2007');
writeln('Usage: SST SOCKS_IP SOCKS_PORT REMOTE_IP\REMOTE_HOST REMOTE_PORT');
writeln('Example: SST 127.0.0.1 1080 www.ya.ru 80');
halt;
end;

procedure reads;
var
y:integer;
readbuf:string;
begin
setlength(readbuf,255);
repeat
y:=recv(mysocket,readbuf[1],255,0);
write(copy(readbuf,1,y));
until y<=0;
halt;
end;

begin
s:=paramstr(1);
if s='' then showhelp;
if is_ip(s)=false then
begin
writeln('[-] SOCKS_IP ERROR');
exit;
end;
socks.SOCKS_IP:=s;
s:=paramstr(2);
if s='' then showhelp;
val(s,socks.SOCKS_PORT,x);
if x<>0 then
begin
writeln('[-] SOCKS_PORT ERROR');
exit;
end;
s:=paramstr(3);
if is_ip(s) then socks.REMOTE_IP:=s else socks.REMOTE_HOST:=s;
s:=paramstr(4);
if s='' then showhelp;
val(s,socks.REMOTE_PORT,x);
if x<>0 then
begin
writeln('[-] REMOTE_PORT ERROR');
exit;
end;
write('Connecting...');
res:=SOCKSConnect(socks,mysocket);
if res<>0 then begin
writeln('[-] Error: ',GetSOCKSErrorText(res));
exit;
end;
writeln('[+] Connect OK');
CreateThread(nil, 0, @reads, nil, 0, thID); // установка потока

repeat
readln(s);
s:=s+#13#10;
send(mysocket,s[1],length(s),0);
until 0=1;
end.
Исходник модуля для работы с socks5 (создавался пол года назад. поэтому слугка крив)
Иходник хоть и кривоват (много лишнего)
просто нет времяни переделывать его по новому, но всёже для обычного коннекта его вполне достаточно.

Код:
// Модуль для работы с SOCKS5 серверами
// В модуле реализована только одна функция - TCP CONNECT
// Так же поддержка авторизации
// Автор: SLESH (SLESH-2000@yandex.ru ICQ:266-334-734)
// Зависимости: winsock, sysutils
// Использование:
// GetSOCKSErrorText(err:integer):string; - возвращает описание кода ошибки
// SOCKSConnect(socks:socks_cfg; var sock:tsocket):integer; - функция подключения через прокси
// Параметры: Информация для подключения, сокет в который будет записан дискриптор подключения
// Возвращает код. Если 0 - ОК, Иначе ошибка - Описание через GetSOCKSErrorText
// Адрес сервера к которому нужно подключиться через SOCKS5 задается через IP-адрес или Host
// Особенности: нет необходимости создавать сокет, иничиализировать библиотеку сокетов,
// настраивать параметры подключения. Все это делает функция SOCKSConnect. при удачном
// выполнении этой функции переменная sock будет содержать дискриптор подключения.
// который можно будет использовать в функциях send и recv

unit SocksFunc;
interface
uses windows,winsock;
type
tsocks_query_method=record
 VER,LEN,MTD:byte;
end;
tsocks_reply_method=record
 VER,MTD:byte;
end;
tsocks_query=record
 VER,CMD,RSV,ATYP:byte;
 data:array[0..257] of byte;
end;
tsocks_reply=record
 VER,REP,RSV,ATYP:byte;
 data:array[0..257] of byte;
end;
socks_cfg=record
 SOCKS_IP:string;
 SOCKS_PORT:word;
 SOCKS_LOGIN:string;
 SOCKS_PASS:string;
 REMOTE_IP:string;
 REMOTE_HOST:string;
 REMOTE_PORT:word;
end;

function GetSOCKSErrorText(err:integer):string;
function SOCKSConnect(socks:socks_cfg; var sock:thandle):integer;
var
WSData:TWSAData;
implementation

function strtoint(s:string):integer;
var
i:integer;
begin
val(s,i,i);
result:=i;
end;

function GetSOCKSErrorText(err:integer):string;
begin
case err of
$1:result:='SOCKS-server error';
$2:result:='Connect forbidden';
$3:result:='Network is not accessible';
$4:result:='Host is not accessible';
$5:result:='Refusal in connection';
$6:result:='TTL timeout';
$7:result:='Command not support';
$8:result:='Address type not support';
-1,$9..$FF:result:='Unknown error';
-2:result:='Socks-server RFC error';
-3:result:='Socks-server requires authorized';
-4:result:='Login or Password incorrect';
-5:result:='Connect to SOCKS-proxy error';
-6:result:='Create socket error';
end;
end;

function SOCKSConnect(socks:socks_cfg; var sock:thandle):integer;
var
sqm:tsocks_query_method;
srm:tsocks_reply_method;
sq:tsocks_query;
sr:tsocks_reply;
sp:array[0..512] of char;
s:string;
auth:boolean;
x:integer;
ca:sockaddr_in;

begin
sock:=socket(AF_INET, SOCK_STREAM, 0);
if sock=windows.ERROR_INVALID_HANDLE then begin
result:=-6;
exit;
end;
ca.sin_family:=AF_INET;
ca.sin_port:=htons(socks.SOCKS_PORT);
ca.sin_addr.s_addr:=inet_addr(Pansichar(socks.SOCKS_IP));
if connect(sock,ca,sizeof(ca))=-1 then begin
result:=-5;
closesocket(sock);
exit;
end;

if (socks.SOCKS_LOGIN<>'') and (socks.SOCKS_PASS<>'') then auth:=true else auth:=false;
result:=-1;
sqm.VER:=$05;
sqm.LEN:=$01;
if auth=true then sqm.MTD:=$2 else sqm.MTD:=$00;
send(sock,sqm,3,0);
recv(sock,srm,2,0);

if srm.VER<>$05 then
 begin
 result:=-2;
 exit;
 end;
if auth=true then
 begin
  if srm.MTD<>$2 then
   begin
    result:=-3;
    exit;
   end;
  end else
  begin
   if srm.MTD<>$0 then
    begin
     result:=-3;
     exit;
    end;
  end;

if auth=true then
 begin
  s:=#01+chr(length(socks.SOCKS_LOGIN))+socks.SOCKS_LOGIN+chr(length(socks.SOCKS_PASS))+socks.SOCKS_PASS;
  for x:=0 to length(s)-1 do sp[x]:=s[x+1];
  send(sock,sp,length(s),0);
  recv(sock,srm,sizeof(srm),0);
  if srm.VER<>$01 then
   begin
    result:=-2;
    exit;
   end;
  if srm.MTD<>00 then
   begin
    result:=-4;
    exit;
   end;
 end;
sq.VER:=$05;
sq.CMD:=$01;
sq.RSV:=$00;
if socks.REMOTE_IP<>'' then begin
sq.ATYP:=$01;
s:=socks.REMOTE_IP;
sq.data[0]:=strtoint(copy(s,1,pos('.',s)-1));
delete(s,1,pos('.',s));
sq.data[1]:=strtoint(copy(s,1,pos('.',s)-1));
delete(s,1,pos('.',s));
sq.data[2]:=strtoint(copy(s,1,pos('.',s)-1));
delete(s,1,pos('.',s));
sq.data[3]:=strtoint(s);
sq.data[4]:=socks.REMOTE_PORT div 256;
sq.data[5]:=socks.REMOTE_PORT-sq.data[4]*256;
send(sock,sq,10,0);
end;
if socks.REMOTE_HOST<>'' then begin
sq.ATYP:=$03;
sq.data[0]:=length(socks.REMOTE_HOST);
for x:=1 to length(socks.REMOTE_HOST) do sq.data[x]:=ord(socks.REMOTE_HOST[x]);
sq.data[length(socks.REMOTE_HOST)+1]:=socks.REMOTE_PORT div 256;
sq.data[length(socks.REMOTE_HOST)+2]:=socks.REMOTE_PORT-sq.data[length(socks.REMOTE_HOST)+1]*256;
send(sock,sq,4+length(socks.REMOTE_HOST)+1+2,0);
end;
recv(sock,sr,sizeof(sr),0);
if sr.VER<>$05 then
 begin
  result:=-2;
  exit;
 end;
result:=sr.REP;

end;


begin
if WSAStartup($202, WSData)=-1 then begin
writeln('[-] Error: WSAStartup');
exit;
end;
end.

Последний раз редактировалось slesh; 12.06.2007 в 23:35.. Причина: Изменил исходник
 
Ответить с цитированием

  #2  
Старый 12.06.2007, 23:03
nEsJs
Новичок
Регистрация: 03.02.2006
Сообщений: 19
Провел на форуме:
118331

Репутация: 19
По умолчанию

FreeCap/SocksCap отмениле? =\\
 
Ответить с цитированием

  #3  
Старый 12.06.2007, 23:06
Piflit
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме:
5128756

Репутация: 2032


Отправить сообщение для Piflit с помощью ICQ
По умолчанию

Цитата:
Сообщение от nEsJs  
FreeCap/SocksCap отмениле? =\\
а ты можешь найти их сорцы?)
 
Ответить с цитированием

  #4  
Старый 12.06.2007, 23:12
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Вот изменил код. шас вообще маханький стал.
Вообще ценность тут представляет тока модуль для работы с соксами.
Его запросто можно заюзать при написании любой проги требующей работы через прокси. При этом размер проги будет минимальный при юзанье его.
т.к. всё пашет напрямую через winsock.

Последний раз редактировалось slesh; 12.06.2007 в 23:14..
 
Ответить с цитированием

  #5  
Старый 12.06.2007, 23:22
NetMan
Участник форума
Регистрация: 09.02.2004
Сообщений: 122
Провел на форуме:
1089794

Репутация: 134
По умолчанию

имхо, лучше юзать FreeCap/SocksCap...
 
Ответить с цитированием

  #6  
Старый 12.06.2007, 23:29
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

2 NetMan нуну.
А если тебе захочется написать какойнить накрутчик или брутфорс многопоточный,
ты его тоже будешь запускать через фрикап? и какмиже образом буду меняться прокси.

Тут главное модуль, а не сама прога. ПРога - это демонстрация возможности модуля!
 
Ответить с цитированием

  #7  
Старый 12.06.2007, 23:48
The_HuliGun
Участник форума
Регистрация: 19.05.2007
Сообщений: 228
Провел на форуме:
4325663

Репутация: 240
Отправить сообщение для The_HuliGun с помощью ICQ
По умолчанию

Цитата:
а ты можешь найти их сорцы?)
FreeCap ето Open Source проект вот тебе сорцы
 
Ответить с цитированием

  #8  
Старый 12.06.2007, 23:54
qBiN
Постоянный
Регистрация: 20.01.2005
Сообщений: 899
Провел на форуме:
1535446

Репутация: 182


Отправить сообщение для qBiN с помощью ICQ
По умолчанию

Гык,все что не могут рфк почитать и винсоком пользоваться?!
да и я думаю для перла и так все написано,а тут еще зависимость виндовс winsock1 есть почти во всех системах...
Стоит подумать использовать ли этот модуль?!
 
Ответить с цитированием

  #9  
Старый 13.06.2007, 00:04
Piflit
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме:
5128756

Репутация: 2032


Отправить сообщение для Piflit с помощью ICQ
По умолчанию

Цитата:
Сообщение от The_HuliGun  
FreeCap ето Open Source проект вот тебе сорцы
круто!
 
Ответить с цитированием

  #10  
Старый 13.06.2007, 22:00
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

2 qBiN. Ну тогда если так рассуждать, то вообще нах нам нужны VCL и KOL? Если любой может прочитать MSDN и написать на чистом API. И вообще одного прочтения RFC многим будет мало.
А юзать INDYйсткий компонент это уже напряг.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Письма девочек-подростков в журнал "Yes!" Lolik Болталка 43 03.03.2009 22:43
Юмор: Кто сказал что у админов халявная работа? silveran Болталка 7 21.07.2007 02:37
Про нас, про мужчин! SladerNon Болталка 27 21.02.2007 16:44



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ