本帖最后由 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>nul
复制代码 &&&&第二种方法,批处理从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>nul
复制代码 &&&&第三种方法,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 = Nothing
复制代码 &&&&第四种方法,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 Ip
复制代码 &&&&第五种方法,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 Ip
复制代码 &&&&以上五种方法各有优劣,其中第一到第三种方法仅适合拔号连接网络,第四和第五种适合各种网络连接,但是如果你的浏览器不是默认为IE的话,第四种可能会出现访问不了的情况,同时第五种在你的网络安全级别较高的情况下,就有可能弹出警告或直接被限制访问而获取失败。有许有人会说还有从TRACERT和ROUTE PRINT中获取的方法,我可以告诉你,TRACERT中获取到的外网IP并不是你真正的IP,而ROUNTE PRINT中可以看到外网IP,却没有办法用程序来判断哪个是外网IP(至少我是没有办法)。同时声明一下,这些代码本人仅在XP和2003下测试过,如大家发现问题请提出来,我也好及时修正代码。 |