在使用FRP做内网穿透时,客户端FRPC经常莫名退出的解决方法

在家里自建了一个私人网络云盘,由于家里上网IP都是服务商动态分配的,所以公网IP地址是不固定的。这样在路由器上设置端口映射也没多少意义,得知道当时的公网IP才能访问;

于是就使用 frp(0.51.1),(当前最新版2023.7.25)做内网穿透。

也可以使用一些收费的内网穿透工具,如花生壳,神卓 等产品。(免费的限制挺在的),由于我自己有一个固定公网IP的电脑可以使用,所以就选择了免费开源的 frp 。

在使用过程中,发一个问题,frpc.exe 会经常莫名的退出了。很多时候,是不方便去重启frpc.exe 的。(比如我不在家的时候)

然后上官方( github.com/fatedier/frp )去查,也有人反馈问题,作者仿佛也很无奈的相子,此问题在2017年就提出来了,直至今天好象也没有得到解决;

于是又在网上看看别人是怎么解决的。看了后,多是使用 bat 方式进行“进程守护“

可是我不喜欢桌面出现一个 DOS控制台窗口。

于是看到有人介绍使用 winsw.exe 来将 frpc.exe 做成服务来运行。(虽然可以不出现DOS控制台窗口了,但是解决不到莫名的问题。再者winsw.exe 创建的服务真心运行缓慢,资源占用也很大。)

想着不就是一个进程守护嘛,非常简单,于是就自己动手写了一个程序;

原理也非常的简单。每隔5秒判断一下 frpc.exe进程是否存在,不存在就启动它。为了更好的做到无感,就把程序写成一个服务。

首先用 delphi 创建 个 Windows Service 工程,然后 放一个 timer 。定时为  5000 毫秒;

定时的运行下面代码

var
  ContinueLoop :Boolean;
  FSnapshotHandle:THandle;
  FProcessEntry32:tProcessEntry32;
  s,fn,FFileName:string;
  b:Boolean;
  FF:TextFile;
begin
  b:=False;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);  
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);  
  while ContinueLoop do begin
    s := ExtractFileName(FProcessEntry32.szExeFile);
    if (s='frpc.exe') then begin
      ContinueLoop := false;
      b:=True;
      Continue;
    end;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
  SetCurrentDir(ExtractFilePath(ParamStr(0)));
  if not b then begin
    FFileName := ExtractFilePath(ParamStr(0)) + 'frpclog.log';
    AssignFile(FF, FFileName);
    if not FileExists(FFileName) then begin
      Rewrite(FF);
    end;
    Append(FF);
    Writeln(FF,FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',Now()));
    Close(FF);
    ShellExecute(0, 'open','frpc.exe','-c frpc.ini',nil,SW_HIDE);
  end;

服务端也可以这么做。把相关的“写死”在代码里面的东西,弄一个配置,这样就灵活些了。

做了一个懒人包,可以去下载 frp内网穿透,解决客户端(frpc.exe)莫名退出后自动重启

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值