cmd开启任意端口的开口命令
Windows防火墙默认拦截所有入站连接,除非你明确放行。启任这个设计在安全上没问题,意端但开发调试时常常卡住你——本地服务起在8080,命令同事访问不了,开口你自己也连不上。启任解决办法就一行:netsh advfirewall firewall add rule。意端
拿最常见的命令场景说。你写了个Node.js服务跑在3000端口,开口局域网里另一台机器想访问。启任直接敲:
netsh advfirewall firewall add rule name="Node 3000" dir=in action=allow protocol=TCP localport=3000 回车后没有提示就是意端成功。name参数随便起,命令别跟现有规则重名就行。开口dir=in表示入站规则,启任action=allow放行,意端protocol=TCP按需改成UDP也行,localport填具体端口。
这命令最烦人的地方是权限。普通cmd窗口跑会报“请求的操作需要提升”,必须右键管理员身份运行。我见过有人折腾半天,最后发现是没开管理员——cmd标题栏没显示“管理员”三个字就白搭。
批量开端口也不难。比如数据库调试要开1433、3306、5432三个,写个循环:
for %p in (1433 3306 5432) do netsh advfirewall firewall add rule name="DB %p" dir=in action=allow protocol=TCP localport=%p 注意批处理文件里%要写成%%。
删规则同样直接。把add换成delete,name参数对上就行:
netsh advfirewall firewall delete rule name="Node 3000" 如果忘了规则名,用netsh advfirewall firewall show rule name=all列出全部,输出里找就行。
有个坑得提醒你。这命令只管Windows防火墙,路由器、云服务商的安全组是另一层。我在阿里云上开过8080端口,Windows防火墙放行了,外网还是不通,最后发现是安全组规则没配。本地开发用这个命令够,部署到服务器就得检查所有网络层。
还有个隐藏细节。如果你开的是动态端口范围,比如RPC服务用的49152-65535,直接写范围:
netsh advfirewall firewall add rule name="RPC range" dir=in action=allow protocol=TCP localport=49152-65535 连字符就搞定,别一个个加。
最后说个实用技巧。测试端口通不通,别用telnet(Win10默认没装)。用PowerShell:
Test-NetConnection localhost -Port 3000 返回TcpTestSucceeded : True就说明通了。这比telnet直观多了,还不用装东西。
命令本身不复杂,复杂的是搞清楚哪层网络在拦你。先本地测,再查防火墙,最后看路由器——按这个顺序排查,五分钟内能解决90%的端口问题。