ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

[Delphi]Исходник socks server
  #1  
Старый 15.01.2010, 15:58
xafon
Познающий
Регистрация: 02.12.2009
Сообщений: 37
Провел на форуме:
195146

Репутация: 15
По умолчанию [Delphi]Исходник socks server

вот не плохой socks server на Delphi:
PHP код:
unit SocksServer;

interface

uses Windows,Winsock;

var
wsaData TWSADATA;
proxy_port:Integer;
l_sock TSocket;
sock4 SOCKADDR_IN;
Client TSockAddr;
h1 THandle;

type TSOCKS4_REQUEST=record
ucVersion 
byte;
ucCommand byte;
wDestPort word;
dwDestIp dword;
end;
type TSOCKS5_REQUEST=record
ucVersion 
byte;
ucCommand byte;
ucRzv byte;
ucAtyp byte;
dwDestIp dword;
wDestPort word;
end;

procedure StartSocks;

implementation

procedure FlushRecvBufferUntil
(s:TSOCKET;condition:Char);
var
iReceiveRes integer;
cDummy char;
begin
repeat
iReceiveRes 
:= recv(scDummysizeof(cDummy), 0);
until NOT ((iReceiveRes<>SOCKET_ERROR) and (iReceiveRes<>0) and (cDummy<>condition));
end;

procedure SocksHandlerTreadProc(pParam:pointer); stdcall;
var
TSocket;
tunnelSock TSocket;
iConnectResult integer;
iReceiveRes integer;
iSocketsSet integer;
socks4Request TSOCKS4_REQUEST;
socks4Response TSOCKS4_REQUEST;
socks5Request TSOCKS5_REQUEST;
socks5Response TSOCKS5_REQUEST;
remoteAddr SOCKADDR_IN;
fds_read TFDset;//fd_set;
tv TTimeval;
cSocksVersion byte;
nMethods byte;
Mbuffer : array[0..255of byte;
iSelectResult integer;
loop integer;
ulVal u_long;
swapBuffer : array[0..4096*16-1of char;
iRecvResult integer;
begin
:= TSOCKET(pParam);
tunnelSock := 0;
loop := 0;
while 
loop=do
begin
inc
(loop);
iConnectResult := 0;
iReceiveRes := 0;
iSocketsSet := 0;
FD_ZERO(fds_read);
FD_SET(sfds_read);
tv.tv_sec := 30;
cSocksVersion := 0;
iSelectResult := select(0, @fds_readnilnil, @tv);
if (
iSelectResult=SOCKET_ERROR) or (not iSelectResult>0then break;
ulVal := 0;
ioctlsocket(sFIONBIO ulVal);
iReceiveRes := recv(scSocksVersion1MSG_PEEK);

if (
cSocksVersion=4then //Socks 4
begin
iReceiveRes 
:= recv(ssocks4Requestsizeof(socks4Request), 0);
if 
iReceiveRes=SOCKET_ERROR then break;
ulVal := 1;

ioctlsocket(sFIONBIO ulVal);
FlushRecvBufferUntil(s#0);
if socks4Request.ucCommand 1 then
begin
ulVal 
:= 0;
ioctlsocket(sFIONBIOulVal);
remoteAddr.sin_family := AF_INET;
move(socks4Request.dwDestIp,remoteAddr.sin_addr,si zeof(remoteAddr.sin_addr));
remoteAddr.sin_port := socks4Request.wDestPort;
tunnelSock := socket(AF_INETSOCK_STREAM0);
iConnectResult := connect(tunnelSockremoteAddrsizeof(remoteAddr));
if (
iConnectResult<>SOCKET_ERRORthen
begin 
// 1111111111
socks4Response.ucCommand := 90;
socks4Response.ucVersion := 0;
send(ssocks4Responsesizeof(socks4Response), 0);
end
else
break;
end
else
break;
end;

if (
cSocksVersion=5then //Socks 5
begin
iReceiveRes 
:= recv(s,nMethods,1,0);
if 
iReceiveRes=SOCKET_ERROR then break;

recv(s,Mbuffer,nMethods,0);
Mbuffer[0]:=5;
Mbuffer[1]:=0;
send(s,Mbuffer,2,0);

recv(ssocks5Requestsizeof(socks5Request), 0);

if 
iReceiveRes=SOCKET_ERROR then break;
ulVal := 1;
ioctlsocket(sFIONBIO ulVal);
FlushRecvBufferUntil(s#0);
if socks5Request.ucCommand 1 then
begin
ulVal 
:= 0;
ioctlsocket(sFIONBIOulVal);
remoteAddr.sin_family := AF_INET;
move(socks5Request.dwDestIp,remoteAddr.sin_addr,si zeof(remoteAddr.sin_addr));
remoteAddr.sin_port := socks5Request.wDestPort;
tunnelSock := socket(AF_INETSOCK_STREAM0);
iConnectResult := connect(tunnelSockremoteAddrsizeof(remoteAddr));
if (
iConnectResult<>SOCKET_ERRORthen
begin
socks5Response
.ucCommand := 90;
socks5Response.ucVersion := 0;
send(ssocks5Responsesizeof(socks5Response), 0);
end
else
break;
end
else
break;
end;

ulVal := 0;
ioctlsocket(tunnelSockFIONBIOulVal);
ioctlsocket(sFIONBIOulVal);
fillchar(swapBuffer,sizeof(swapBuffer),0);
tv.tv_sec := 2;
while 
true do
begin
sleep
(50);
FD_ZERO(fds_read);
FD_SET(sfds_read);
FD_SET(tunnelSockfds_read);
iSocketsSet := select(0, @fds_readnilnil, @tv); //if (iSocketsSet == SOCKET_ERROR) _leave;
if iSocketsSet 0 then
begin
if FD_ISSET(sfds_readthen
begin
iRecvResult 
:= recv(sswapBuffersizeof(swapBuffer), MSG_PEEK);
if (
iRecvResult=0)
then break
else 
iRecvResult := recv(sswapBuffersizeof(swapBuffer), 0);
if (
iRecvResult <> SOCKET_ERROR) and (iRecvResult 0)
then send(tunnelSockswapBufferiRecvResult0)
else BREAK;
end;

if (
FD_ISSET(tunnelSockfds_read)) then
begin
iRecvResult 
:= recv(tunnelSockswapBuffersizeof(swapBuffer), MSG_PEEK);
if 
iRecvResult 0
then 
break
else 
iRecvResult := recv(tunnelSockswapBuffersizeof(swapBuffer), 0);
if (
iRecvResult <> SOCKET_ERROR) and (iRecvResult 0)
then send(sswapBufferiRecvResult0)
else break;
end;
end;
end;
end;
closesocket(s);
closesocket(tunnelSock);
end;

procedure StartSocks;
var
size:Integer;
begin
proxy_port 
:= 1234;
WSAStartup(MAKEWORD(2,0), wsaData);
l_sock := socket(AF_INETSOCK_STREAMIPPROTO_TCP);
sock4.sin_family := AF_INET;
sock4.sin_port := htons(proxy_port);
sock4.sin_addr.s_addr := INADDR_ANY;
Size := SizeOf(Client);
if (
Bind(l_sock,sock4,SizeOf(sock4))=0) and (Listen(l_sock,$FF)=0then
while true do begin
sleep
(50);
CreateThread(nil,0,@SocksHandlerTreadProc,Pointeraccept(l_sock, @Client, @Size)),0,h1);
end;

end;
end
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Продажа Дедиков дешево! Xtrem Разное - Покупка, продажа, обмен 27 06.04.2010 14:13
Дедики real $XZIBIT$ Хостинг, Dedicated, VDS, Сервера - Покупка, продажа 3 24.04.2009 23:11



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


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




ANTICHAT.XYZ