如何通过Windows命令行closuresTCP和UDP端口

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

使用Googlesearch,我看到一些人问同样的事情。 但是这个答案看起来像是一个关于如何监视端口的netstat或netsh命令的手册页。 我不想要如何监视它们的答案(我已经这样做了)。 我想closures/杀死他们。

编辑,澄清:假设我的服务器侦听TCP端口80.客户端进行连接,端口56789分配给它。 然后,我发现这个连接是不受欢迎的(例如,这个用户正在做坏事,我们要求他们停下来,但是连接并没有因此而停下来)。 通常情况下,我会添加一个防火墙来完成这项工作,但这需要一些时间,而且我处于紧急情况。 杀死拥有连接的进程在这里真的是一个坏主意,因为这会把服务器关掉(当我们只是想有select地暂时丢弃这个连接时,所有用户都将失去function)。

是的,这是可能的。 您不必是拥有套接字的当前进程closures它。 考虑一下远程机器,网卡,网线和你的操作系统都可以导致套接字closures。

还要考虑到,提琴手和桌面VPN软件可以插入自己的networking堆栈,并显示您所有的stream量或重新路由所有的stream量。

因此,您真正需要的是为Windows提供一个允许直接使用的API,或者让某人编写一个像VPN或Fiddler一样运行的程序,并为您提供closures通过它的套接字的方法。

至less有一个程序( CurrPorts )完成这个工作,我今天用它来closures在CurrPorts启动之前启动的进程上的特定套接字。 要做到这一点,你必须以pipe理员身份运行它,当然。

请注意,可能不容易导致程序不在端口上侦听(可能,但这种function被称为防火墙…),但我不认为这是在这里问的。 我相信这个问题是:“我如何有select地closures一个活动连接(套接字)到我的程序正在监听的端口?”。 这个问题的措辞是有点closures,因为不希望的入站客户端连接的端口号被给出,它被称为“端口”,但很明显,它是一个套接字,而不是监听端口的引用。

  1. 打开cmd

    • 键入netstat -a -n -o

    • findTCP [the IP address]:[port number] .... #[target_PID]# (同上UDP)

    • (顺便说一句, kill [target_PID]不适合我)

  2. CTRL + ALT + DELETE并select“启动任务pipe理器”

    • 点击“进程”选项卡

    • 通过转到“查看”>“select列”来启用“PID”列。选中PID框

    • find感兴趣的PID和“结束过程”

  3. 现在,您可以在[IP地址]:[端口号]上重新运行服务器

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

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

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

例如你想释放端口8080然后,按照这些命令。

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

完成!

你不能closures套接字而不closures拥有这些套接字的进程。 套接字属于打开它们的进程。 所以要找出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 

如果你正在closures服务,最好使用:

 service sendmail stop 

杀死字面上的杀害过程和它拥有的任何孩子。 使用service命令运行在init.d目录中注册的closures脚本。 如果在服务上使用kill,它可能无法正确启动,因为没有正确closures它。 这只取决于服务。

不幸的是,Mac在这方面与Linux / Unix不同。 你不能使用netstat。 如果您对Mac感兴趣,请阅读本教程:

http://www.tech-recipes.com/rx/227/find-out-which-process-is-holding-which-socket-open/

如果你在Windows上,使用TaskManager来终止进程,并使用UI来closures服务。 您可以像Linux / Unix一样在Windows上使用netstat来识别PID。

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/netstat.mspx?mfr=true

为了closures端口,您可以识别正在此端口上侦听的进程并终止该进程。

我find了这个正确的答案。 从Sysinternals试用TCPView,现在由Microsoft拥有。 你可以在http://technet.microsoft.com/en-us/sysinternals/bb897437find它;

wkillcx是一个可靠的Windows命令行工具,用于从未提及的命令行中查杀tcp连接。 但是,有时连接数很多的服务器也会遇到问题。 我有时使用tcpview进行交互式杀手,但是wkillcx可以在脚本中使用。

使用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 

它也有一个很好的graphics用户界面 ,search和过滤function。

注:这个答案是huntharo和JasonXA的答案和评论放在一起,简化,使读者更容易。 例子来自CurrPorts的网页。

你不能closures你的服务器上的套接字而不拥有这些套接字,因此如果没有在拥有服务器套接字的进程中运行代码,你实际上不能closures套接字。

不过,还有一个选项是告诉客户端closures它的套接字。 将RST TCP数据包发送到客户端所连接的端口将导致客户端断开其连接。 您可以使用nmap进行RST扫描。

http://nmap.org/

即时/可行/部分回答 : https : //stackoverflow.com/a/20130959/2584794

不同于以前的答案,其中netstat -a -o -n被使用了令人难以置信的长列表 ,在没有使用这些端口的应用程序的名称

你可以使用sysinternal中的tcpview这样的程序。 我想这可以帮助你很多监视和查杀不需要的连接。

是的,有可能closuresTCP或UDP端口在DOS中有一个命令

 TASKKILL /pid 1234 

我希望这会为你工作

如果您正在使用上面安装的PowerShell v4Windows 8Windows Server 2012或更高版本上运行,则可以使用以下脚本。 这发现与端口相关的进程并终止它们。

 #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对象 – 从对象中取回特定属性/删除重复项
  • Where-Object – 根据某些条件过滤值
  • Stop-Process – PowerShell的TaskKill等价物