如何查找PowerShell脚本与远程服务器通信的端口?实操场景咨询
如何确定代理服务器与远程服务器通信的文件复制端口
别着急,我帮你梳理几个实用的步骤来定位这个端口——毕竟通过代理中转时,本地的netstat可能抓不到跨节点的连接,得从代理端入手排查:
先明确你的复制脚本用的底层协议
不同的文件复制方式对应默认端口,先缩小排查范围:- 如果用
Copy-Item走SMB协议,默认是445端口; - 如果是通过WinRM远程执行复制(比如
Invoke-Command搭配复制逻辑),默认是5985(HTTP)或5986(HTTPS); - 要是用FTP,主动模式默认21(控制)/20(数据),被动模式会用随机端口;
- SFTP/SCP的话默认是22端口。
先搞清楚脚本依赖的协议,能少走很多弯路。
- 如果用
在代理服务器上抓包分析(最准确的方法)
代理是流量中转的核心节点,直接在这抓包能精准定位:- 先在代理上用
tracert 远程服务器IP/域名确认流量确实从代理指向目标服务器; - 打开管理员权限的PowerShell,启动抓包:
netsh trace start capture=yes protocol=any tracefile=C:\proxy_traffic.etl - 运行你的文件复制脚本,等复制动作开始后,停止抓包:
netsh trace stop - 用Windows事件查看器打开生成的
.etl文件,或者用tracelog工具解析,过滤远程服务器的IP,就能看到代理和它通信的具体端口了。
- 先在代理上用
用增强版的连接查看工具替代普通netstat
普通netstat可能错过短连接,试试这些实时查看的方法:- 在复制脚本运行的实时,在代理上执行:
注意要在连接活跃的时候查,不然短连接断开后就看不到了;netstat -ano | findstr "远程服务器IP" - 用PowerShell的
Get-NetTCPConnection命令,更灵活地过滤:
这个能列出当前所有和目标IP的TCP连接,状态清晰。Get-NetTCPConnection -RemoteAddress "远程服务器IP" | Select-Object LocalPort, RemotePort, State
- 在复制脚本运行的实时,在代理上执行:
检查代理服务器的防火墙与代理软件配置
代理要和远程通信,肯定得有对应的权限配置:- 打开代理服务器的「Windows Defender防火墙高级设置」,查看出站规则,找允许和远程服务器通信的规则,里面会明确标注端口;
- 如果用了第三方代理软件(比如Squid、Nginx),直接去它的配置文件里找转发规则,里面会写明代理到远程的端口。
直接测试代理到远程的端口连通性
结合之前的协议猜测,在代理上用Test-NetConnection逐个验证:Test-NetConnection -ComputerName "远程服务器IP/域名" -Port 你怀疑的端口比如先测445、22、5985这些常见端口,返回
TcpTestSucceeded: True的就是连通的端口,再结合脚本的协议就能确定目标端口。
内容的提问来源于stack exchange,提问作者Mitesh Agrawal
相关产品推荐
相关产品推荐

