Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];

Вниз

Socks5 клиент, как состряпать запрос ?   Найти похожие ветки 

 
AHTOLLlKA   (2008-07-08 09:37) [0]

инжекюсь в приложение, делаю хук на connect

и пытаюсь переправить программу через sock5 прокси сервер (в программе нет возможности указать чтобы она работала через прокси, вот и приходиться)
вобщем аналог фрикапа...
на сокс4 все сделал.. работало а на сокс5 не могу..
вот функция.. которой подменяю connect

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;


кто тыкнет в недочет ?? почему не работает ? вроде как в рфц указано сделал..


 
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.pas

procedure 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 typecast

PWord(@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
15-1294837507
AlexDn
2011-01-12 16:05
2011.04.24
Гугл кеширование?


15-1293095836
Павел Калугин
2010-12-23 12:17
2011.04.24
Встретим новый год в Нижнем Новгороде?


2-1295426993
Евгений07
2011-01-19 11:49
2011.04.24
как обеспечить доступ к данным между родительскими формами


15-1294926003
12
2011-01-13 16:40
2011.04.24
EhLib v3.6. Нормально работает?


15-1294323902
Rok
2011-01-06 17:25
2011.04.24
Выбор технологии кросс-платформенного приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский