Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.07.2025, 13:17
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 81
Репутация: 10
Стрелка Как по PID вывести соединение программы

Здравствуйте! как зная PID вывести все соединение программы?
Код:
function RunCommandAndCaptureOutput(const CmdLine: string; OutputLines: TStrings): Boolean;
var
  Security: TSecurityAttributes;
  ReadPipe, WritePipe: THandle;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  Buffer: array[0..255] of Byte;
  BytesRead: DWORD;
  S: string;
begin
  Result := False;
  Security.nLength := SizeOf(TSecurityAttributes);
  Security.bInheritHandle := True;
  Security.lpSecurityDescriptor := nil;

  if not CreatePipe(ReadPipe, WritePipe, @Security, 0) then Exit;

  try
    ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
    StartupInfo.cb := SizeOf(StartupInfo);
    StartupInfo.hStdOutput := WritePipe;
    StartupInfo.hStdError := WritePipe;
    StartupInfo.dwFlags := STARTF_USESTDHANDLES;

    if not CreateProcess(nil, PChar(CmdLine), nil, nil, True,
      CREATE_NO_WINDOW, nil, nil, StartupInfo, ProcessInfo) then
      Exit;

    CloseHandle(WritePipe);

    S := '';
    repeat
      BytesRead := 0;
      ZeroMemory(@Buffer, SizeOf(Buffer));
      if ReadFile(ReadPipe, Buffer, SizeOf(Buffer), BytesRead, nil) then
      begin
        if BytesRead > 0 then
        begin
          S := S + String(PAnsiChar(@Buffer[0]));
        end;
      end;
    until BytesRead = 0;

    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);

    // Разделяем строки
    OutputLines.Text := S;
    Result := True;
  finally
    CloseHandle(ReadPipe);
  end;
end;
Код:
procedure GetIPsByPID(PID: DWORD; Memo: TMemo);
var
  OutputLines: TStringList;
  Line: string;
  SearchStr: string;
  P: Integer;
begin
  Memo.Clear;
  // Запускаем netstat
  OutputLines := TStringList.Create;
  try
    if not RunCommandAndCaptureOutput('netstat -ano', OutputLines) then
    begin
      Memo.Lines.Add('Ошибка запуска netstat');
      Exit;
    end;

    // Ищем строки с нужным PID
    for Line in OutputLines do
    begin
      SearchStr := ' ' + IntToStr(PID) + ' ';
      if Pos(SearchStr, Line) > 0 then
      begin
        // В строке ищем IP-адреса
        // Обычно строки вида: TCP    192.168.1.2:12345   93.184.216.34:80   ESTABLISHED
        // Разделяем по пробелам
        // Можно парсить вручную или искать IP-адреса
        Memo.Lines.Add(Line);
      end;
    end;
  finally
    OutputLines.Free;
  end;
end;
Код:
GetIPsByPID(12156, Memo1);
у меня ошибка KERNELLBASE
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:17.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025