如何确定哪个进程正在侦听Windows上的TCP或UDP端口?
当前回答
根据带有信息和击杀的答案,对我来说,将它们组合在一个命令中是有用的。您可以从cmd运行此命令以获取有关侦听给定端口的进程的信息(示例8080):
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"
或者如果你想杀死它:
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i
您也可以将这些命令放入bat文件中(它们略有不同-将%i替换为%%i):
文件portInfo.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
文件端口Kill.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i
然后您可以通过cmd执行以下操作:
端口信息.bat 8080
or
端口Kill.bat 8080
其他回答
PowerShell(PowerShell)
TCP
Get-Process -Id (Get-NetTCPConnection -LocalPort YourPortNumberHere).OwningProcess
UDP
Get-Process -Id (Get-NetUDPEndpoint -LocalPort YourPortNumberHere).OwningProcess
cmd
netstat -a -b
(添加-n以阻止它尝试解析主机名,这将使它更快。)
注意Dane对TCPView的建议。它看起来很有用!
-a显示所有连接和侦听端口。
-b显示创建每个连接或侦听端口所涉及的可执行文件。在某些情况下,众所周知的可执行程序包含多个独立组件,在这些情况下,将显示创建连接或侦听接口所涉及的组件序列。在这种情况下,可执行文件名位于底部的[]中,顶部是它调用的组件,依此类推,直到到达TCP/IP。请注意,此选项可能很耗时,除非您有足够的权限,否则将失败。
-n以数字形式显示地址和端口号。
-o显示与每个连接关联的所属进程ID。
在编程上,您需要iphlpapi.h中的东西,例如GetTcpTable2()。像MIB_TCP6ROW2这样的结构包含所有者PID。
对于Windows:
netstat -aon | find /i "listening"
PowerShell(PowerShell)
如果你想有一个好的概述,你可以使用这个:
Get-NetTCPConnection -State Listen | Select-Object -Property *, `
@{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
| select ProcessName,LocalAddress,LocalPort
然后你会得到一张这样的桌子:
ProcessName LocalAddress LocalPort
----------- ------------ ---------
services :: 49755
jhi_service ::1 49673
svchost :: 135
services 0.0.0.0 49755
spoolsv 0.0.0.0 49672
对于UDP,它是:
Get-NetUDPEndpoint | Select-Object -Property *, `
@{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
| select ProcessName,LocalAddress,LocalPort
使用以下批处理脚本,该脚本将进程名称作为参数,并为进程提供netstat输出。
@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End
:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------
netstat -ano |findstr %z%
goto :eof
:End
推荐文章
- 将主机端口转发到docker容器
- 如何使用Windows命令行更改目录
- 远程主机强制关闭现有连接
- 如何在NERDTree中显示隐藏文件(以句点开始)?
- TCP连接的最大数据包大小
- Objective-C for Windows
- “注册”一个.exe,这样你就可以从Windows中的任何命令行运行它
- Windows批处理文件的隐藏特性
- connectexception:拒绝连接
- Windows递归grep命令行
- 如何创建自己的URL协议?(例如:/ /……)
- Docker -绑定0.0.0.0:4000失败:端口已经分配
- 在Windows批处理脚本中格式化日期和时间
- 映射一个网络驱动器供服务使用
- 如何在windows中使用命令提示符(cmd)列出文件。我试过在Linux中使用“ls”,但它显示一个错误?