SOCKS5批量检测工具,
多线程的,
速度很快。
可以批量检测SOCKS5是否可达,
并在软件上显示,
或者保存在文本文件里。
原理,
采用多线程来检测,
使用临界处理。
部分核心代码如下:
function IsIPAddress(ss: string): Boolean;
var
s, s1: string;
ii, p: integer;
begin
s1 := ss;
result := false;
for ii := 1 to 3 do
begin
p := pos('.', s1);
if p = 0 then
exit;
s := Copy(s1, 1, p - 1);
s1 := copy(s1, p + 1, Length(s1));
p := StrToIntDef(s, -1);
if (p <= 0) or (p >= 255) then
exit;
end;
p := StrToIntDef(s1, -1);
if (p <= 0) or (p >= 255) then
exit;
result := true;
end;
function IsReadible(s: TSocket; dwTimeout: DWORD): Boolean;
var
timeout: TTimeVal;
fds: TFDSet;
nStatus: Integer;
begin
timeout.tv_sec := dwTimeout div 1000;
timeout.tv_usec := (dwTimeout mod 1000) * 1000;
FD_ZERO(fds);
FD_SET(s, fds);
nStatus := select(0, @fds, nil, nil, @timeout);
if (nStatus = SOCKET_ERROR) then
begin
Result := False;
Exit;
end;
Result := not (nStatus = 0);
end;
function IsWritable(s: TSocket; dwTimeout: DWORD): Boolean;
var
timeout: TTimeVal;
fds: TFDSet;
nStatus: Integer;
begin
timeout.tv_sec := dwTimeout div 1000;
timeout.tv_usec := (dwTimeout mod 1000) * 1000;
FD_ZERO(fds);
FD_SET(s, fds);
nStatus := select(0, nil, @fds, nil, @timeout);
if (nStatus = SOCKET_ERROR) then
begin
Result := False;
Exit;
end;
Result := not (nStatus = 0);
end;
function GetIPAddressByHost(const Host: string; const Which: Integer): string;
var
HostEnt: PHostEnt;
iAddr: Integer;
begin
if AnsiSameText(Host, 'LOCALHost') then
begin
Result := '127.0.0.1';
end
else if IsIPAddress(Host) then
begin
Result := Host;
end
else
begin
HostEnt := getHostbyname(PAnsiChar(Host));
if Assigned(HostEnt) then
begin
if Which <= (HostEnt^.h_length div 4) then
begin
Move(PByteArray(HostEnt^.h_addr_list^)[(Which - 1) * 4], iAddr, 4);
Result := inet_ntoa(TInAddr(iAddr));
end
else
Result := '';
end
else
Result := '';
end;
end;
版权声明:本文为QQ1289671197原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。