![]() |
socks5 verbindung testen
Ich habe 3 gute Proxys die leider nicht immer online sind. Daher würde ich mir gerne ein Tool PRogrammieren dass z.B. alle 10 minuten testet ob einer der Proxys verfügbar ist. Ein Socks5 Proxy ist mit Authentifizierung die anderen ohne. Wobei einer glaube ich auch nur Socks4 ist.
Weis jemand wie ich das Programmieren könnte in Delphi 2007 ? Danke. mfg |
Re: socks5 verbindung testen
Versuchs mit folgendem Code.
[delphi] uses .., winsock; function CanListen(Port: DWORD): Boolean; var Name : TSockAddr; nRet : Integer; Socket : TSocket; WSData : TWSAData; begin result := False; WSAStartup($0101, WSData); try Socket := WinSock.Socket(PF_INET, SOCK_STREAM, IPPROTO_IP); try if Socket<>INVALID_SOCKET then begin ZeroMemory(@Name,SizeOf(TSockAddr)); with Name do begin sin_Family := PF_INET; sin_Port := htons(Port); sin_Addr := TInAddr(htonl(INADDR_ANY)); end; nRet := Bind(Socket, Name, SizeOf(Name)); if (nRet <> SOCKET_ERROR) then result := (WinSock.Listen(Socket,SOMAXCONN) <> SOCKET_ERROR); end; finally if Socket <> INVALID_SOCKET then CloseSocket(Socket); end; finally WSACleanup; end; end; |
Re: socks5 verbindung testen
[delphi][center]
für remoteServer folgender Code function _CheckCon(const IP:string):boolean; var ClientSocket : TSocket; Name : TSockAddr; WSData : TWSAData; begin result:=false; WSAStartup($0101,WSData); // WinSock v1.1 ClientSocket := WinSock.Socket(PF_INET,sock_Stream,IPPROTO_IP); if (ClientSocket <> Invalid_Socket) then begin with Name do begin sin_Family := PF_INET; sin_Port := htons(139); // die Portnummer des Servers sin_Addr := TInAddr(Inet_Addr(PChar(IP))); // inet_addr in in_addr umwandeln end; result:=(Connect(ClientSocket,Name,SizeOf(Name))<> Socket_Error); // connection zum Server aufbauen end; CloseSocket(ClientSocket); WSACleanup; end; |
Re: socks5 verbindung testen
hmmm, wo gebe ich da die ip des socks5 an? und den username und passwort?
|
Re: socks5 verbindung testen
Delphi-Quellcode:
den benutzernamen und das passwort kann man hier noch nirgends eingeben weil du dafür ein protokoll bräuchtest, was du dir entweder selber schreiben musst oder dir ne gute quelle suchen musst ;-)
with Name do begin
sin_Family := PF_INET; sin_Port := htons(139); // die Portnummer des Servers (hier des Socks5 Servers) sin_Addr := TInAddr(Inet_Addr(PChar(IP))); // IP Adresse des Socks5 Servers für ip einsetzen z.b '192.168.1.155' Mit dem von den zwei anderen geposteten Code überprüfst du nur ob der Server auf der IP-Adresse in kombination mit dem Port lauscht... was ja reichen könnte -> Verbindung kann hergestellt werden -> Proxy online -> Verbindungstimeout -> Proxy offline |
Re: socks5 verbindung testen
ich habe den code jetzt so:
Delphi-Quellcode:
aber die showmessage zeigt er nicht an, also wäre der proxy nicht online, ist er aber. ihr könnte das ja testen, die ip ist eingetragen,
function CanListen(Port: DWORD): Boolean;
var Name : TSockAddr; nRet : Integer; Socket : TSocket; WSData : TWSAData; begin result := False; WSAStartup($0101, WSData); try Socket := WinSock.Socket(PF_INET, SOCK_STREAM, IPPROTO_IP); try if Socket<>INVALID_SOCKET then begin ZeroMemory(@Name,SizeOf(TSockAddr)); with Name do begin sin_Family := PF_INET; sin_Port := htons(3541); // die Portnummer des Servers (hier des Socks5 Servers) sin_Addr := TInAddr(Inet_Addr(PChar('98.206.10.111'))); // IP Adresse des Socks5 Servers für ip einsetzen z.b '192.168.1.155' end; nRet := Bind(Socket, Name, SizeOf(Name)); if (nRet <> SOCKET_ERROR) then result := (WinSock.Listen(Socket,SOMAXCONN) <> SOCKET_ERROR); end; finally if Socket <> INVALID_SOCKET then CloseSocket(Socket); end; finally WSACleanup; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if canlisten(3541) = true then showmessage('online'); end; |
Re: socks5 verbindung testen
ich habe auch die indy und die overbyte ics componenten. Geht es damit besser?
mit ics habe ich folgendes gemacht:
Delphi-Quellcode:
problem ist, dass auch dann wenn der socks ungültig ist (egal welche ip/port ich eingebe) immer erscheint das es durch den socks zum host connected hat, ansonsten wäre es genaus das was ich suche.
procedure TForm1.Button1Click(Sender: TObject);
begin WSocket1.Proto := 'tcp'; WSocket1.Port := '80'; WSocket1.addr := 'google.de'; WSocket1.socksPort := '3541'; WSocket1.socksserver:= '98.206.11.111'; WSocket1.Connect; end; procedure TForm1.WSocket1Error(Sender: TObject); begin showmessage('fehler'); end; procedure TForm1.WSocket1SessionConnected(Sender: TObject; ErrCode: Word); begin Memo1.Lines.Add('Session connected to remote host.'); end; procedure TForm1.WSocket1SocksConnected(Sender: TObject; ErrCode: Word); begin Memo1.Lines.Add('Session connected to socks server.'); end; procedure TForm1.WSocket1SocksError(Sender: TObject; Error: Integer; Msg: string); begin Memo1.Lines.Add('Socks error #' + IntToStr(Error) + ' ' + Msg); end; end. |
Re: socks5 verbindung testen
Delphi-Quellcode:
Edit: Guck dir vllt auch mal
var
Name : TSockAddr; nRet : Integer; Socket : TSocket; WSData : TWSAData; begin result := False; WSAStartup($0101, WSData); try Socket := WinSock.Socket(PF_INET, SOCK_STREAM, IPPROTO_IP); try if Socket<>INVALID_SOCKET then begin ZeroMemory(@Name,SizeOf(TSockAddr)); with Name do begin sin_Family := PF_INET; sin_Port := htons(3541); // die Portnummer des Servers (hier des Socks5 Servers) sin_Addr := TInAddr(Inet_Addr(PChar('98.206.10.111'))); // IP Adresse des Socks5 Servers für ip einsetzen z.b '192.168.1.155' end; {nRet := Bind(Socket, Name, SizeOf(Name)); if (nRet <> SOCKET_ERROR) then result := (WinSock.Listen(Socket,SOMAXCONN) <> SOCKET_ERROR); end; } // Bind+ Listen brauchst du nur wenn du deinen Socket an einen // bestimmten Port binden willst und drauf lauschen! Ein // Serverprogramm also, das du hier wohl nicht willst // stattdessen wohl solltest du mit Connect arbeiten wie oben! deine_variable:=(Connect(Socket,Name,SizeOf(Name))<>Socket_Error); // connection zum Server aufbauen ![]() es sollte eigentlich zu unterscheiden sein ob du einen verbindung herstellen kansnt oder nicht ;-) |
Re: socks5 verbindung testen
ok, so funktioniert es jetzt gut. Danke.
Kann ich noch irgendwie die Timeout zeit einstellen, also wie lange auf antwort gewartet werden soll? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz