分享

如何优雅的白Piao免费版内网穿透软件Cpolar

 Csharp小记 2023-12-22 发布于江苏

前言

    接上一篇,因为要搭建一个私人网盘,所以用到了Cpolar,由于Cpolar免费版的限制:外网地址会动态变化(官网说是24小时),所以我们需要一个能实时获取到这个变换的网址,官网不提供获取的API,怎么办?抓包!所以我们这里的流程就是,写一个小程序,定时获取电脑上的隧道列表,并存到一个可以远程读取的地方,但是存到哪里也要考究一下,首先一般你不会考虑服务器了(但是有是最好的),因为你要是能买服务器,花个一两百块钱同步支持一下Cpolar,又稳定又省事。

所以我们这里需要再白嫖一个软件:坚果云,免费使用有流量限制,但用这个存储一些简单的数据其实足够了。

总的来说其实还蛮折腾,不如付费来的实在,其实我已经购买了3年的,不过由于Cpolar进程数量限制,所以在某些情况下还是需要其他账号去适配更多的设备,但是这个使用频率又极低,所以就没有继续购买更多的账号。

前面关于Cpolar的账号、配置等就不赘述了,所以从坚果云开始说起。下面写一下详细步骤







开发环境:.NET 6

开发工具:Visual Studio 2022

 









实现步骤


  1. 去坚果云官网注册一个账号:https://www./,登录进去后创建一个文件夹Test

  1. 点击右上方的用户名->账户信息->安全选项->第三方应用管理,添加一个应用,记住这个密码,这是后面需要上传数据需要的密码
  1. 开始编码,这里只要抓取Cpolar管理面板(http://localhost:9200)的两个接口就行,一个是登录,一个是获取隧道列表
/// <summary> /// 登录 /// </summary> /// <returns>返回Token</returns> public async Task<string> Login() { JsonObject jsonObject = new JsonObject(); jsonObject["email"] = user; jsonObject["password"] = pwd; HttpClient client = new HttpClient(); var result = await client.PostAsync(url + "user/login", new StringContent(jsonObject.ToString())); string json = await result.Content.ReadAsStringAsync(); var model = JsonNode.Parse(json); string token = model["data"]["token"].ToString(); Console.WriteLine("Token:" + token + "\r\n"); return token; }
/// <summary> /// 获取隧道列表 /// </summary> /// <returns></returns> public async Task<string> GetTunnels() { string token = await Login();
HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); string json = await client.GetStringAsync(url + "tunnels"); var model = JsonNode.Parse(json); JsonArray jsonArray = (JsonArray)JsonNode.Parse(model["data"]["items"].ToString());
StringBuilder stringBuilder = new StringBuilder(); foreach (var item in jsonArray) { stringBuilder.AppendLine("时间:" + DateTime.Now); stringBuilder.AppendLine("名称:" + item["name"]); stringBuilder.AppendLine("状态:" + item["status"]); stringBuilder.AppendLine("地址:" + item["public_url"]); stringBuilder.AppendLine(); stringBuilder.AppendLine(); } Console.WriteLine(stringBuilder); return stringBuilder.ToString(); }
  1. 坚果云的数据上传
 /// <summary>        /// 存储        /// </summary>        /// <param name="path"></param>        /// <returns></returns>        public async Task Send(string path,string text)        {            HttpClient client = new HttpClient();            client.DefaultRequestHeaders.Add("Authorization", authorization);            StringContent content = new StringContent(text);            var result = await client.PutAsync(url + path, content);            Console.WriteLine(await result.Content.ReadAsStringAsync());        }


  1. 定时获取,这里可以使用Windwos的定时任务,也可以使用定时器来实现,下面是定时器的代码
Console.ForegroundColor = ConsoleColor.White;Console.WriteLine("开始运行 " + DateTime.Now);Cpolar cpolar = new Cpolar();Jianguo jianguo = new Jianguo();
System.Timers.Timer timer = new System.Timers.Timer(60000 * 10);timer.Elapsed += Timer_Elapsed;timer.Start();Console.ReadLine();async void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e){ string tunnels = await cpolar.GetTunnels(); await jianguo.Send("Test/Cpolar.txt", tunnels);
Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("上传成功"); Console.ForegroundColor = ConsoleColor.White;}



  1. 把这个程序编译一下也放到开机启动里面即可,会每隔10分钟向坚果云写一次当前的隧道数据
  2. 获取,可以直接通过坚果云平台获取,也可以通过以下代码

     /// <summary>        /// 获取        /// </summary>        /// <param name="path"></param>        /// <returns></returns>        public async Task Get(string path)        {            HttpClient client = new HttpClient();            client.DefaultRequestHeaders.Add("Authorization", authorization);            string result = await client.GetStringAsync(url + path);            Console.WriteLine(result);        }

实现效果

 


☛☛☛点击此处下载源码☚☚☚



    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多