猿问

如何在 Win10 / powerhsell 上获取免费/开放的本地端口以进行 ssh 转发

我来自 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 -v

sleep 5


蛊毒传说
浏览 125回答 1
1回答

哔哔one

你可以试试这个:$usedPorts = (Get-NetTCPConnection | select -ExpandProperty LocalPort) + (Get-NetUDPEndpoint | select -ExpandProperty LocalPort)5000..60000 | where { $usedPorts -notcontains $_ } | select -first 1Get-NetTCPConnection 和 Get-NetUDPEndpoint 都返回当前连接,我们只需要 LocalPort。下一行从 5000 迭代到 60000 并检查端口号是否未被使用。管道的最后一部分返回第一个结果。编辑我刚刚发现您还可以使用它来获取当前使用的端口:$usedPorts = (Get-NetTCPConnection).LocalPort + (Get-NetUDPEndpoint).LocalPort此语法称为成员枚举,自 PowerShell v3 起可用。
随时随地看视频慕课网APP

相关分类

Python
我要回答