查寻当前IP地址

@echo off

echo,请稍等...

>Getip.vbs echo Set oDOM=WScript.GetObject("http://iframe.ip138.com/ic.asp"):Do Until oDOM.readyState="complete":WScript.sleep 1:Loop:WScript.echo oDOM.documentElement.outerText:Set oDOM=nothing

for /f "tokens=2,3 delims=[]" %%i in ('"cscript //nologo Getip.vbs"') do echo 当前外网 IP 是: %%i %%j

del Getip.vbs

pause

 

 

 

 批处理和VBS获取本机外网IP方法汇总

 
本帖最后由 batman 于 2013-9-6 23:39 编辑 

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

 
 
posted @ 2013-09-22 22:46  cnsealine  阅读(2008)  评论(0编辑  收藏  举报