为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蛊毒传说 2024-01-12 10:29:03
我来自 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 起可用。


查看完整回答
反对 回复 2024-01-12
  • 1 回答
  • 0 关注
  • 46 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信