强大的chatgpt–利用动态域名编写可自动更新frpc的脚本实现内网穿透

一 场景说明

该方案适合有多条宽带且不在同一个位置,其中一条宽带有公网的场景。有公网端的不作介绍,很多方法可以实现远控,但内网机器 无法直接进行远程控制,借助另一条带有公网的机器 ,实现中转。当然如果有国内vps,直接使用vps进行中转最好,国内的不推荐,延迟太高,远程桌面控制体验不好。

二 准备条件

1..自带公网的家宽一条,内网宽带多条。

2.连接公网端的设备完成安装frps,推荐使用openwrt,自带frps服务,注意不是frp穿透,是服务端。

3.动态域名一个,县城已设置可以成功解析公网的动态域名,用作服务端的地址,

4.chatgtp账号一个,用于生成代码。

三 实现思路解析

在有公网的设备上安装frps服务端,内网机器安装frpc客户端进行穿透,由于是家宽,服务端为动态一般每隔二至三天便会变化 ,客户端就会失去联网。为保持连接,使用脚本检查动态域名的变化,如果动态域名I地址变化了,就重启frpc服务,它会重新连接,保持客户端的连接。

四 脚本实现功能

有了想法,不会写代码,简单,交给强大的CHATGPT,先直接贴出它生成的代码,后面描述调试过程。

# 设置你的 frps 域名和 frpc 配置路径
$frpsDomain = "your.dynamic.domain"
$frpcConfigPath = "C:\path\to\your\frpc.ini"
$frpcPath = "C:\path\to\your\frpc.exe"

# 获取当前域名的 IPv4 地址
function Get-CurrentIPv4 {
    try {
        return (Resolve-DnsName $frpsDomain -Type A | Where-Object { $_.QueryType -eq 'A' }).IPAddress
    } catch {
        Write-Output "Error resolving domain: $_"
        return $null
    }
}

# 初始获取域名的 IPv4 地址
$previousIP = Get-CurrentIPv4

if ($previousIP) {
    # 启动 frpc 服务
    Write-Output "Starting frpc..."
    Start-Process -FilePath $frpcPath -ArgumentList "-c $frpcConfigPath"
} else {
    Write-Output "Failed to resolve initial IP. Exiting script."
    exit 1
}

while ($true) {
    # 获取当前域名的 IPv4 地址
    $currentIP = Get-CurrentIPv4

    # 如果 IP 发生变化
    if ($currentIP -and $currentIP -ne $previousIP) {
        Write-Output "Domain IP changed from $previousIP to $currentIP. Restarting frpc..."
        
        # 停止 frpc 服务
        Stop-Process -Name frpc -Force

        # 重启 frpc 服务
        Start-Process -FilePath $frpcPath -ArgumentList "-c $frpcConfigPath"

        # 更新之前的 IP
        $previousIP = $currentIP
    }

    # 等待一段时间(例如,检查每 60 秒)
    Start-Sleep -Seconds 60
}

以上代码直接使用即可。

详细步骤:

  1. 设置路径和域名
    • your.dynamic.domain 替换为你的动态域名。
    • C:\path\to\your\frpc.ini 替换为 frpc.ini 的实际路径。
    • C:\path\to\your\frpc.exe 替换为 frpc.exe 的实际路径。
  2. 保存脚本: 将上述内容保存为 monitor-frpc.ps1
  3. 以管理员身份运行 PowerShell: 打开 PowerShell 并以管理员身份运行,以便具有足够的权限来启动和停止进程。

运行脚本: 执行脚本:

.\monitor-frpc.ps1

五 转成系统服务

为方便开机即使用,避免cmd窗口的出现,将此转换成系统服务,步骤如下:

详细步骤:

  1. 设置路径和域名
    • your.dynamic.domain 替换为你的动态域名。
    • C:\path\to\your\frpc.ini 替换为 frpc.ini 的实际路径。
    • C:\path\to\your\frpc.exe 替换为 frpc.exe 的实际路径。
  2. 保存脚本: 将上述内容保存为 monitor-frpc.ps1
  3. 创建批处理文件: 创建一个新的 .bat 文件,例如 start-frpc-monitor.bat,并将以下内容复制到其中:
    @echo off
    PowerShell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\path\to\monitor-frpc.ps1"

    C:\path\to\monitor-frpc.ps1 替换为你的 PowerShell 脚本的实际路径。

  4. 使用 NSSM 创建服务: 打开命令提示符(以管理员身份运行),并运行以下命令来创建和配置服务:
nssm install FRPCMonitorService "C:\path\to\start-frpc-monitor.bat"

C:\path\to\start-frpc-monitor.bat 替换为你的批处理文件的实际路径。

接下来,可以通过以下命令打开 NSSM 的服务配置界面:

nssm edit FRPCMonitorService

 

在这里你可以设置服务的详细信息,例如启动类型(自动、手动等)。

  1. 启动服务: 配置完服务后,可以通过以下命令启动服务:
    nssm start FRPCMonitorService
  2. 验证服务运行状态: 你可以通过 Windows 服务管理器(services.msc)或者在命令提示符中使用以下命令检查服务状态:
    nssm status FRPCMonitorService

这样,PowerShell 脚本将作为一个 Windows 服务运行,并会在系统启动时自动启动,持续监控 frps 动态域名的 IPv4 地址变化并在需要时重启 frpc 服务。

六 调试过程

图片[1]-强大的chatgpt–利用动态域名编写可自动更新frpc的脚本实现内网穿透-利剑分享-科技生活

 

图片[2]-强大的chatgpt–利用动态域名编写可自动更新frpc的脚本实现内网穿透-利剑分享-科技生活

图片[3]-强大的chatgpt–利用动态域名编写可自动更新frpc的脚本实现内网穿透-利剑分享-科技生活

图片[4]-强大的chatgpt–利用动态域名编写可自动更新frpc的脚本实现内网穿透-利剑分享-科技生活

图片[5]-强大的chatgpt–利用动态域名编写可自动更新frpc的脚本实现内网穿透-利剑分享-科技生活

图片[6]-强大的chatgpt–利用动态域名编写可自动更新frpc的脚本实现内网穿透-利剑分享-科技生活

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享