关于内网穿透
曾经内网穿透的代码,目前测试无法使用,代理不支持UDP,VPN客户端直接退出。
目前怀疑移动的路由器出问题的可能性大。
通过测试热点连接后台。发现使用130联通热点测试也没有通过。更换36地址也不行。
向日葵是成功的。但是,可能是中转方式实现的。
如果连最基本的UDP都被封杀,内网通讯也不必大费周章了,公网多个节点中转方式就是唯一的选择。
总之,互联网通讯,慎用UDP方式,尽量采用TCP主从模式,必要的话通过中转实现内网之间相互通讯。
这就是花费一周时间得出的结论。
以下代码是使用upnp方式的测试,但是依然无济于事。
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using NATUPNPLib;
namespace RemoteTerminal
{
class Program
{
static void Main(string[] args)
{
var name = Dns.GetHostName();
Console.WriteLine("UserName: " + name);
var ipv4 = Dns.GetHostEntry(name).AddressList.Where(i => i.AddressFamily == AddressFamily.InterNetwork).FirstOrDefault();
Console.WriteLine("localNet IP: " + ipv4);
Console.WriteLine("设置UPnP");
//UPnP绑定信息
var eport = 8933;
var iport = 3389;
var description = "RemoteTest";
//创建COM类型
var upnpnat = new UPnPNAT();
var mappings = upnpnat.StaticPortMappingCollection;
//错误判断
if (mappings == null)
{
Console.WriteLine("没有检测到路由器,或者路由器不支持UPnP功能。");
return;
}
//添加之前的ipv4变量(内网IP),内部端口,和外部端口
mappings.Add(eport, "TCP", iport, ipv4.ToString(), true, description);
Console.WriteLine("外部端口:{0}", eport);
Console.WriteLine("内部端口:{0}", iport);
Console.ReadLine();
}
}
}