Форум: "Сети";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];
ВнизSocks5 клиент, как состряпать запрос ? Найти похожие ветки
← →
AHTOLLlKA (2008-07-08 09:37) [0]инжекюсь в приложение, делаю хук на connect
и пытаюсь переправить программу через sock5 прокси сервер (в программе нет возможности указать чтобы она работала через прокси, вот и приходиться)
вобщем аналог фрикапа...
на сокс4 все сделал.. работало а на сокс5 не могу..
вот функция.. которой подменяю connectfunction hconnect(s:dword;sain:PSockAddrIn;slen:integer):integer;stdcall;
var
sh5:TSocks5Header;
sh50:TSocks5Header0;
uname:string;
s2in:sockaddr_in;
prxy_a:string;
prxy_p:word;
buff:array[0..16]of char;
i:dword;
begin
ZeroMemory(@sh50,sizeof(tsocks5header0));
CopyMemory(@s2in,sain,sizeof(s2in));
ZeroMemory(@sh5,sizeof(TSocks5Header));
prxy_p:=31337;
prxy_a:="127.0.0.1";
s2in.sin_addr.S_addr:=inet_addr(pchar(prxy_a));
s2in.sin_port:=htons(prxy_p);
UnHookCodeHook(@rd_c);
result:=connect(s,s2in,slen);
SetCodeHook(rd_c.Address,@hconnect,@rd_c);
i:=GetLastError;
if conn=true then
begin
conn:=false;
sh50.VER:=$05;
sh50.NMETHODS:=$01;
sh50.METHODS:=$00;
send(s,sh50,sizeof(tsocks5header0),0);
sleep(100);
recv(s,sh50,sizeof(tsocks5header0),0);
end;
if sh50.VER=$05 then
begin
sh5.VER:=$05;
sh5.CMD:=$01;
sh5.RSV:=$00;
sh5.ATYP:=$01;
sh5.dIP:=sain^.sin_addr;
sh5.wPort:=sain^.sin_port;
send(s,sh5,sizeof(tsocks5header),0);
sleep(100);
recv(s,sh5,sizeof(tsocks5header),0);
end;
end;
кто тыкнет в недочет ?? почему не работает ? вроде как в рфц указано сделал..
← →
Slym © (2008-07-08 11:34) [1]0. как делал перехват
1.sleep(100);
ПЛОХО, не надо спать - надо дело делать
2.не приведено описалово TSocks5Header и TSocks5Header0
← →
umbra © (2008-07-08 11:34) [2]
> TSocks5Header0
а что это за зверь? и какой ответ получаете от прокси?
← →
Slym © (2008-07-08 11:34) [3]добейся чтоб без перехватов работало, а уж потом инжекся в жертву
← →
Slym © (2008-07-08 11:54) [4]AHTOLLlKA (08.07.08 9:37)
send(s,sh5,sizeof(tsocks5header),0);
recv(s,sh5,sizeof(tsocks5header),0);
ответ может быть другой длинны: например BND.ADDR вернется $03-доменное_имя, а не IP...
т.е. выкачиваешь не весь пакет и огрызок достается приложению-жертве
← →
AHTOLLlKA (2008-07-08 12:10) [5]спасибо всем за ответы, привожу остальной код..
unit Soxify;
interface
uses
windows,
StrUtils,
splicing,
sysutils,
winsock;
type
TSocks5Header0 = packed record
VER: byte;
NMETHODS: byte;
METHODS: byte;
end;
TSocks5Header = packed record
VER: byte;
CMD: byte;
RSV: byte;
ATYP: byte;
dIP: in_addr;
wPort: word;
lbyte:byte;// <-- Null
end;
var
ppt: string;{proxyperthr}
rd_S,rd_R,rd_c:TFunctionRestoreData;
conn:boolean=true;
function hconnect(s:dword;sain:PSockAddrIn;slen:integer):integer;stdcall;
function set_curr_sock(sock:string):bool;
function go_soxify:bool;
function go_sniff:bool;
implementation
function str2int( S: PChar ): Integer;
var M : Integer;
begin
Result := 0;
if S = "" then Exit;
M := 1;
if S^ = "-" then
begin
M := -1;
Inc( S );
end
else
if S^ = "+" then
Inc( S );
while S^ in [ "0".."9" ] do
begin
Result := Result * 10 + Integer( S^ ) - Integer( "0" );
Inc( S );
end;
if M < 0 then
Result := -Result;
end;
function hconnect(s:dword;sain:PSockAddrIn;slen:integer):integer;stdcall;
var
sh5:TSocks5Header;
sh50:TSocks5Header0;
uname:string;
s2in:sockaddr_in;
prxy_a:string;
prxy_p:word;
buff:array[0..16]of char;
i:dword;
begin
ZeroMemory(@sh50,sizeof(tsocks5header0));
CopyMemory(@s2in,sain,sizeof(s2in));
ZeroMemory(@sh5,sizeof(TSocks5Header));
prxy_p:=31337;
prxy_a:="127.0.0.1";
s2in.sin_addr.S_addr:=inet_addr(pchar(prxy_a));
s2in.sin_port:=htons(prxy_p);
UnHookCodeHook(@rd_c);
result:=connect(s,s2in,slen);
SetCodeHook(rd_c.Address,@hconnect,@rd_c);
i:=GetLastError;
if conn=true then
begin
conn:=false;
sh50.VER:=$05;
sh50.NMETHODS:=$01;
sh50.METHODS:=$00;
send(s,sh50,sizeof(tsocks5header0),0);
sleep(100);
recv(s,sh50,sizeof(tsocks5header0),0);
end;
if sh50.VER=$05 then
begin
sh5.VER:=$05;
sh5.CMD:=$01;
sh5.RSV:=$00;
sh5.ATYP:=$01;
sh5.dIP:=sain^.sin_addr;
sh5.wPort:=sain^.sin_port;
send(s,sh5,sizeof(tsocks5header),0);
sleep(100);
recv(s,sh5,sizeof(tsocks5header),0);
end;
end;
function go_soxify:bool;
begin
splicing.SetProcedureHook(GetModuleHandle("wsock32"),"connect",@hconnect,@rd_c);
end;
function set_curr_sock(sock:string):bool;
begin ppt:=sock;
end;
function hsend(s:dword;buffer:pchar;blen:dword;flags:dword):integer;stdcall;
begin
sleep(100);
UnHookCodeHook(@rd_S);
result:=send(s,buffer^,blen,flags);
SetCodeHook(rd_S.Address,@hsend,@rd_s);
DeleteFile("blia");
end;
function hrecv(s:dword;buffer:pchar;blen:DWORD;flags:dword):integer;stdcall;
begin
UnHookCodeHook(@rd_r);
result:=recv(s,buffer^,blen,flags);
SetCodeHook(rd_r.Address,@hrecv,@rd_r);
end;
function go_sniff:bool;
begin
if not splicing.SetProcedureHook(GetModuleHandle("ws2_32"),"send",@hsend,@rd_S)then
if not splicing.SetProcedureHook(GetModuleHandle("wsock32.dll"),"send",@send,@rd_R) then
messagebeep(MB_ICONWARNING);
if not splicing.SetProcedureHook(GetModuleHandle("wsock32.dll"),"recv",@hrecv,@rd_R) then
if not splicing.SetProcedureHook(GetModuleHandle("ws2_32.dll"),"recv",@hrecv,@rd_R) then
messagebeep(MB_ICONWARNING);
end;
end.
это unit который собственно все и делает
← →
AHTOLLlKA (2008-07-08 12:14) [6]
> Slym ©
интересно, только не пойму вроде с сокс4 так работало.. сижу еще читаю рфц
← →
umbra © (2008-07-08 12:23) [7]
> send(s,sh50,sizeof(tsocks5header0),0);
> sleep(100);
> recv(s,sh50,sizeof(tsocks5header0),0);
неплохо бы проверять, какое значение вернула recv
>
> if sh50.VER=$05 then
а почему не проверяете второй байт? может там $FF?
И скажите все-таки, на какой стадии происходит затык?
← →
AHTOLLlKA (2008-07-08 12:36) [8]
> > if sh50.VER=$05 thenа почему не проверяете второй байт?
> может там $FF?if (sh50.VER=$05) and (sh50.NMETHODS=$00) then
мне так или иначе нужен конект без авторизации так что буду на 00 проверять
все проходит дальше..
> И скажите все-таки, на какой стадии происходит затык?
авторизация как я помян у меня происходт успешно.. вот дальнейший конект не работает, теость приложение не работает по сети
← →
Slym © (2008-07-08 12:49) [9]1. зачем Rcv/Snd перехватываешь?
2. Сплайсинг похоже через таблицу импорта... тогда зачем каждый раз UnHookCodeHook, утебя есть реальная точка входа в функцию
3. send/recv всетаки не процедуры, а функции - нет проверки на результаты вызова
4. sleep(100); - зочем?
5 вроде с сокс4 так работало - скорее всего и продолжает, но RFC не обязывает, и мы низнаем что за прокси и как там реализовано
← →
umbra © (2008-07-08 12:50) [10]
> TSocks5Header = packed record
> VER: byte;
> CMD: byte;
> RSV: byte;
> ATYP: byte;
> dIP: in_addr;
> wPort: word;
> lbyte:byte;// <-- Null
> end;
откуда lbyte? он вроде как не предусмотрен :)
← →
AHTOLLlKA (2008-07-08 12:53) [11]Slym © сиукни в аську 909021 пожалуста, если не сложно..
← →
AHTOLLlKA (2008-07-08 12:54) [12]
> откуда lbyte? он вроде как не предусмотрен :)
ога ога в 4ом предусмотрен, но если собирать хедер без него.. я хз почему не пашет.. может я наркаман ?7
← →
Slym © (2008-07-08 13:00) [13]AHTOLLlKA (08.07.08 12:53) [11]
забанен :(
AHTOLLlKA (08.07.08 12:54) [12]
может я наркаман
может проверять после каждого шага...
← →
AHTOLLlKA (2008-07-08 13:04) [14]
> AHTOLLlKA (08.07.08 12:53) [11]забанен :(
мм-м-м- ?
← →
AHTOLLlKA (2008-07-08 13:05) [15]
> 1. зачем Rcv/Snd перехватываешь?
а как еще можно то перехватить конект
← →
AHTOLLlKA (2008-07-08 13:07) [16]
> и мы низнаем что за прокси и как там реализовано
фрикап с этим прокси работает без проблем...
← →
AHTOLLlKA (2008-07-08 13:26) [17]если кто хочет подзаработать немношко $ велкам в асю 909021
← →
Slym © (2008-07-08 13:34) [18]вот накатал... но не проверял
function hconnect(s: TSocket; var name: TSockAddr; namelen: Integer):integer;stdcall;
type TConnectProc= function (s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
type
TSocks5AuthReq = packed record
VER,NMETHODS,METHODS: byte;
end;
TSocks5AuthResp = packed record
VER,METHOD: byte;
end;
const
Socks5AuthReqDef:TSocks5AuthReq=(VER:$5;NMETHODS:$1;METHODS:$0);
type
TSocks5Cmd = packed record
VER, CMD, RSV, ATYP: byte;
dIP: in_addr;
wPort: word;
end;
var
s2in:sockaddr_in;
AuthResp:TSocks5AuthResp;
Cmd:TSocks5Cmd;
begin
try
s2in.sin_family := PF_INET;
s2in.sin_addr.S_addr:=inet_addr(pchar("127.0.0.1"));
s2in.sin_port:=htons(31337);
result:=TConnectProc(rd_c)(s,s2in,SizeOf(s2in));
if result=SOCKET_ERROR then exit;
if send(s,(@Socks5AuthReqDef)^,sizeof(Socks5AuthReqDef),0)<>sizeof(Socks5AuthReqDef ) then
Abort;
if recv(s,AuthResp,sizeof(AuthResp),0)<>sizeof(AuthResp) then
Abort;
if (AuthResp.VER<>$05) or (AuthResp.METHOD=$00) then
Abort;
with Cmd do
begin
VER:=$05;
CMD:=$01;
RSV:=$00;
ATYP:=$01;
dIP:=name.sin_addr;
wPort:=name.sin_port;
end;
if send(s,(@Cmd)^,sizeof(Cmd),0)<>sizeof(Cmd) then
Abort;
if recv(s,(@Cmd)^,sizeof(Cmd),0)<>sizeof(Cmd) then
Abort;
if Cmd.CMD<>0 then
Abort;
except
shutdown(s,SD_BOTH);
closesocket(s);
result:=SOCKET_ERROR;
end;
end;
← →
AHTOLLlKA (2008-07-08 14:17) [19]пасиба, но как бэ код примерный мжно найти в
Source\Indy\IdSocks.pasprocedure TIdSocksInfo.MakeSocks5Connection(const AHost: string; const APort: Integer);
var
len, pos: Integer;
tempBuffer: array [0..255] of Byte;
ReqestedAuthMethod,
ServerAuthMethod: Byte;
tempPort: Word;
begin
// defined in rfc 1928
if Authentication = saNoAuthentication then begin
tempBuffer[2] := $0 // No authentication
end else begin
tempBuffer[2] := $2; // Username password authentication
end;
ReqestedAuthMethod := tempBuffer[2];
tempBuffer[0] := $5; // socks version
tempBuffer[1] := $1; // number of possible authentication methods
len := 2 + tempBuffer[1];
FIOHandler.Send(tempBuffer, len);
try
FIOHandler.Recv(tempBuffer, 2); // Socks server sends the selected authentication method
except
On E: Exception do begin
raise EIdSocksServerRespondError.Create(RSSocksServerRespondError);
end;
end;
ServerAuthMethod := tempBuffer[1];
if (ServerAuthMethod <> ReqestedAuthMethod) or (ServerAuthMethod = $FF) then begin
raise EIdSocksAuthMethodError.Create(RSSocksAuthMethodError);
end;
// Authentication process
if Authentication = saUsernamePassword then begin
tempBuffer[0] := 1; // version of subnegotiation
tempBuffer[1] := Length(Username);
pos := 2;
if Length(Username) > 0 then begin
Move(Username[1], tempBuffer[pos], Length(Username));
end;
pos := pos + Length(Username);
tempBuffer[pos] := Length(Password);
pos := pos + 1;
if Length(Password) > 0 then begin
Move(Password[1], tempBuffer[pos], Length(Password));
end;
pos := pos + Length(Password);
FIOHandler.Send(tempBuffer, pos); // send the username and password
try
FIOHandler.Recv(tempBuffer, 2); // Socks server sends the authentication status
except
On E: Exception do begin
raise EIdSocksServerRespondError.Create(RSSocksServerRespondError);
end;
end;
if tempBuffer[1] <> $0 then begin
raise EIdSocksAuthError.Create(RSSocksAuthError);
end;
end;
// Connection process
tempBuffer[0] := $5; // socks version
tempBuffer[1] := $1; // connect method
tempBuffer[2] := $0; // reserved
// for now we stick with domain name, must ask Chad how to detect
// address type
tempBuffer[3] := $3; // address type: IP V4 address: X"01" {Do not Localize}
// DOMAINNAME: X"03" {Do not Localize}
// IP V6 address: X"04" {Do not Localize}
// host name
tempBuffer[4] := Length(AHost);
pos := 5;
if Length(AHost) > 0 then begin
Move(AHost[1], tempBuffer[pos], Length(AHost));
end;
pos := pos + Length(AHost);
// port
tempPort := GStack.WSHToNs(APort);
Move(tempPort, tempBuffer[pos], SizeOf(tempPort));
pos := pos + 2;
FIOHandler.Send(tempBuffer, pos); // send the connection packet
try
FIOHandler.Recv(tempBuffer, 5); // Socks server replies on connect, this is the first part
except
raise EIdSocksServerRespondError.Create(RSSocksServerRespondError);
end;
case tempBuffer[1] of
0: ;// success, do nothing
1: raise EIdSocksServerGeneralError.Create(RSSocksServerGeneralError);
2: raise EIdSocksServerPermissionError.Create(RSSocksServerPermissionError);
3: raise EIdSocksServerNetUnreachableError.Create(RSSocksServerNetUnreachableError);
4: raise EIdSocksServerHostUnreachableError.Create(RSSocksServerHostUnreachableError);
5: raise EIdSocksServerConnectionRefusedError.Create(RSSocksServerConnectionRefusedError) ;
6: raise EIdSocksServerTTLExpiredError.Create(RSSocksServerTTLExpiredError);
7: raise EIdSocksServerCommandError.Create(RSSocksServerCommandError);
8: raise EIdSocksServerAddressError.Create(RSSocksServerAddressError);
else
raise EIdSocksUnknownError.Create(RSSocksUnknownError);
end;
// type of destination address is domain name
case tempBuffer[3] of
// IP V4
1: len := 4 + 2; // 4 is for address and 2 is for port length
// FQDN
3: len := tempBuffer[4] + 2; // 2 is for port length
// IP V6
4: len := 16 + 2; // 16 is for address and 2 is for port length
end;
try
// Socks server replies on connect, this is the seconf part
FIOHandler.Recv(tempBuffer[5], len-1);
except
raise EIdSocksServerRespondError.Create(RSSocksServerRespondError);
end;
end;
проглядел вроде по идее так же... хз
← →
AHTOLLlKA (2008-07-10 08:33) [20]уф.. добрался до компа..
вобщем делаю так потомif (sh50.VER=$05) and (sh50.NMETHODS=$00) then
begin
sh5.VER:=$05;
sh5.CMD:=$01;
sh5.RSV:=$00;
sh5.ATYP:=$01;
sh5.dIP:=sain.sin_addr;
sh5.wPort:=sain.sin_port;
send(s,sh5,sizeof(tsocks5header),0);
sleep(100);
recv(s,sh5,sizeof(tsocks5header),0);
if sh5.cmd=$00 then messagebox(0,"sh5.cmd=$00","",0);
if sh5.cmd=$01 then messagebox(0,"sh5.cmd=$01","",0);
if sh5.cmd=$02 then messagebox(0,"sh5.cmd=$02","",0);
if sh5.cmd=$03 then messagebox(0,"sh5.cmd=$03","",0);
if sh5.cmd=$04 then messagebox(0,"sh5.cmd=$04","",0);
if sh5.cmd=$05 then messagebox(0,"sh5.cmd=$05","",0);
if sh5.cmd=$06 then messagebox(0,"sh5.cmd=$06","",0);
if sh5.cmd=$07 then messagebox(0,"sh5.cmd=$07","",0);
if sh5.cmd=$08 then messagebox(0,"sh5.cmd=$08","",0);
if sh5.cmd=$09 then messagebox(0,"sh5.cmd=$09","",0);
end;
срабатывает $01
теость
o X"01" ошибка SOCKS-сервера
блин... как так =((
← →
Slym © (2008-07-10 10:50) [21]попробуй передать ip адрес как в [19] посте:
function hconnect(s: TSocket; var name: TSockAddr; namelen: Integer):integer;stdcall;
type TConnectProc= function (s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
type
TSocks5AuthReq = packed record
VER,NMETHODS,METHODS: byte;
end;
TSocks5AuthResp = packed record
VER,METHOD: byte;
end;
const
Socks5AuthReqDef:TSocks5AuthReq=(VER:$5;NMETHODS:$1;METHODS:$0);
var
s2in:sockaddr_in;
AuthResp:TSocks5AuthResp;
Cmd:array[0..255] of byte;
CmdLen:integer;
Host:string;
begin
try
s2in.sin_family := PF_INET;
s2in.sin_addr.S_addr:=inet_addr(pchar("127.0.0.1"));
s2in.sin_port:=htons(31337);
result:=TConnectProc(rd_c)(s,s2in,SizeOf(s2in));
if result=SOCKET_ERROR then exit;
if send(s,(@Socks5AuthReqDef)^,sizeof(Socks5AuthReqDef),0)<>sizeof(Socks5AuthReqDef ) then
Abort;
if recv(s,AuthResp,sizeof(AuthResp),0)<>sizeof(AuthResp) then
Abort;
if (AuthResp.VER<>$05) or (AuthResp.METHOD=$00) then
Abort;
Host:=inet_ntoa(name.sin_addr);
Cmd[0] := $5; // socks version
Cmd[1] := $1; // connect method
Cmd[2] := $0; // reserved
Cmd[3] := $3; // address type: IP V4 address: X"01" {Do not Localize}
Cmd[4] := Length(Host);
if Length(Host)>0 then
Move(Host[1], Cmd[5], Length(Host));
PWord(@Cmd[5+Cmd[4]]):=name.sin_port;
CmdLen:=5+Cmd[4]+SizeOf(Word);
if send(s,(@Cmd)^,sizeof(CmdLen),0)<>sizeof(CmdLen) then
Abort;
if recv(s,(@Cmd)^,5,0)<>sizeof(5) then
Abort;
if Cmd[1]<>0 then
Abort;
case Cmd[3] of
1: CmdLen := 4 + 2;
3: CmdLen := Cmd[4]+2;
4: CmdLen := 16 + 2;
end;
if recv(s,(@Cmd[5])^,CmdLen,0)<>CmdLen then
Abort;
except
shutdown(s,SD_BOTH);
closesocket(s);
result:=SOCKET_ERROR;
end;
end;
← →
umbra © (2008-07-10 10:58) [22]а логи сервера почитать? :)
← →
AHTOLLlKA (2008-07-10 10:59) [23]
result:=TConnectProc(rd_c)(s,s2in,SizeOf(s2in));
Invalid typecastPWord(@Cmd[5+Cmd[4]]):=name.sin_port;
Left side cannot be assegned to
← →
AHTOLLlKA (2008-07-10 11:51) [24]
> umbra © (10.07.08 10:58) [22]
> а логи сервера почитать? :)
эм.. сервер тож примитивный, щас попробую добавть логирование ;)
← →
Slym © (2008-07-11 04:58) [25]AHTOLLlKA (10.07.08 10:59) [23]
result:=TConnectProc(rd_c)(s,s2in,SizeOf(s2in));
Замени на свой способ вызова "реальной" функции
AHTOLLlKA (10.07.08 10:59) [23]
PWord(@Cmd[5+Cmd[4]]):=name.sin_port; Left side cannot be assegned to
PWord(@Cmd[5+Cmd[4]])^:=name.sin_port; а так?
или
Move(Host[1], @name.sin_port, SizeOf(Word));
← →
Slym © (2008-07-11 05:00) [26]Slym © (11.07.08 4:58) [25]
Move(Host[1], @name.sin_port, SizeOf(Word));
в "блокноте" писал... надо:
Move(name.sin_port, Cmd[5+Cmd[4]], SizeOf(Word));
← →
AHTOLLlKA (2008-07-11 09:21) [27]=( что то не помогает ((
теперь без ошибок.. но все равно не конект ((
← →
Slym © (2008-07-11 11:59) [28]Тогда брать портмап или снифер, натравливать FreeCap и потом анализировать "заранее верный" поток данных фрикапа
← →
Slym © (2008-07-11 12:01) [29]Slym © (11.07.08 11:59) [28]
либо ты недокациваешь/перекачиваешь ответ прокселя...case Cmd[3] of
1: CmdLen := 4 + 2;
3: CmdLen := Cmd[4]+2;
4: CmdLen := 16 + 2;
end;
if recv(s,(@Cmd[5])^,CmdLen,0)<>CmdLen then
Abort;
← →
AHTOLLlKA (2008-07-11 13:33) [30]отснифал..
проблема с пакетом..
авторизация правельная..
а вот это место ..sh5.VER:=$05;
sh5.CMD:=$01;
sh5.RSV:=$00;
sh5.ATYP:=$01;
sh5.dIP:=sain.sin_addr;
sh5.wPort:=sain.sin_port;
если конект через прокси.. то шлеться так
05 01 00 03 0D 6C 6F 67 69 6E 2E 69 63 71 2E 63 6F 6D 14 46
а если через мой запрос то так
05 01 00 01 40 0C C8 59 14 46 00
← →
AHTOLLlKA (2008-07-15 14:04) [31]Апну, немогу все еще разобраться, не хватает мне мозгов, никто ни чего не придумал ?
← →
Slym © (2008-07-16 08:52) [32]AHTOLLlKA (11.07.08 13:33) [30]
разница в:
1. типе - buf[3]: у тебя 1(IP), у людей 3(Domain Name)
2. после порта лишний #0
попробуй Slym © (10.07.08 10:50) [21]
и будет тебе конект login.icq.com:5190
← →
AHTOLLlKA (2008-07-17 13:10) [33]05 01 00 03 40 0C A1 B9 14 46
щас такой запрос.. все равно ничего ..
← →
Eraser © (2008-07-18 15:47) [34]> [0] AHTOLLlKA (08.07.08 09:37)
в Indy есть нужный компонент, посмотри как сделано и сделай так же.
← →
Slym © (2008-07-21 14:05) [35]1. он уже смотрел в инди...
AHTOLLlKA (17.07.08 13:10) [33]
05 01 00 03
и не будет :) он ждет строку а не упакованый в Int ip адрес
ты ему имя или адрес в виде строки отдай а не упакованый ip
Slym © (10.07.08 10:50) [21]
Host:=inet_ntoa(name.sin_addr);
Cmd[0] := $5; // socks version
Cmd[1] := $1; // connect method
Cmd[2] := $0; // reserved
Cmd[3] := $3; // address type: IP V4 address: X"01" {Do not Localize}
Cmd[4] := Length(Host);
if Length(Host)>0 then
Move(Host[1], Cmd[5], Length(Host));
PWord(@Cmd[5+Cmd[4]]):=name.sin_port;
CmdLen:=5+Cmd[4]+SizeOf(Word);
← →
имя (2009-03-15 12:46) [36]Удалено модератором
← →
имя (2009-03-15 12:49) [37]Удалено модератором
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.006 c