c#实现定时自动获取免费natapp的动态域名和端口
Posted Dotnet专栏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#实现定时自动获取免费natapp的动态域名和端口相关的知识,希望对你有一定的参考价值。
背景
最近做一个跨域的东西,发现每次丢服务器很麻烦,于是想起了natapp来穿透我的内网实现跨域,贵的东西唯一缺点就是贵,我选择了免费版(穷),好,申请也或得免费的natapp通道也成功映射了我的本地项目,可是免费的natapp的域名和端口是不固定的,是都会变,一番摸索后发现启动natapp后可以生成日志,然后日志文件中记录着变动后的域名和端口,开心的一匹,于是就有了这篇文章。需要你做的是:
获取源码,后台回复 natapp
在程序的 bin\Debug\natapp 路径下修改一下config.ini文件的 authtoken=这个是你的natapp通道
NuGet引入Quartz类库,用于定时执行获取natapp域名和端口
程序跑起来,就这么简单
讲解一下程序
一、关闭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天气接口,自动获取天气,并定时写入数据库