要获得路由器的外网(或公网)IP地址,一般的做法是先访问外网的一个网站(如,由这个网站记录下该路由器的外网IP地址,然后再返回结果。其实对于某些型号的路由器,我们完全可以直接读取它的外网IP,比如TP-LINK,下面是VB.NET实现代码,另附连接和断线两段代码:
''' <summary> ''' 连接外网 ''' </summary> Public Sub Connect(ByVal UserName As String, ByVal Password As String) Dim xHttp As Object = CreateObject("MSXML2.XMLHTTP") xHttp.open("GET", "http://192.168.2.2/userRpm/StatusRpm.htm?Connect=连 接&wan=1", False, UserName, Password) xHttp.send() System.Runtime.InteropServices.Marshal.ReleaseComObject(xHttp) xHttp = Nothing End Sub ''' <summary> ''' 断开外网连接 ''' </summary> Public Sub Disconnect(ByVal UserName As String, ByVal Password As String) Dim xHttp As Object = CreateObject("MSXML2.XMLHTTP") xHttp.open("GET", "http://192.168.2.2/userRpm/StatusRpm.htm?Disconnect=断 线&wan=1", False, UserName, Password) xHttp.send() System.Runtime.InteropServices.Marshal.ReleaseComObject(xHttp) xHttp = Nothing End Sub ''' <summary> ''' 获得外网IP ''' </summary> Public Function GetWanIp(ByVal UserName As String, ByVal Password As String) As String Dim strIP As String = "0.0.0.0" Dim xHttp As Object = CreateObject("MSXML2.XMLHTTP") xHttp.open("GET", "http://192.168.2.2/userRpm/StatusRpm.htm?Connect=连 接&wan=1", False, UserName, Password) xHttp.send() If xHttp.readyState = 4 AndAlso xHttp.Status = 200 Then Dim strHTML As String = Text.Encoding.Default.GetString(xHttp.responseBody) strHTML = strHTML.Substring(strHTML.IndexOf("var wanPara")) strHTML = strHTML.Substring(0, strHTML.IndexOf(";")) strIP = strHTML.Split(",")(2).Replace("""", "").Trim() End If System.Runtime.InteropServices.Marshal.ReleaseComObject(xHttp) xHttp = Nothing Return strIP End Function
另,对于连接外网和断开外网连接操作,可能有的朋友已在某些博客中见到过,而我还在这儿标识为“原创”,原因是当初我未找到类似代码,通过拦截和分析HTTP数据包,才写了出来,后来发现网上有类似的,大概算是”英雄所见略同“吧。