c#实现定时自动获取免费natapp的动态域名和端口

Posted Dotnet专栏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#实现定时自动获取免费natapp的动态域名和端口相关的知识,希望对你有一定的参考价值。

背景

   最近做一个跨域的东西,发现每次丢服务器很麻烦,于是想起了natapp来穿透我的内网实现跨域,贵的东西唯一缺点就是贵,我选择了免费版(穷),好,申请也或得免费的natapp通道也成功映射了我的本地项目,可是免费的natapp的域名和端口是不固定的,是都会变,一番摸索后发现启动natapp后可以生成日志,然后日志文件中记录着变动后的域名和端口,开心的一匹,于是就有了这篇文章。需要你做的是:


  1. 获取源码,后台回复 natapp  

  2. 在程序的 bin\Debug\natapp 路径下修改一下config.ini文件的 authtoken=这个是你的natapp通道


  3. NuGet引入Quartz类库,用于定时执行获取natapp域名和端口

  4. 程序跑起来,就这么简单



讲解一下程序





一、关闭natapp.exe进程

 KillProcess("natapp");   private static void KillProcess(string processName) { Process[] myproc = Process.GetProcesses(); foreach (Process item in myproc) { if (item.ProcessName == processName) { item.Kill(); } } }

二、删除natapp.exe运行产生的log文件

DeleteLog("log.txt");

private static void DeleteLog(string logPath) { DirectoryInfo di = new DirectoryInfo(Environment.CurrentDirectory); FileInfo[] fis = di.GetFiles(); foreach (FileInfo fi in fis) { try { if (fi.Name.Contains(logPath)) { fi.Delete(); } } catch (Exception ex) { } } }

三、启动natapp.exe进程

StartNatappProcess(Environment.CurrentDirectory + "\\natapp\\natapp.exe");

private static void StartNatappProcess(string natappPath) { Process process = new Process(); process.StartInfo.FileName = natappPath; //process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; // 启动的时候最小化程序 process.Start(); Thread.Sleep(1000); }

四、解析natapp.exe运行产生的log文件

ResolveLog("log.txt");

private static void ResolveLog(string logPath) { resolveResult = new ResolveResult(); using (FileStream fs = new FileStream(logPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (StreamReader sr = new StreamReader(fs, Encoding.Default)) { StringBuilder sb = new StringBuilder(); while (!sr.EndOfStream) { sb.AppendLine(sr.ReadLine() + "<br>"); } string str = sb.ToString(); int x = str.IndexOf("Url"); //定位位置 string validData = str.Substring(x, 100); string[] strTmps = validData.Split('"'); string[] serverStr = strTmps[2].Split(':'); resolveResult.serverUrl = serverStr[0] + ":" + serverStr[1]; if (serverStr.Length>2) { resolveResult.serverPort = int.Parse(serverStr[2]); } resolveResult.localIP = strTmps[10].Split(':')[0]; resolveResult.localPort = int.Parse(strTmps[10].Split(':')[1]); } }

运行后的截图



以上是关于c#实现定时自动获取免费natapp的动态域名和端口的主要内容,如果未能解决你的问题,请参考以下文章

13ABPZero系列教程之拼多多卖家工具 微信公众号开发前的准备

使用WebService天气接口,自动获取天气,并定时写入数据库

映射本地主机

使用 c#、selenium 和 jquery 实现 IE 自动化 - 从动态表中随机获取

Python - 定时动态获取IP代理池,存放在文件中

哪个有免费内网IP映射外网的软件网站?给我一个哇?