有人知道如何通过 Windows 命令行关闭单个连接的 TCP 或 UDP 套接字吗?
谷歌搜索,我看到有人问同样的事情。但答案看起来像是 netstat 或 netsh 命令的手册页,重点是如何监控端口。我不想要关于如何监控它们的答案(我已经这样做了)。我想关闭/杀死他们。
编辑,澄清一下:假设我的服务器监听 TCP 端口 80。客户端建立连接并为其分配端口 56789。然后,我发现这个连接是不受欢迎的(例如,这个用户正在做坏事,我们要求他们停止,但连接并没有在途中的某个地方断开)。通常,我会添加防火墙来完成这项工作,但这需要一些时间,而且我处于紧急情况。杀死拥有该连接的进程在这里确实是一个坏主意,因为这会关闭服务器(当我们只想有选择地暂时删除这个连接时,所有用户都会失去功能)。
open cmd type in netstat -a -n -o find TCP [the IP address]:[port number] .... #[target_PID]#(UDP 同上)(顺便说一句,kill [target_PID] 对我不起作用) CTRL+ALT+DELETE 并选择“启动任务管理器” 点击“进程”选项卡 启用“PID”列:查看 > 选择列 > 选中 PID 框 找到感兴趣的 PID 和“结束进程” 现在你可以毫无问题地在 [IP 地址]:[端口号] 上重新运行服务器
如果您知道要释放的端口,则可以通过查找特定端口来对 netstat 列表进行排序,如下所示:
netstat -ano | findstr :8080
然后 pid 将出现在您可以使用 taskkill 杀死的 rigth 上。
https://i.stack.imgur.com/vakVI.png
taskkill /pid 11704 /F
此外,您可能想查看专门针对 localhost 的 question,但我认为它是相关的:
例如你想释放端口 8080 然后,按照这些命令。
netstat -ano
taskkill /f /im [PID of the port 8080 got from previous command]
完毕!
是的,这是可能的。您不必是拥有套接字的当前进程即可关闭它。考虑一下远程机器、网卡、网线和您的操作系统都可能导致套接字关闭。
还要考虑 Fiddler 和 Desktop VPN 软件可以将自己插入网络堆栈并向您显示所有流量或重新路由所有流量。
因此,您真正需要的只是让 Windows 提供一个直接允许这样做的 API,或者让某人编写一个运行有点像 VPN 或 Fiddler 的程序,并为您提供一种关闭通过它的套接字的方法。
至少有一个程序 (CurrPorts) 可以做到这一点,我今天使用它来关闭在启动 CurrPorts 之前启动的进程上的特定套接字。当然,要做到这一点,您必须以管理员身份运行它。
请注意,可能不容易导致程序不侦听端口(嗯,这是可能的,但该功能被称为防火墙......),但我认为这里没有被问到。我相信问题是“我如何有选择地关闭一个活动连接(套接字)到我的程序正在侦听的端口?”。问题的措辞有点偏离,因为给出了不希望的入站客户端连接的端口号,它被称为“端口”,但很明显它是对那个套接字的引用,而不是侦听端口。
使用 TCPView:http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx
或 CurrPorts:https://www.nirsoft.net/utils/cports.html
或者,如果您不想使用外部软件(顺便说一下,这些工具不需要安装),您可以简单地首先运行 netstat 命令(最好是 netstat -b )然后设置本地安全策略来阻止 IP有问题的用户机器的地址,这就是我一直在使用不需要甚至未知的连接所做的事情——它允许你在没有任何外部软件的情况下做所有事情(一切都随 Windows 提供)......
试试 Sysinternals/Microsoft 的工具 TCPView (GUI) 和 Tcpvcon(命令行)。
https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview
如果不关闭拥有这些套接字的进程,就无法关闭套接字。套接字归打开它们的进程所有。因此要找出 Unix/Linux 的进程 ID (PID)。像这样使用 netstat:
netstat -a -n -p -l
这将打印如下内容:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1879/sendmail: acce
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1860/xinetd
其中 -a 打印所有套接字, -n 显示端口号, -p 显示 PID, -l 仅显示正在侦听的内容(这取决于您所追求的内容是可选的)。
您想要的真实信息是PID。现在我们可以通过执行以下操作来关闭该进程:
kill 1879
如果您要关闭服务,最好使用:
service sendmail stop
Kill 从字面上杀死了该进程及其拥有的任何子进程。使用 service 命令运行在 init.d 目录中注册的关闭脚本。如果您在服务上使用 kill 它可能无法正确启动备份,因为您没有正确关闭它。这仅取决于服务。
不幸的是,Mac 在这方面与 Linux/Unix 不同。你不能使用netstat。如果您对 Mac 感兴趣,请阅读本教程:
http://www.tech-recipes.com/rx/227/find-out-which-process-is-holding-which-socket-open/
如果您在 Windows 上使用 TaskManager 来终止进程,并使用服务 UI 来关闭服务。您可以像 Linux/Unix 一样在 Windows 上使用 netstat 来识别 PID。
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/netstat.mspx?mfr=true
使用 CurrPorts(免费且无需安装):http://www.nirsoft.net/utils/cports.html
/close <Local Address> <Local Port> <Remote Address> <Remote Port> {Process Name}
例子:
# Close all connections with remote port 80 and remote address 192.168.1.10:
/close * * 192.168.1.10 80
# Close all connections with remote port 80 (for all remote addresses):
/close * * * 80
# Close all connections to remote address 192.168.20.30:
/close * * 192.168.20.30 *
# Close all connections with local port 80:
/close * 80 * *
# Close all connections of Firefox with remote port 80:
/close * * * 80 firefox.exe
它还有一个不错的 GUI,带有搜索和过滤功能。
注意:这个答案是 Huntharo 和 JasonXA 的答案和评论放在一起并简化,以使读者更容易。示例来自 CurrPorts 的网页。
如果您知道要终止的特定端口,只需以管理员身份打开命令提示符(在 Windows 上),然后:
npx 杀死端口 1900
上面的 1900 是我的端口号。当我想关闭一个运行 React-Native 开发工具(和 Expo)的端口时,我经常使用这个。原因是即使在关闭开发人员窗口或停止服务器之后,该端口仍然以某种方式仍在使用中。
如果不拥有这些套接字,就无法关闭服务器上的套接字,因此如果没有在拥有服务器套接字的进程中运行代码,就无法真正关闭套接字。
但是,还有另一个选项是告诉客户端关闭其套接字。向客户端连接的端口发送 RST TCP 数据包将导致客户端断开连接。您可以使用 nmap 进行 RST 扫描。
我找到了这个问题的正确答案。试试 Sysinternals 的 TCPView,现在归微软所有。您可以在 http://technet.microsoft.com/en-us/sysinternals/bb897437 找到它
wkillcx 是一个可靠的 windows 命令行工具,用于从尚未提及的命令行中终止 tcp 连接。但是,有时它确实与具有大量连接的服务器存在问题。我有时使用 tcpview 进行交互式杀戮,但 wkillcx 可以在脚本中使用。
您可以使用 sysinternal 中的 tcpview 之类的程序。我想它可以在监视和终止不需要的连接方面为您提供很多帮助。
为了关闭端口,您可以识别正在侦听该端口的进程并终止该进程。
CurrPorts 对我们不起作用,我们只能通过 ssh 访问服务器,所以也没有 TCPView。我们也无法终止该进程,以免断开其他连接。我们最终做的并且尚未被建议的是阻止 Windows 防火墙上的连接。是的,这将阻止所有符合规则的连接,但在我们的例子中,只有一个连接(我们感兴趣的那个):
netsh advfirewall firewall add rule name="Conn hotfix" dir=out action=block protocol=T
CP remoteip=192.168.38.13
将 IP 替换为您需要的 IP,并在需要时添加其他规则。
即时/可行/部分答案:https://stackoverflow.com/a/20130959/2584794
与之前使用 netstat -a -o -n 的答案不同,long list使用这些端口在没有应用程序名称的情况下进行调查
是的 可以关闭 TCP 或 UDP 端口 DOS 中有一个命令
TASKKILL /f /pid 1234
我希望这对你有用
如果您在 Windows 8 上运行,`Windows Server 2012 或更高版本并安装了以上版本的 PowerShell v4,您可以使用以下脚本。这会找到与端口关联的进程并终止它们。
代码
#which port do you want to kill
[int]$portOfInterest = 80
#fetch the process ids related to this port
[int[]]$processId = Get-NetTCPConnection -LocalPort $portOfInterest |
Select-Object -ExpandProperty OwningProcess -Unique |
Where-Object {$_ -gt 0}
#kill those processes
Stop-Process -Id $processId
文档:
Get-NetTCPConnection - PowerShell 的 NetStat 等效项
Select-Object - 从对象中拉回特定属性/删除重复项
Where-Object - 根据某些条件过滤值
Stop-Process - PowerShell 的 TaskKill 等效项
System
进程。taskkill /pid 6168 /f
6168 是 pid