Показать сообщение отдельно
  #3  
Старый 01.07.2025, 07:57
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 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;
Ответить с цитированием