46
46
netstat与进程名?
使用netstat -a -o -n
我可以得到端口列表和PID
然后我需要去任务管理器添加PID,看看是谁。(相当令人沮丧)
我想知道是否有一个CMD命令可以完成这一切(使用find
,for
,powershell
)
这样我就可以得到进程名称了。
使用netstat -a -o -n
我可以得到端口列表和PID
然后我需要去任务管理器添加PID,看看是谁。(相当令人沮丧)
我想知道是否有一个CMD命令可以完成这一切(使用find
,for
,powershell
)
这样我就可以得到进程名称了。
使用-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.
``` 你可以使用0x6&代替。
我想你要找的是SysInternals的 TCPView 。
下面是一个windows的例子,使用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
的附加字段可以通过添加标记来增加。
如果你喜欢使用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值。
享受它;)
尝试使用这个…
带有时间戳的进程名称:) 在oneliner中……不需要脚本,简单快捷……
你可以通过ESTABLISHED或LISTENING来改变参数SYN_SENT
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
``` 在oneliner中,你可以通过ESTABLISHED或LISTENING来改变参数SYN\_SENT。
非常好的Erik Bitemo!我想为路径添加一个变量,然后我意识到你已经有了,虽然没有定义。我想为路径添加一个变量,然后我意识到你已经有了,尽管它没有被定义。所以我重用的代码是:
$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