Вверх ↑
Ответов: 2059
Рейтинг: 132
#1: 2017-12-26 18:33:58 ЛС | профиль | цитата
Подставил, но все равно не работает.

Там дохрена, чего надо править!
было писал(а):
if SpecialBind
then addr.sin_addr.S_addr:=inet_addr(Pchar(IP)) //Биндим на указанный IP
else addr.sin_addr.S_addr := LongInt(PLongInt(host.h_addr_list^)^); //Автоопределение IP IP

стало писал(а):

if 0 = THI_Event(ip) then
then addr.sin_addr.S_addr:=inet_addr(Pchar(IP)) //Биндим на указанный IP
else addr.sin_addr.S_addr := LongInt(PLongInt(host.h_addr_list^)^); //Автоопределение IP
Сам то понял чего сделал?! Три ошибки в одной строчке!!!
1. Если в условии читаешь верхнюю точку, то не надо уже трогать SpecialBind:=true\false
2. На эту точку надо подавать 0, или 1, а не IP!
3. Вот что надо if 0 = ToIntegerEvent(IP) - название точки наверное другое надо, например ToIntegerEvent(SpecialBind) - не суть, а у тебя что? - if 0 = THI_Event(ip) then - что это означает?!
4. Не надо лишний then ставить на этой строке, так как он уже есть на следующей!
5. А верхнюю точку Пушкин пропишет?
public
Param1: THI_Event;
procedure get(var _Data:TData; Index:word);

Надо понимать, что делаешь, а не слепо копировать что в посте написано. Подробно в посте весь листинг не напишешь.
Наверное надо разобраться в IC, как работает, а потом на курок жать.
Это заготовка для твоих целей а не конечный продукт! Ручками надо до ума доводить!
Из этого IC надо посмотреть, как нужные функции сделаны и сделать всё заново!
Дальше сам! Потому, как Socks5, для меня, предмет тёмный и познанию не подлежит!

Add(MainForm,16089989,189,154)
{
}
Add(InlineCode,15441213,336,154)
{
WorkPoints=#3:get|
DataPoints=#6:Param1|2:IP|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Share,Debug,Windows, Winsock;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|21: Param1: THI_Event;|17: IP: THI_Event;|46: procedure get(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|0:|4: VAR|21: IsAuth : Boolean;|20: Username : string;|20: Password : string;|20: IP : string;|21: Port : integer;|21: i : integer;|21: bool : boolean;|23: SpecialBind: boolean;|0:|17: WSA : TWSAData;|23: servsocket : TSocket;|21: addr : sockaddr_in;|41: hostname : array [0..MAX_PATH] of Char;|18: host : PHostEnt;|0:|4:type|26: TSocks5AuthData = record|15: ver : Char;|17: nmthd : Char;|16: mthd : Char;|6: end;|0:|4:type|25: TSocks5Request = record|15: ver : Char;|17: code : record|19: case Integer of|24: 0 : (cmd : Char;);|24: 1 : (rep : Char;);|8: end;|15: rsv : Char;|16: atyp : Char;|34: addr : array [0..255] of Char;|4:end;|0:|5:const|32: USER_PASS_AUTH_VERSION = #$01;|32: USER_PASS_AUTH_SUCCESS = #$00;|32: USER_PASS_AUTH_FAILED = #$ff;|0:|5:const|24: SOCKS5_VERSION = #$05;|33: SOCKS5_METHOD_AUTH_NONE = #$00;|33: SOCKS5_METHOD_USER_PASS = #$02;|42: SOCKS5_METHOD_AUTH_NOT_SUPPORTED = #$ff;|28: SOCKS5_CMD_CONNECT = #$01;|20: SOCKS5_RSV = #$00;|26: SOCKS5_ATYP_IPv4 = #$01;|33: SOCKS5_ATYP_DOMAIN_NAME = #$03;|23: SOCKS5_REP_OK = #$00;|33: SOCKS5_REP_SERVER_ERROR = #$01;|32: SOCKS5_REP_HOST_FAILED = #$04;|38: SOCKS5_REP_CMD_NOT_SUPPORTED = #$07;|39: SOCKS5_REP_ADDR_NOT_SUPPORTED = #$08;|2: |0:|60:procedure SendErrorCode(sock : TSocket; ErrorCode : String);|5:begin|49: send(sock, ErrorCode[1], Length(ErrorCode), 0);|20: CloseSocket(sock);|4:end;|0:|50:procedure DataTransfer(clsock,trgtsock : TSocket);|3:var|33: buff : array [0..1023] of Char;|16: tv : TTimeVal;|15: fds : TFDSet;|17: brcv : Integer;|5:begin|15: while True do|7: begin|17: FD_ZERO(fds);|24: FD_SET(clsock, fds);|26: FD_SET(trgtsock, fds);|20: tv.tv_sec := 15;|20: tv.tv_usec := 0;|46: if Select(0, @fds, nil, nil, @tv) > 0 then|9: begin|35: if FD_ISSET(clsock, fds) then|11: begin|40: ZeroMemory(@buff, SizeOf(buff));|52: brcv := recv(clsock, buff, SizeOf(buff), 0);|24: if brcv > 0 then|39: send(trgtsock, buff, brcv, 0)|12: else|16: Break;|10: end;|37: if FD_ISSET(trgtsock, fds) then|11: begin|40: ZeroMemory(@buff, SizeOf(buff));|54: brcv := recv(trgtsock, buff, SizeOf(buff), 0);|24: if brcv > 0 then|37: send(clsock, buff, brcv, 0)|12: else|16: Break;|10: end;|8: end;|6: end;|4:end;|0:|81:function Socks5AcceptRequest(clsock : TSocket; var trgtsock : TSocket) : Boolean;|3:var|40: cl_request,srv_reply : TSocks5Request;|33: buff : array [0..1023] of Char;|35: dst_addr,self_addr : sockaddr_in;|37: len_self_addr,len_domain : Integer;|18: Host : PHostEnt;|17: brcv : Integer;|15: err : String;|5:begin|18: Result := False;|21: SetLength(err, 10);|34: ZeroMemory(@buff, SizeOf(buff));|46: brcv := recv(clsock, buff, SizeOf(buff), 0);|50: ZeroMemory(@cl_request, SizeOf(TSocks5Request));|39: CopyMemory(@cl_request, @buff, brcv);|49: ZeroMemory(@srv_reply, SizeOf(TSocks5Request));|34: srv_reply.ver := SOCKS5_VERSION;|30: srv_reply.rsv := SOCKS5_RSV;|87: if ((cl_request.ver = SOCKS5_VERSION) and (cl_request.rsv = SOCKS5_RSV)) = False then|7: begin|50: srv_reply.code.rep := SOCKS5_REP_SERVER_ERROR;|40: CopyMemory(@err[1], @srv_reply, 10);|31: SendErrorCode(clsock, err);|9: Exit;|6: end;|29: case cl_request.code.cmd of|25: SOCKS5_CMD_CONNECT : ;|6: else|55: srv_reply.code.rep := SOCKS5_REP_CMD_NOT_SUPPORTED;|40: CopyMemory(@err[1], @srv_reply, 10);|31: SendErrorCode(clsock, err);|9: Exit;|6: end;|45: ZeroMemory(@dst_addr, SizeOf(sockaddr_in));|33: dst_addr.sin_family := AF_INET;|25: case cl_request.atyp of|21: SOCKS5_ATYP_IPv4 :|10: begin|59: dst_addr.sin_addr.S_un_b.s_b1 := cl_request.addr[0];|59: dst_addr.sin_addr.S_un_b.s_b2 := cl_request.addr[1];|59: dst_addr.sin_addr.S_un_b.s_b3 := cl_request.addr[2];|59: dst_addr.sin_addr.S_un_b.s_b4 := cl_request.addr[3];|89: dst_addr.sin_port := MakeWord(Byte(cl_request.addr[4]), Byte(cl_request.addr[5]));|9: end;|28: SOCKS5_ATYP_DOMAIN_NAME :|10: begin|46: len_domain := Byte(cl_request.addr[0]);|74: Host := GetHostByName(PChar(Copy(cl_request.addr, 2, len_domain)));|25: if Host = nil then|12: begin|55: srv_reply.code.rep := SOCKS5_REP_SERVER_ERROR;|45: CopyMemory(@err[1], @srv_reply, 10);|36: SendErrorCode(clsock, err);|14: Exit;|11: end;|74: dst_addr.sin_addr.S_addr := LongInt(PLongInt(Host^.h_addr_list^)^);|115: dst_addr.sin_port := MakeWord(Byte(cl_request.addr[len_domain + 1]), Byte(cl_request.addr[len_domain + 2]));|9: end;|6: else|56: srv_reply.code.rep := SOCKS5_REP_ADDR_NOT_SUPPORTED;|40: CopyMemory(@err[1], @srv_reply, 10);|31: SendErrorCode(clsock, err);|9: Exit;|6: end;|73: if Connect(trgtsock, dst_addr, SizeOf(sockaddr_in)) = SOCKET_ERROR then|7: begin|49: srv_reply.code.rep := SOCKS5_REP_HOST_FAILED;|40: CopyMemory(@err[1], @srv_reply, 10);|31: SendErrorCode(clsock, err);|26: CloseSocket(trgtsock);|9: Exit;|6: end;|46: ZeroMemory(@self_addr, SizeOf(sockaddr_in));|39: len_self_addr := SizeOf(sockaddr_in);|50: GetSockName(trgtsock, self_addr, len_self_addr);|37: srv_reply.atyp := SOCKS5_ATYP_IPv4;|54: srv_reply.addr[0] := self_addr.sin_addr.S_un_b.s_b1;|54: srv_reply.addr[1] := self_addr.sin_addr.S_un_b.s_b2;|54: srv_reply.addr[2] := self_addr.sin_addr.S_un_b.s_b3;|54: srv_reply.addr[3] := self_addr.sin_addr.S_un_b.s_b4;|57: srv_reply.addr[4] := Chr(self_addr.sin_port and $00ff);|53: srv_reply.addr[5] := Chr(self_addr.sin_port shr 8);|34: ZeroMemory(@buff, SizeOf(buff));|36: CopyMemory(@buff, @srv_reply, 10);|28: send(clsock, buff, 10, 0);|17: Result := True;|4:end;|0:|50:function Socks5DoAuth(clsock : TSocket) : Boolean;|3:var|33: buff : array [0..1023] of Char;|23: _USER,_PASS : String;|22: index,len : Integer;|15: err : String;|5:begin|18: Result := False;|34: ZeroMemory(@buff, SizeOf(buff));|38: recv(clsock, buff, SizeOf(buff), 0);|43: if buff[0] <> USER_PASS_AUTH_VERSION then|7: begin|58: err := USER_PASS_AUTH_VERSION + USER_PASS_AUTH_FAILED;|31: SendErrorCode(clsock, err);|9: Exit;|6: end;|13: index := 2;|22: len := Ord(buff[1]);|24: SetLength(_USER, len);|43: CopyMemory(@_USER[1], @buff[index], len);|19: index := len + 3;|28: len := Ord(buff[len + 2]);|24: SetLength(_PASS, len);|43: CopyMemory(@_PASS[1], @buff[index], len);|61: if ((_USER = Username) and (_PASS = Password)) = False then|7: begin|58: err := USER_PASS_AUTH_VERSION + USER_PASS_AUTH_FAILED;|31: SendErrorCode(clsock, err);|9: Exit;|6: end;|34: ZeroMemory(@buff, SizeOf(buff));|36: buff[0] := USER_PASS_AUTH_VERSION;|36: buff[1] := USER_PASS_AUTH_SUCCESS;|27: send(clsock, buff, 2, 0);|17: Result := True;|4:end;|0:|54:function Socks5AuthVerify(clsock : TSocket) : Boolean;|3:var|30: auth_data : TSocks5AuthData;|33: buff : array [0..1023] of Char;|15: err : String;|5:begin|18: Result := False;|12: err := '';|34: ZeroMemory(@buff, SizeOf(buff));|38: recv(clsock, buff, SizeOf(buff), 0);|35: CopyMemory(@auth_data, @buff, 3);|81: if ((auth_data.ver = SOCKS5_VERSION) and (auth_data.nmthd = #$01)) = False then|7: begin|61: err := SOCKS5_VERSION + SOCKS5_METHOD_AUTH_NOT_SUPPORTED;|31: SendErrorCode(clsock, err);|9: Exit;|6: end;|24: case auth_data.mthd of|28: SOCKS5_METHOD_AUTH_NONE :|10: begin|39: ZeroMemory(@buff, SizeOf(buff));|29: if IsAuth = False then|12: begin|35: buff[0] := SOCKS5_VERSION;|44: buff[1] := SOCKS5_METHOD_AUTH_NONE;|34: send(clsock, buff, 2, 0);|10: end|17: else begin|66: err := SOCKS5_VERSION + SOCKS5_METHOD_AUTH_NOT_SUPPORTED;|36: SendErrorCode(clsock, err);|14: Exit;|11: end;|9: end;|28: SOCKS5_METHOD_USER_PASS :|10: begin|21: if IsAuth then|12: begin|41: ZeroMemory(@buff, SizeOf(buff));|35: buff[0] := SOCKS5_VERSION;|44: buff[1] := SOCKS5_METHOD_USER_PASS;|34: send(clsock, buff, 2, 0);|45: if Socks5DoAuth(clsock) = False then|16: Exit;|10: end|17: else begin|66: err := SOCKS5_VERSION + SOCKS5_METHOD_AUTH_NOT_SUPPORTED;|36: SendErrorCode(clsock, err);|14: Exit;|11: end;|9: end;|6: else|61: err := SOCKS5_VERSION + SOCKS5_METHOD_AUTH_NOT_SUPPORTED;|31: SendErrorCode(clsock, err);|9: Exit;|6: end;|17: Result := True;|4:end;|0:|57:function Socks5Tunnel(pParam : Pointer) : DWORD; stdcall;|3:var|21: trgtsock : TSocket;|19: clsock : TSocket;|5:begin|14: Result := 0;|28: clsock := TSocket(pParam);|56: trgtsock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);|34: if Socks5AuthVerify(clsock) then|49: if Socks5AcceptRequest(clsock, trgtsock) then|9: begin|37: DataTransfer(clsock, trgtsock);|28: CloseSocket(trgtsock);|26: CloseSocket(clsock);|8: end;|4:end;|0:|43:procedure Socks5Server(servsock : TSocket);|3:var|19: clsock : TSocket;|21: addr : sockaddr_in;|20: addrlen : Integer;|17: TId : Cardinal;|5:begin|15: while True do|7: begin|48: clsock := accept(servsock, @addr, @addrlen);|65: CreateThread(nil, 0, @Socks5Tunnel, Pointer(clsock), 0, TId);|6: end;|24: CloseSocket(servsock);|4:end;|1:{|23:procedure PrintUSAGE();|5:begin|21: WriteLn(' USAGE:');|121: WriteLn(' '+ExtractFileName(ParamStr(0))+' [--port <port>] [--login <login>] [--pass <password>] [--bind <IP>]'#13#10);|32: Writeln(' Use For');|53: Writeln(' --port Set special port for socks5');|44: WriteLn(' --login Set login for Auth');|47: WriteLn(' --pass Set password for Auth');|56: WriteLn(' --bind Set your special IP for listen');|104: WriteLn(#13#10' Example: '+ExtractFileName(ParamStr(0))+' --port 1080 --login admin --pass PaSsWoRd');|4:end;|1:}|55:procedure THiAsmClass.get(var _Data:TData; Index:word);|5:begin|47:{ WriteLn(' Welcome to FOS Black Hat Socks5');|32: WriteLn(' Version 1.1'#13#10);|41: if ((ParamCount=0)OR(ParamStr(1)='/?'))|40: then begin PrintUSAGE; exit; end; }|7: i:=1;|16: IsAuth:=false;|11: Port:=83;|19: Username:='user';|23: Password:='password';|20: SpecialBind:=true;|27: { While (i<=ParamCount) do|7: begin|16: bool:=false;|142: if ParamStr(i)='--port' then begin try Port:=StrToInt(ParamStr(i+1)); except WriteLn(' ERROR: CANT INIT VAR PORT!'); end; bool:=true; end;|81: if ParamStr(i)='--login' then begin Username:=ParamStr(i+1); bool:=true; end;|80: if ParamStr(i)='--pass' then begin Password:=ParamStr(i+1); bool:=true; end;|93: if ParamStr(i)='--bind' then begin IP:=ParamStr(i+1); SpecialBind:=true; bool:=True; end;|70: if ParamStr(i)='--about' then WriteLn(' Created by Sicness for ');|23: if bool then i:=i+2|18: else i:=i+1;|68: //TODO: Доделать проверку парамертров, а то может громко рухнуть|8: end; }|0:|0:|1:{|54: Writeln(' |=========|============================');|42: Writeln(' |Port | '+IntToStr(Port));|36: Writeln(' |Login | '+Username);|36: Writeln(' |Password | '+Password);|81: Write(' |SpecBind | '); if SpecialBind then WriteLn(IP) else WriteLn(' False');|64: Writeln(' |=========|============================'#13#10); }|0:|36: if WSAStartup($101, WSA) <> 0 then|7: begin|41: showmessage('ERROR: Winsock failed');|9: Exit;|6: end;|58: servsocket := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);|37: if servsocket = INVALID_SOCKET then|7: begin|49: showmessage('ERROR: Socket creation failed');|9: Exit;|6: end;|42: ZeroMemory(@hostname, SizeOf(hostname));|43: GetHostName(@hostname, SizeOf(hostname));|35: host := GetHostByName(@hostname);|20: if Host = nil then|7: begin|39: showmessage('Hostname failed ...');|9: Exit;|6: end;|41: ZeroMemory(@addr, SizeOf(sockaddr_in));|29: addr.sin_family := AF_INET;|31: addr.sin_port := htons(Port);|33: if 0 = ToIntegerEvent(Param1) |94: then addr.sin_addr.S_addr:=inet_addr(Pchar(ToStringEvent(IP))) //Биндим на указанный IP|92: else addr.sin_addr.S_addr := LongInt(PLongInt(host.h_addr_list^)^); //Автоопределение IP|68: if Bind(servsocket, addr, SizeOf(sockaddr_in)) = SOCKET_ERROR then|7: begin|31: showmessage('Bind failed');|9: Exit;|6: end;|47: if Listen(servsocket, 60) = SOCKET_ERROR then|7: begin|31: showmessage('List failed');|9: Exit;|5: end|6: else|109: showmessage('Socks started on [' + inet_ntoa(addr.sin_addr) + ':' + Int2Str(ntohs(addr.sin_port)) + ']');|28: IsMultiThread := True; |27: Socks5Server(servsocket);|0:|4:end;|0:|4:end.|
link(Param1,4325439:Text,[(342,124)(314,124)])
link(IP,11602383:Text,[(349,124)(373,124)])
}
Add(Button,8623931,238,154)
{
Left=155
Top=110
link(onClick,2664651:doStart,[])
}
Add(Thread,2664651,287,154)
{
Delay=1
link(onExec,15441213:get,[])
}
Add(Edit,4325439,308,63)
{
Left=110
Top=30
Width=210
Text="1"
DataType=2
}
Add(Edit,11602383,367,62)
{
Left=110
Top=55
Width=210
Text="127.0.0.1"
}
Add(Label,5822331,182,70)
{
Left=80
Top=55
Width=14
Height=17
Caption="IP"
}


карма: 6

0
Редактировалось 15 раз(а), последний 2017-12-26 21:00:17