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

Networking 如何通过windows命令行关闭TCP和UDP端口,networking,Networking,有人知道如何通过windows命令行关闭单个连接的TCP或UDP套接字吗 在谷歌上搜索,我看到一些人问同样的问题。但答案看起来像是netstat或netsh命令的手册页,重点是如何监控端口。我不想知道如何监控他们(我已经这么做了)。我想关闭/杀死他们 编辑,澄清一下:假设我的服务器监听TCP端口80。客户端建立连接,并为其分配端口56789。然后,我发现这个连接是不受欢迎的(例如,这个用户做了坏事,我们要求他们停止,但连接没有在途中的某个地方断开)。通常,我会添加一个防火墙来完成这项工作,但这需

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

在谷歌上搜索,我看到一些人问同样的问题。但答案看起来像是netstat或netsh命令的手册页,重点是如何监控端口。我不想知道如何监控他们(我已经这么做了)。我想关闭/杀死他们


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

要关闭端口,您可以识别侦听此端口的进程并终止此进程。

如果不关闭拥有这些套接字的进程,则无法关闭套接字。套接字由打开它们的进程拥有。因此,要了解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感兴趣,请阅读本教程:

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


如果不拥有服务器套接字,就无法关闭服务器上的套接字,因此,如果没有在拥有服务器套接字的进程中运行代码,就无法真正关闭套接字

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

尝试Sysinternals/Microsoft提供的工具TCPView(GUI)和Tcpvcon(命令行)。

是的,这是可能的。您不必是拥有套接字的当前进程才能关闭它。考虑一下,远程机器、网卡、网络电缆和操作系统都会导致套接字关闭。

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

因此,您真正需要的是Windows提供一个API来直接实现这一点,或者有人编写了一个类似VPN或Fiddler的程序,让您能够关闭通过它的套接字

至少有一个程序()可以做到这一点,我今天使用它来关闭在CurrPorts启动之前启动的进程上的特定套接字。当然,要做到这一点,您必须以管理员身份运行它

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

  • 打开
    cmd

    • 键入
      netstat-a-n-o

    • 查找TCP[IP地址]:[端口号]#[target_PID]35;(UDP同上)

    • (顺便说一句,
      kill[target\u PID]
      对我不起作用)

  • CTRL+ALT+DELETE并选择“启动任务管理器”

    • 点击“流程”选项卡

    • 通过进入:查看>选择列>选中PID框来启用“PID”列

    • 找到感兴趣的PID和“结束流程”

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


  • 我找到了这个问题的正确答案。请从Sysinternals中尝试TCPView,它现在由Microsoft所有。你可以在

    即时/可行/部分答案中找到答案:


    与前面使用netstat-a-o-n的答案不同,使用这些端口时,需要查看非常长的列表,而不需要应用程序的名称。您可以使用sysinternal中的tcpview之类的程序。我想它可以在监视和消除不需要的连接方面帮助您很多。

    使用TCPView:
    或当前端口:

    或者,如果您不想使用外部软件(顺便说一句,这些工具不需要安装),您只需先运行netstat命令(最好是netstat-b),然后设置本地安全策略来阻止用户机器的IP地址,这就是我对不需要的甚至未知的连接所做的——这允许你做任何事情
    # 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
    
     netstat -ano
     taskkill /f /im [PID of the port 8080 got from previous command]
    
    TASKKILL /f /pid 1234 
    
    #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 
    
    netstat -ano | findstr :8080
    
    taskkill /pid 11704 /F
    
    netsh advfirewall firewall add rule name="Conn hotfix" dir=out action=block protocol=T
    CP remoteip=192.168.38.13