gpt4 book ai didi

python - 如何在Win10/PowerShell上获取自由/开放本地端口以进行ssh转发

转载 作者:行者123 更新时间:2023-12-02 14:26:13 24 4
gpt4 key购买 nike

我来自Unix世界,想在Windows 10计算机上执行ssh端口转发ssh -L
我有一个Python一线式的工作解决方案。
现在我想问一下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
```

最佳答案

您可以尝试以下方法:

$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起可用。
您可以在此处了解更多信息: https://stackoverflow.com/a/48888108/5805327

关于python - 如何在Win10/PowerShell上获取自由/开放本地端口以进行ssh转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64536992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com