如何通过Windows命令行关闭TCP和UDP端口

Vic*_*usa 143 networking

有人知道如何通过Windows命令行关闭单个连接的TCP或UDP套接字?

谷歌搜索这个,我看到有些人问同样的事情.但答案看起来像netstat或netsh命令的手册页,侧重于如何监控端口.我不想要如何监控它们的答案(我已经这样做了).我想关闭/杀死他们.

编辑,澄清:假设我的服务器侦听TCP端口80.客户端建立连接并为其分配端口56789.然后,我发现这种连接是不受欢迎的(例如,这个用户正在做坏事,我们要求他们停止但是连接不会在途中被丢弃).通常情况下,我会添加防火墙来完成这项工作,但这需要一些时间,而且我处于紧急状态.杀死拥有连接的进程在这里确实是一个坏主意,因为这会占用服务器(当我们只想选择性地暂时删除这一个连接时,所有用户都将失去功能).

Hao*_* Li 126

  1. 打开 cmd

    • 输入 netstat -a -n -o

    • find TCP [the IP address]:[port number] .... #[target_PID]#(ditto for UDP)

    • (顺便说一句,kill [target_PID]对我不起作用)

  2. CTRL + ALT + DELETE并选择"启动任务管理器"

    • 单击"进程"选项卡

    • 通过转到以下内容启用"PID"列:查看>选择列>选中PID框

    • 找到感兴趣的PID和"END PROCESS"

  3. 现在您可以在[IP地址]:[端口号]上重新运行服务器而不会出现问题

  • 对不起,我没有帮助解决您的具体问题.当我在谷歌搜索如何简单地关闭一个Windows端口时,我只是提供了我的答案,并且认为这对我遇到问题的其他人也有帮助.:) (7认同)
  • 荒谬的这个答案有这么多的赞成,当问题明确说明单连接不是整个过程! (7认同)
  • 你所说的只是为了杀死服务器进程并重新运行它,这是我想要避免的,因为这会丢弃与服务器的每个连接,而不仅仅是不需要的连接. (6认同)
  • @HaoQiLi,你不能简单地结束一切和任何事情.例如,处理Windows网络连接的`System`进程. (2认同)
  • @HaoQiLi我认为关闭我们可以使用`taskkill/pid 6168/f` 6168是pid (2认同)

hun*_*aro 60

是的,这是可能的.您不必是拥有套接字以关闭它的当前进程.请考虑一下远程机器,网卡,网络电缆和操作系统都可以使插座关闭.

还要考虑Fiddler和Desktop VPN软件可以将自己插入网络堆栈并向您显示所有流量或重新路由所有流量.

因此,您真正需要的是为Windows提供直接允许此操作的API,或者让某人编写的程序有点像VPN或Fiddler,并为您提供关闭通过它的套接字的方法.

至少有一个程序(CurrPorts)正是这样做的,我今天用它来关闭在CurrPorts启动之前启动的进程上的特定套接字.为此,您必须以管理员身份运行它.

请注意,可能不太可能导致程序不在端口上侦听(嗯,这是可能的,但该功能被称为防火墙...),但我不认为这是在这里被问到的.我相信问题是"如何有选择地关闭一个活动连接(套接字)到我的程序正在侦听的端口?".该问题的措辞有点偏,因为给出了非期望的入站客户端连接的端口号,它被称为"端口",但很明显它是对该一个套接字而不是监听端口的引用.

  • 是的,CP是一个很棒的工具:CurrPorts.exe /关闭<本地地址> <本地端口> <远程地址> <远程端口> {进程名称}这就是行:CurrPorts.exe/close*56789**server.可执行程序 (3认同)

Rah*_*hul 50

例如,您要释放端口8080然后,请按照这些命令操作.

  • netstat -ano
  • taskkill/f/im [端口8080的pid来自上一个命令]

完成!

  • 感谢名单.只有你的解决方案帮助了我 (5认同)
  • 这也杀死了提到的pid的过程,而不仅仅是关闭端口。 (2认同)
  • 我在 Windows 10 上进行了测试,它不会单独终止 TCP 连接,而是终止使用它的整个进程或线程。正如维克多所说,这不是他的目标。 (2认同)

Fel*_*eno 39

如果您知道要释放的端口,则可以通过查找如下所示的特定端口对netstat列表进行排序:

netstat -ano | findstr :8080
Run Code Online (Sandbox Code Playgroud)

然后pid将出现在你可以用taskkill杀死的rigth.

在此输入图像描述

taskkill/pid 11704 /F
Run Code Online (Sandbox Code Playgroud)

你可能也想看看这个问题, 这是专门为本地主机,但我认为这是相关的:

  • 我在 Windows 10 上进行了测试,它不会单独终止 TCP 连接,而是终止使用它的整个进程或线程。正如维克多所说,这不是他的目标。 (7认同)

小智 24

使用TCPView(http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx)或CurrPorts(http://www.nirsoft.net/utils/cports.html).

或者,如果您不想使用EXTERNAL SOFTWARE(这些工具不需要安装),您可以直接运行netstat命令(最好是netstat -b)然后设置本地安全策略来阻止IP有问题的用户机器的地址,这就是我一直在做的不需要的甚至是未知的连接 - 这使你可以在没有任何外部软件的情况下完成所有工作(所有Windows都附带)......

  • 这是正确的答案,完全由Microsoft支持. (2认同)

小智 23

试试sysinternals/microsoft工具tcpview(gui)和Tcpvcon(命令行)


qwe*_*guy 7

使用 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
Run Code Online (Sandbox Code Playgroud)

它还具有带有搜索和过滤功能的漂亮 GUI

注意:这个答案是huntharo和JasonXA的答案和评论放在一起简化的,以方便读者阅读。示例来自 CurrPorts 的网页。


chu*_*ubs 6

如果不关闭拥有这些套接字的进程,则无法关闭套接字. 套接字由打开它们的进程拥有.因此,找出Unix/Linux的进程ID(PID).像这样使用netstat:

netstat -a -n -p -l
Run Code Online (Sandbox Code Playgroud)

这将打印如下:

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         
Run Code Online (Sandbox Code Playgroud)

其中-a打印所有套接字,-n显示端口号,-p显示PID,-l仅显示正在监听的内容(这是可选的,具体取决于您所追求的内容).

你想要的真实信息是PID.现在我们可以通过以下方式关闭该过程:

kill 1879
Run Code Online (Sandbox Code Playgroud)

如果您要关闭服务,最好使用:

service sendmail stop
Run Code Online (Sandbox Code Playgroud)

杀死字面意思就是杀死它所拥有的任何孩子.使用service命令运行init.d目录中注册的shutdown脚本.如果你在服务上使用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

  • **这个答案是如此错误.**它是如何得到6个赞成票的? (6认同)
  • 您应该删除“终止进程”部分,因为它不是问题的答案。您也可以停止网络适配器来停止流量,但它仍然不会仅杀死套接字! (2认同)

Ana*_*een 5

如果您知道要杀死的特定端口,只需以管理员身份打开命令提示符(在 Windows 上)并:

npx 杀死端口 1900

上面的 1900 是我的端口号。当我想关闭 React-Native 开发工具(和 Expo)正在运行的端口时,我大多数时候都会使用这个。原因是,即使关闭开发人员窗口或停止服务器后,该端口仍然以某种方式保持在使用中。