2014-01-26 16:07:42 +0000 2014-01-26 16:07:42 +0000
46
46

netstat с названием процесса?

Используя netstat -a -o -n я могу получить список портов и PID

, а затем мне нужно зайти в диспетчер задач и добавить PID и посмотреть, кто это. (довольно обидно)

Интересно, есть ли команда CMD, которая делает все это ( используя find , for , powershell)

, чтобы я мог получить имя процесса

Antwoorden (6)

56
56
56
2014-01-26 18:06:00 +0000

Решение

Использовать параметр -b:

-b Displays the executable involved in creating each connection or
                listening port. In some cases well-known executables host
                multiple independent components, and in these cases the
                sequence of components involved in creating the connection
                or listening port is displayed. In this case the executable
                name is in [] at the bottom, on top is the component it called,
                and so forth until TCP/IP was reached. Note that this option
                can be time-consuming and will fail unless you have sufficient
                permissions.

Заметка Команда netstat -b будет неудачной, если не запустить из командной строки с повышенным уровнем.

Обходные пути

Фильтровать список процессов и находить интересующий вас PID:

tasklist | findstr /c:"PID"

Альтернативное решение

Вместо него можно использовать Tcpvcon.exe. Права администратора не требуются.

Tcpvcon использование аналогично использованию встроенной утилиты Windows netstat.

Usage: tcpvcon [-a] [-c] [-n] [process name or PID]

 -a Show all endpoints (default is to show established TCP connections).
 -c Print output as CSV.
 -n Don't resolve addresses.
8
8
8
2014-01-26 16:12:23 +0000

Думаю, вы ищете TCPView из SysInternals.

2
2
2
2016-05-13 02:17:35 +0000

Вот пример для окон, использующих FOR для разбора netstat, а затем DO tasklist с фильтром /fi на pid для отображения имени процесса.

Последняя находка - это удаление заголовков tasklist.

FOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|find "443"`) DO @tasklist /fi "pid eq %i" | find "%i"

печатает такие записи, как

tomcat8.exe.x64 4240 Services 0 931,864 K

Дополнительные поля из netstat могут быть добавлены путем добавления маркеров.

2
2
2
2016-03-07 22:14:01 +0000

Если вам нравится использовать PS, вы можете вставить этот код (примечание: он супер-базисный)

$nets = netstat -ano | select-string LISTENING
foreach($n in $nets){
    # make split easier PLUS make it a string instead of a match object:
    $p = $n -replace ' +',' '
    # make it an array:
    $nar = $p.Split(' ')
    # pick last item:
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path
    # print the modified line with processname instead of PID:
    $n -replace "$($nar[-1])","$($ppath) $($pname)"
}

Заметьте, что вы можете попробовать Path вместо ProcessName, чтобы получить полный исполняемый путь - но он не будет работать с системными службами. Также, вы можете добавить ProcessName в конец строки вместо замены значения PID.

Наслаждайтесь ;)

1
1
1
2018-02-11 10:10:26 +0000

Попробуй использовать это…

Имя процесса с временной меткой :) в oneliner… нет необходимости в быстром и простом скриптинге…

Вы можете изменить параметр SYN_SENT по ESTABLISHED или LISTENING

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern LISTENING|timestamp

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern SYN_SENT|timestamp
```...
0
0
0
2017-10-07 12:37:30 +0000

Очень хороший Эрик Байтемо! Я подумывал о добавлении переменной для пути, тогда я понял, что у вас уже есть, хотя она и не была определена. Итак, код, который я использовал:

$nets = netstat -ano |select-string LISTENING;
foreach ($n in $nets)
    {
# make split easier PLUS make it a string instead of a match object
    $p = $n -replace ' +',' ';
# make it an array
    $nar = $p.Split(' ')
# pick last item...
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path;
# print the modified line with processname instead of PID
    $n -replace "$($nar[-1])","$($ppath) $($pname)" | where {$pname -like "*GMSVP*"}
     }

Я пытался найти процессы и сервисы для приложения, в котором я использовал несколько другой 2-х лайнер.

Get-Service | select status,name,displayname,servicename | where {($_.DisplayName -like "myserv*") -or ($_.servicename -like "post*")} | ft -auto

Get-Process | select id, processname,cpu,path,description | where {$_.path -like "*myserv*"} | ft -auto

Gerelateerde vragen

3
28
13
7
4