使用uPnP在路由器上映射端口
摘要:
使用uPnP方式在TP-Link上映射端口,配合WCF定时发送动态拨号IP实现远程访问与管理。
需求:
A客户使用拨号上网,IP经常变,有套系统刚部署经常要连过去更新程序与数据库,每次叫A总QQ远程相当不便,
当然直接在路由器上建立端口映射那是最方便,但是A总是刚伤人A企业的总经理,A企业的A网管对新上的系统有抵触(内中缘于大家都懂),
于是乎只能另辟蹊径,好在发现该企业http://192.168.1.1 可以访问到,并且是传说中的TP-Link,当然密码是拿不到地。
过程:
首先想到的是mgen兄的一片文章( http://www.cnblogs.com/mgen/archive/2013/02/03/2890987.html)
下载代码后运行报upnpnat.StaticPortMappingCollection;这句引用为空,检测发现是未开启xp系统的upnp,于是俺资料去开启
结果发现根本没装组件,安装组件时有发现没光盘---都是ghost版的,这年头那来的XP安装盘啊.
纠结中想到,你路由器上的端口映射为什么要电脑上装组件呢,于是在google C# upnp实现端口映射,果然找到2篇相关资料,发现在路由器上添加映射只需要调用路由器的ipc接口,调用是基于http的soap操作,到这里总算不用找xp安装盘了,遗憾的是那两篇资料下载的代码不能执行通过。
不过思路是有了,登录自家的路由器打开uPnP菜单,华丽的发现PPLive已经神奇般的映射4条记录,禁用uPnp,过一会再次打开UPnP,发现PPLive总能再我开启uPnP后顽强的添加一条TCP一条UDP映射^_^,到这里事情就简单了。
打开俺的HttP Analyzer ,一跟踪,SOAPAction:....AddProtMapping就呈现在眼前,于是马上打开VS2010写下
WebClient wc=new WebClient(); wc.Headers.Add("User-Agent", "OS/version, UPnP/1.0, MiniUPnPc/version"); wc.Headers.Add("SOAPAction", @"""urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping"""); wc.Headers.Add("Content-Type", "text/xml"); var url=string.Format("http://192.168.1.1:1900/ipc",firewallAddress); byte[] data=Encoding.Default.GetBytes(xml); wc.UploadData(url, "POST", data); MessageBox.Show("zhong bu zhong ???")
执行完毕刷新路由器中的uPnP列表,果然一条本机3389端口到外网26691的TCP 映射成功添加.....
程序截图:
端口问题解决了,接下来就是使用WCF动态发送拨号获取的IP了,这个就比较简单,俺自己有个网站,租用了空间,在上面放个WCF服务页,客户电脑上安装个小程序定时请求下指定页面,就可以获取客户的公网IP了,WCF中代码入下
public string RegIp(string clientNo)
{
var properties = OperationContext.Current.IncomingMessageProperties;
var endPoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
var ip= endPoint.Address;
..................
WCF部分代码到:http://www.cnblogs.com/wdfrog/archive/2013/04/12/3016184.html下载
上面那个端口映射程序的代码需要的留下Email,回家统一发个^_^!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
2010-04-15 SubSonic中RecordBase<T>.Load(IDataReader dataReader)与LoadAndCloseReader(IDataReader dataReader)的使用区别
2009-04-15 Cookie概要