本帖最后由 batman 于 2013-9-6 23:39 编辑
&&&&获取本机外网IP的方法有很多种,我在这里把自己知道的几种方法写出来,以方便大家查询。也欢迎大家跟帖补充。
&&&&第一种方法,批处理从IPCONFIG执行信息中获取: | @echo off&setlocal enabledelayedexpansion | | for /f "delims=" %%a in ('ipconfig') do ( | | set "str=%%a" | | if not defined ip ( | | if defined flag ( | | if "!str:IP Address=!" neq "!str!" ( | | set "ip=!str:*:=!" | | set "ip=!ip:~1!" | | ) | | ) | | if "!str:~,3!" equ "PPP" set "flag=a" | | ) | | ) | | echo,%ip% | | pause>nulCOPY |
&&&&第二种方法,批处理从WMIC NICCONFIG执行信息中获取: | @echo off | | for /f "tokens=2 delims={}" %%a in ('^(wmic nicconfig where "ipenabled='true'" get caption^,ipaddress^)^|find /i "WAN"') do set "ip=%%~a" | | echo,%ip% | | pause>nulCOPY |
&&&&第三种方法,VBS通过WMI从NetworkAdapterConfiguration组件信息中获取(类似于第二种方法): | Dim objWMI, objItems, objItem | | Set objWMI = GetObject("Winmgmts:") | | Set objItems = objWMI.ExecQuery _ | | ("Select * From Win32_NetworkAdapterConfiguration " _ | | & "Where IpEnabled = True") | | For Each objItem In objItems | | If InStr(objItem.Caption, "WAN") Then | | For Each ip In objItem.IpAddress | | WScript.Echo ip | | Next | | End If | | Next | | Set objItems = Nothing | | Set objWMI = NothingCOPY |
&&&&第四种方法,VBS调用IE对象从网页节点元素中获取: | Dim objIE, Url, Text | | Set objIE = CreateObject("Internetexplorer.Application") | | Url = "http://iframe.ip138.com/ic.asp" | | objIE.Visible = False | | objIE.Navigate Url | | Do Until objIE.ReadyState = 4 | | WScript.Sleep 200 | | Loop | | Text = objIE.Document.DocumentElement.InnerText | | objIE.Quit | | Set objIE = Nothing | | Dim objREG, Ip | | Set objREG = New RegExp | | objREG.Pattern = ".*?(\d{1,}\.\d{1,}\.\d{1,}\.\d{1,}).*" | | Ip = objREG.Replace(Text, "$1") | | Set objREG = Nothing | | WScript.Echo IpCOPY |
&&&&第五种方法,VBS调用DOM组件从网页节点元素中获取(同于第四种方法): | Dim objDOM, Url, Text, Ip | | Url = "http://iframe.ip138.com/ic.asp" | | Set objDOM = WScript.GetObject(Url) | | Do Until objDOM.ReadyState = "complete" | | WScript.Sleep 200 | | Loop | | Text = objDOM.DocumentElement.InnerText | | Set objDOM = Nothing | | Ip = Split(Split(Text, "[")(1), "]")(0) | | WScript.Echo IpCOPY |
&&&&以上五种方法各有优劣,其中第一到第三种方法仅适合拔号连接网络,第四和第五种适合各种网络连接,但是如果你的浏览器不是默认为IE的话,第四种可能会出现访问不了的情况,同时第五种在你的网络安全级别较高的情况下,就有可能弹出警告或直接被限制访问而获取失败。有许有人会说还有从TRACERT和ROUTE PRINT中获取的方法,我可以告诉你,TRACERT中获取到的外网IP并不是你真正的IP,而ROUNTE PRINT中可以看到外网IP,却没有办法用程序来判断哪个是外网IP(至少我是没有办法)。同时声明一下,这些代码本人仅在XP和2003下测试过,如大家发现问题请提出来,我也好及时修正代码。 |