Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать PID процесса, который использует порт 
:(
    Опции темы
tryinfinity
Дата 10.1.2017, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.1.2017

Репутация: нет
Всего: нет



Собственно сабж.
PM MAIL   Вверх
_zorn_
Дата 10.1.2017, 21:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 988
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Собственно какой PID в винде ?
Выясняйся понятней, либо не проси помощи.
Зачем, почему и для чего ?

ЗЫ. Мыкают такие вопросы - я тут пришел, вы сами знаете что делать. Помогите быстра.
PM MAIL   Вверх
tryinfinity
Дата 10.1.2017, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.1.2017

Репутация: нет
Всего: нет



Цитата(_zorn_ @ 10.1.2017,  21:47)
Собственно какой PID в винде ?
Выясняйся понятней, либо не проси помощи.
Зачем, почему и для чего ?

ЗЫ. Мыкают такие вопросы - я тут пришел, вы сами знаете что делать. Помогите быстра.

Тоже верно)
В общем есть несколько TCP сокетов, у каждого свой порт. Бывает такое, что сокет подвисает. Мне нужно его убить, но по имени процесса не вариант, т.к. убьются все, поэтому хочу определять на конкретном порту какой процесс сидит (его PID), ну и его уже убивать.

p.s. PID да, в винде.

Это сообщение отредактировал(а) tryinfinity - 10.1.2017, 21:59
PM MAIL   Вверх
vol4ek
Дата 10.1.2017, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



Функции API GetExtendedTcpTable / GetExtendedUdpTable
PM MAIL ICQ   Вверх
tryinfinity
Дата 10.1.2017, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.1.2017

Репутация: нет
Всего: нет



Цитата(vol4ek @ 10.1.2017,  22:04)
Функции API GetExtendedTcpTable / GetExtendedUdpTable

Спасибо.
Нашел для примера вот такой вариант:
Код

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WinSock, StdCtrls;
type
  TForm1 = class(TForm)
    mmo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const
  MIB_TCP_STATE_CLOSED = 1; //The TCP connection is in the CLOSED state that represents no connection state at all.
  MIB_TCP_STATE_LISTEN = 2; //The TCP connection is in the LISTEN state waiting for a connection request from any remote TCP and port.
  MIB_TCP_STATE_SYN_SENT = 3; //The TCP connection is in the SYN-SENT state waiting for a matching connection request after having sent a connection request (SYN packet).
  MIB_TCP_STATE_SYN_RCVD = 4; //The TCP connection is in the SYN-RECEIVED state waiting for a confirming connection request acknowledgment after having both received and sent a connection request (SYN packet).
  MIB_TCP_STATE_ESTAB = 5; //The TCP connection is in the ESTABLISHED state that represents an open connection, data received can be delivered to the user. This is the normal state for the data transfer phase of the TCP connection.
  MIB_TCP_STATE_FIN_WAIT1 = 6; //The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP, or an acknowledgment of the connection termination request previously sent.
  MIB_TCP_STATE_FIN_WAIT2 = 7; //The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP.
  MIB_TCP_STATE_CLOSE_WAIT = 8; //The TCP connection is in the CLOSE-WAIT state waiting for a connection termination request from the local user.
  MIB_TCP_STATE_CLOSING = 9; //The TCP connection is in the CLOSING state waiting for a connection termination request acknowledgment from the remote TCP.
  MIB_TCP_STATE_LAST_ACK = 10; //The TCP connection is in the LAST-ACK state waiting for an acknowledgment of the connection termination request previously sent to the remote TCP (which includes an acknowledgment of its connection termination request).
  MIB_TCP_STATE_TIME_WAIT = 11; //The TCP connection is in the TIME-WAIT state waiting for enough time to pass to be sure the remote TCP received the acknowledgment of its connection termination request.
  MIB_TCP_STATE_DELETE_TCB = 12;
type
  PTCP_TABLE_CLASS = ^TCP_TABLE_CLASS;
  TCP_TABLE_CLASS =
    (TCP_TABLE_BASIC_LISTENER,
    TCP_TABLE_BASIC_CONNECTIONS,
    TCP_TABLE_BASIC_ALL,
    TCP_TABLE_OWNER_PID_LISTENER,
    TCP_TABLE_OWNER_PID_CONNECTIONS,
    TCP_TABLE_OWNER_PID_ALL,
    TCP_TABLE_OWNER_MODULE_LISTENER,
    TCP_TABLE_OWNER_MODULE_CONNECTIONS,
    TCP_TABLE_OWNER_MODULE_ALL);
  PMIB_TCPROW = ^_MIB_TCPROW;
  _MIB_TCPROW = record
     dwState: DWORD;
     dwLocalAddr: DWORD;
     dwLocalPort: DWORD;
     dwRemoteAddr: DWORD;
     dwRemotePort: DWORD;
   end;
  PMIB_TCPTABLE = ^_MIB_TCPTABLE;
  _MIB_TCPTABLE = record
    dwNumEntries: DWORD;
    Table: array[0..0] of _MIB_TCPROW;
  end;
type
  PVOID = Pointer;
function GetExtendedTcpTable(pTcpTable: PVOID; pdwSize: PDWORD;
  bOrder: BOOL; ulAf: ULONG; TableClass: TCP_TABLE_CLASS;
  Reserved: ULONG): DWORD; stdcall; external 'Iphlpapi.dll';
var
  Form1: TForm1;
implementation
{$R *.dfm}
function StateToStateStr(State: DWORD): string;
begin
  Result := '';
  case State of
    MIB_TCP_STATE_CLOSED: Result := 'MIB_TCP_STATE_CLOSED';
    MIB_TCP_STATE_LISTEN: Result := 'MIB_TCP_STATE_LISTEN';
    MIB_TCP_STATE_SYN_SENT: Result := 'MIB_TCP_STATE_SYN_SENT';
    MIB_TCP_STATE_SYN_RCVD: Result := 'MIB_TCP_STATE_SYN_RCVD';
    MIB_TCP_STATE_ESTAB: Result := 'MIB_TCP_STATE_ESTAB';
    MIB_TCP_STATE_FIN_WAIT1: Result := 'MIB_TCP_STATE_FIN_WAIT1';
    MIB_TCP_STATE_FIN_WAIT2: Result := 'MIB_TCP_STATE_FIN_WAIT2';
    MIB_TCP_STATE_CLOSE_WAIT: Result := 'MIB_TCP_STATE_CLOSE_WAIT';
    MIB_TCP_STATE_CLOSING: Result := 'MIB_TCP_STATE_CLOSING';
    MIB_TCP_STATE_LAST_ACK: Result := 'MIB_TCP_STATE_LAST_ACK';
    MIB_TCP_STATE_TIME_WAIT: Result := 'MIB_TCP_STATE_TIME_WAIT';
    MIB_TCP_STATE_DELETE_TCB: Result := 'MIB_TCP_STATE_DELETE_TCB';
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
  pTcpTable: PMIB_TCPTABLE;
  MIB_TCPROW: _MIB_TCPROW;
  dwSize: DWORD;
  Res: DWORD;
  i: Integer;
begin
  pTcpTable := nil;
  dwSize := 0;
  Res := GetExtendedTcpTable(pTcpTable, @dwSize, False, AF_INET,
    TCP_TABLE_BASIC_CONNECTIONS, 0);
  if Res = ERROR_INVALID_PARAMETER then
    raise Exception.Create('ERROR_INVALID_PARAMETER');
  if Res = ERROR_INSUFFICIENT_BUFFER then
  begin
    pTcpTable := GetMemory(dwSize);
    ZeroMemory(pTcpTable, dwSize);
    try
      if GetExtendedTcpTable(pTcpTable, @dwSize, False, AF_INET,
        TCP_TABLE_BASIC_CONNECTIONS, 0) = NO_ERROR then
      begin
        for i := 0 to pTcpTable^.dwNumEntries - 1 do
        begin
          MIB_TCPROW := pTcpTable^.Table[i];
          mmo1.Lines.Add(StateToStateStr(MIB_TCPROW.dwState) +
            ' State = ' + IntToStr(MIB_TCPROW.dwState) +
            ' LocalAddr = '  + inet_ntoa(in_addr(MIB_TCPROW.dwLocalAddr)) +
            ' LocalPort = '  + IntToStr(ntohs(MIB_TCPROW.dwLocalPort)) +
            ' RemoteAddr = ' + inet_ntoa(in_addr(MIB_TCPROW.dwRemoteAddr)) +
            ' RemotePort = ' + IntToStr(ntohs(MIB_TCPROW.dwRemotePort))
            );
        end;
      end;
    finally
      FreeMemory(pTcpTable);
    end
  end;
end;
end.

Но тут нет PID, да и порт моего сокета как то неправильно выводит.

PM MAIL   Вверх
vol4ek
Дата 10.1.2017, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



хз как там на делфях это делается

Код

#include <IPHlpApi.h>
#pragma comment(lib, "iphlpapi.lib")


MIB_TCPTABLE_OWNER_PID  tPID;

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD size = 0;
    DWORD result = 0;

    result = GetExtendedTcpTable(&tPID, &size, TRUE, AF_INET,TCP_TABLE_OWNER_PID_ALL, 0);
        
    while(result == ERROR_INSUFFICIENT_BUFFER)
    {
        
        result = GetExtendedTcpTable(&tPID, &size, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
        if(result == NO_ERROR)
        {
            cout << tPID.dwNumEntries << endl;
            cout << tPID.table->dwLocalAddr << endl;
            cout << tPID.table->dwLocalPort << endl;
            cout << tPID.table->dwOwningPid << endl;
            cout << tPID.table->dwRemoteAddr << endl;
            cout << tPID.table->dwRemotePort << endl;
            cout << tPID.table->dwState << endl;
        }
    }

    system ("pause");
    return 0;
}



а вот структуры

Код

typedef struct _MIB_TCPROW_OWNER_PID
{
    DWORD       dwState;
    DWORD       dwLocalAddr;
    DWORD       dwLocalPort;
    DWORD       dwRemoteAddr;
    DWORD       dwRemotePort;
    DWORD       dwOwningPid;
} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;

typedef struct _MIB_TCPTABLE_OWNER_PID
{
    DWORD                dwNumEntries;
    MIB_TCPROW_OWNER_PID table[ANY_SIZE];
} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;


вам нужно добраться до dwOwningPid

Добавлено через 1 минуту и 27 секунд
в делфях я полный ноль поэтому с использованием функций я вам не помогу. ищите в MSDN
PM MAIL ICQ   Вверх
tryinfinity
Дата 10.1.2017, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.1.2017

Репутация: нет
Всего: нет



Еще раз спасибо, добавил 
dwOwningPid: DWORD;
Вроде стало показывать PID, но так же как и в случае с портами некорректно.

Это сообщение отредактировал(а) tryinfinity - 10.1.2017, 23:52
PM MAIL   Вверх
tryinfinity
Дата 11.1.2017, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.1.2017

Репутация: нет
Всего: нет



все, разобрался, нужно флаг было поставить TCP_TABLE_OWNER_PID_CONNECTIONS
PM MAIL   Вверх
Google
  Дата 17.6.2019, 21:44 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0922 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.