Имя приложений, работающих на порте в Perl или Java - PullRequest
2 голосов
/ 26 августа 2009

Xampp поставляется с аккуратным исполняемым файлом под названием xampp-portcheck.exe. Это объясняется тем, что требуемые порты свободны, а если нет, какие приложения работают на этих портах.

Я могу проверить, работает ли что-то на порте, перейдя к деталям netstat, но как мне найти приложение, работающее на порту в Windows?

1 Ответ

5 голосов
/ 26 августа 2009

Модуль CPAN Win32 :: IPHelper обеспечивает доступ к GetExtendedTcpTable, который обеспечивает ProcessID для каждого соединения.

Win32 :: Process :: Info предоставляет информацию обо всех запущенных процессах.

Объединяя два, мы получаем:

#!/usr/bin/perl

use strict;
use warnings;

use Win32;
use Win32::API;
use Win32::IPHelper;
use Win32::Process::Info qw( NT );

use Data::Dumper;

my @tcptable;

Win32::IPHelper::GetExtendedTcpTable(\@tcptable, 1);

my $pi = Win32::Process::Info->new;
my %pinfo = map {$_->{ProcessId} => $_ } $pi->GetProcInfo;

for my $conn ( @tcptable ) {
    my $pid = $conn->{ProcessId};
    $conn->{ProcessName} = $pinfo{$pid}->{Name};
    $conn->{ProcessExecutablePath} = $pinfo{$pid}->{ExecutablePath};
}

@tcptable =
    sort { $a->[0] cmp $b->[0] }
    map  {[ sprintf("%s:%s", $_->{LocalAddr}, $_->{LocalPort}) => $_ ]}
    @tcptable;

print Dumper \@tcptable;

Выход:

  [
    '0.0.0.0:135',
    {
      'RemotePort' => 0,
      'LocalPort' => 135,
      'LocalAddr' => '0.0.0.0',
      'State' => 'LISTENING',
      'ProcessId' => 1836,
      'ProcessName' => 'svchost.exe',
      'ProcessExecutablePath' => 'C:\\WINDOWS\\system32\\svchost.exe',
      'RemoteAddr' => '0.0.0.0'
    }
  ],
  ...
  [
    '192.168.169.150:1841',
    {
      'RemotePort' => 80,
      'LocalPort' => 1841,
      'LocalAddr' => '192.168.169.150',
      'State' => 'ESTABLISHED',
      'ProcessId' => 1868,
      'ProcessName' => 'firefox.exe',
      'ProcessExecutablePath' => 'C:\\Program Files\\Mozilla Firefox\\firefox.exe',
      'RemoteAddr' => '69.59.196.211'
    }
  ],

Phewwww это было утомительно, соединяя все эти точки.

...