[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] 批处理和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下测试过,如大家发现问题请提出来,我也好及时修正代码。
***共同提高***

  1. @echo off
  2. echo,请稍等...
  3. >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
  4. for /f "tokens=2,3 delims=[]" %%i in ('"cscript //nologo Getip.vbs"') do echo 当前外网 IP 是: %%i %%j
  5. del Getip.vbs
  6. pause
复制代码
这个网上找来的,也不错。

TOP

回复 2# 522235677


    这不就是我说的第五种方法?
***共同提高***

TOP

回复 3# batman


    嗯,你的好像直接就能把IP截取出来了

TOP

VBS 调用 Msxml2.ServerXMLHTTP 获取网页上的地址信息
  1. ' getIP.vbs
  2. Msgbox "外网IP为:" & getIP()
  3. Function getIP()
  4.     Dim strHtml, strIP
  5.     If strIP = "" Then
  6.         strHtml = HttpGet("http://yu2n.sinaapp.com/app/f/ip/AddIP.php?ip=show_client")
  7.         strIP = Join(regEx_execute("\d+\.\d+\.\d+\.\d+", strHtml))
  8.     End If
  9.     If strIP = "" Then
  10.         strHtml = HttpGet("http://iframe.ip138.com/ic.asp")
  11.         strIP = Join(regEx_execute("\d+\.\d+\.\d+\.\d+", strHtml))
  12.     End If
  13.     If strIP = "" Then
  14.         strHtml = HttpGet("http://www.whereismyip.com/")
  15.         strIP = Join(regEx_execute("\d+\.\d+\.\d+\.\d+", strHtml))
  16.     End If
  17.     getIP = strIP
  18. End Function
  19. Function HttpGet(ByVal url)
  20.     With CreateObject("Msxml2.ServerXMLHTTP")
  21.         .open "GET", url, False
  22.         .send
  23.         HttpGet = .responseText
  24.     End With
  25. End Function
  26. ' ====================================================================================================
  27. ' 检查字符串是否符合正则表达式
  28. 'Msgbox Join(regEx_execute( "[A-z]", "a-v d-f b-c"), " | ")
  29. 'Msgbox regEx_replace( "[A-z]+-[A-z]+", "a-v d-f b-c", " | ")
  30. ' 取得正则表达式搜索结果,返回数组
  31. Function regEx_execute(ByVal sPattern, ByVal str)
  32.     Dim regEx, Match, Matches, arrMatchs(), i : i = -1    ' 建立变量。
  33.     Set regEx = CreateObject("VBScript.RegExp") ' 建立正则表达式。
  34.         regEx.Pattern = sPattern      ' 设置模式。
  35.         regEx.IgnoreCase = True    ' 设置是否区分字符大小写。
  36.         regEx.Global = True        ' 设置全局可用性。
  37.         regEx.MultiLine = True     ' 多行匹配模式
  38.     Set Matches = regEx.Execute(str)      ' 执行搜索。
  39.     For Each Match in Matches  ' 遍历匹配集合。
  40.         If Not Match.Value = "" Then
  41.             i = i + 1
  42.             ReDim Preserve arrMatchs(i) ' 动态数组:数组随循环而变化
  43.             arrMatchs(i) = Match.Value
  44.         End If
  45.     Next
  46.     regEx_execute = arrMatchs
  47. Set Match = Nothing
  48. Set regEx = Nothing
  49. End Function
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

用第5个代码,获取外网IP后,保存在TXT文件里,应该改什么地方

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
1

评分人数

TOP

本帖最后由 pcl_test 于 2019-5-8 21:32 编辑

回复 6# mingjianko
  1. With CreateObject("Microsoft.XMLHTTP")
  2.     .open "GET", "http://2019.ip138.com/ic.asp", False
  3.     .send
  4.     ip= Split(Split(.responseText, "[")(1),"]")(0)
  5. End With
  6. CreateObject("Scripting.FileSystemObject").CreateTextFile("IP.txt", 1).Write ip
复制代码

TOP

返回列表