使用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,回家統一發個^_^!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM