我来自 Unix 世界,想ssh -L在 Windows 10 机器上进行 ssh 端口转发。我有一个使用 python one-liner 的工作解决方案。现在我想问 Powershell 用户如何优雅地在纯 powershell$LOCALPORT=$(python -c "import socket; s=socket.socket(); s.bind(('',0)); print(s.getsockname()[1]); s.close()")为了给您一些框架,它将在如下脚本中运行:$USER="USERNAME"$REMOTEHOST="REMOTEHOST"$LOCALIP=$(Get-NetAdapter -Name "WiFi" | Get-NetIPAddress).IPv4Address$LOCALPORT=$(python -c "import socket; s=socket.socket(); s.bind(('',0)); print(s.getsockname()[1]); s.close()")$REMOTEIP=ssh $USER@$REMOTEHOST "cat `$HOME/var/ip|cut -d`':`' -f1"$REMOTEPORT=ssh $USER@$REMOTEHOST "cat `$HOME/var/ip|cut -d`':`' -f2"Start-Job ssh -L $LOCALIP`:$LOCALPORT`:$REMOTEIP`:$REMOTEPORT $USER@$REMOTEHOST -N -v -v -vsleep 5
1 回答
哔哔one
TA贡献1854条经验 获得超8个赞
你可以试试这个:
$usedPorts = (Get-NetTCPConnection | select -ExpandProperty LocalPort) + (Get-NetUDPEndpoint | select -ExpandProperty LocalPort)5000..60000 | where { $usedPorts -notcontains $_ } | select -first 1
Get-NetTCPConnection 和 Get-NetUDPEndpoint 都返回当前连接,我们只需要 LocalPort。下一行从 5000 迭代到 60000 并检查端口号是否未被使用。管道的最后一部分返回第一个结果。
编辑
我刚刚发现您还可以使用它来获取当前使用的端口:
$usedPorts = (Get-NetTCPConnection).LocalPort + (Get-NetUDPEndpoint).LocalPort
此语法称为成员枚举,自 PowerShell v3 起可用。
添加回答
举报
0/150
提交
取消