
01.07.2025, 07:57
|
Новичок
|
|
Регистрация: 18.03.2009
Сообщения: 82
Репутация: 10
|
|
фильрт
у меня ошибки: за пределы я уже понял как выходить:
Код:
with TcpTable.Table[i] do
но может это проблема в windows
127.0.0.1 <=>127.0.0.1 и все все остальное пустое
Цитата:
Local: 127.0.0.1:49684 | Remote: 127.0.0.1:50327
|
а может и где ни будь я потерялся
Код:
procedure TForm1.ShowExternalAddresses;
var
i: Integer;
Item: TIpTableItem;
begin
Memo1.Lines.Clear;
for i := 0 to FThread.Count - 1 do
begin
Item := FThread.IpTable[i];
Memo1.Lines.Add('Local: ' + Item.LocalAddr + ' | Remote: ' + Item.RemoteAddr);
end;
end;
procedure TForm1.ConnectionsMemo;
var
i: Integer;
begin
Memo1.Lines.Clear;
for i := 0 to FThread.Count - 1 do
begin
if (FThread.IpTable[i].LocalAddr <> '') and
(FThread.IpTable[i].RemoteAddr <> '') then
Memo1.Lines.Add('Local: ' + FThread.IpTable[i].LocalAddr + ' | Remote: ' + FThread.IpTable[i].RemoteAddr);
end;
end;
и
Код:
procedure TConnectionListener.ListOpenTCPConnections;
var
TcpTable: PMIB_TCPTABLE_OWNER_PID;
TableSize: DWORD;
Res: DWORD;
i: Integer;
begin
TcpTable := nil;
TableSize := 0;
Res := GetExtendedTcpTable(nil, TableSize, True, AF_INET, TCP_TABLE_BASIC_CONNECTIONS, 0);
if Res <> ERROR_INSUFFICIENT_BUFFER then
begin
SetLength(FIpTable, 1);
FIpTable[0].LocalAddr := 'Error';
FIpTable[0].RemoteAddr := 'Error';
Exit;
end;
GetMem(TcpTable, TableSize);
try
Res := GetExtendedTcpTable(TcpTable, TableSize, True, AF_INET, TCP_TABLE_BASIC_CONNECTIONS, 0);
if Res = NO_ERROR then
begin
SetLength(FIpTable, TcpTable.dwNumEntries);
for i := 0 to TcpTable.dwNumEntries - 1 do
begin
with TcpTable.Table[i] do
begin
// Фильтр: пропускаем соединения с локальным IP 127.0.0.1 или 0.0.0.0
if (dwRemoteAddr <> 0) and
(dwRemoteAddr <> (127 shl 24 + 1)) then // 127.0.0.1
begin
FIpTable[i].LocalAddr := Format('%d.%d.%d.%d:%d', [
dwLocalAddr and $FF,
(dwLocalAddr shr 8) and $FF,
(dwLocalAddr shr 16) and $FF,
(dwLocalAddr shr 24) and $FF,
ntohs(dwLocalPort)
]);
FIpTable[i].RemoteAddr := Format('%d.%d.%d.%d:%d', [
dwRemoteAddr and $FF,
(dwRemoteAddr shr 8) and $FF,
(dwRemoteAddr shr 16) and $FF,
(dwRemoteAddr shr 24) and $FF,
ntohs(dwRemotePort)
]);
end
else
begin
// Помечаем как "скрыто" или пропускаем
FIpTable[i].LocalAddr := '';
FIpTable[i].RemoteAddr := '';
end;
end;
end;
end
else
begin
SetLength(FIpTable, 1);
FIpTable[0].LocalAddr := 'Error';
FIpTable[0].RemoteAddr := 'Error';
end;
finally
FreeMem(TcpTable);
end;
end;
|