标题: [原创] 批处理和VBS获取本机外网IP方法汇总 [打印本页]
作者: batman 时间: 2013-9-6 23:37 标题: 批处理和VBS获取本机外网IP方法汇总
本帖最后由 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下测试过,如大家发现问题请提出来,我也好及时修正代码。
作者: 522235677 时间: 2013-9-6 23:53
- @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
复制代码
这个网上找来的,也不错。
作者: batman 时间: 2013-9-7 00:44
回复 2# 522235677
这不就是我说的第五种方法?
作者: 522235677 时间: 2013-9-7 14:12
回复 3# batman
嗯,你的好像直接就能把IP截取出来了
作者: yu2n 时间: 2014-1-28 22:28
VBS 调用 Msxml2.ServerXMLHTTP 获取网页上的地址信息- ' getIP.vbs
- Msgbox "外网IP为:" & getIP()
-
- Function getIP()
- Dim strHtml, strIP
- If strIP = "" Then
- strHtml = HttpGet("http://yu2n.sinaapp.com/app/f/ip/AddIP.php?ip=show_client")
- strIP = Join(regEx_execute("\d+\.\d+\.\d+\.\d+", strHtml))
- End If
- If strIP = "" Then
- strHtml = HttpGet("http://iframe.ip138.com/ic.asp")
- strIP = Join(regEx_execute("\d+\.\d+\.\d+\.\d+", strHtml))
- End If
- If strIP = "" Then
- strHtml = HttpGet("http://www.whereismyip.com/")
- strIP = Join(regEx_execute("\d+\.\d+\.\d+\.\d+", strHtml))
- End If
- getIP = strIP
- End Function
-
- Function HttpGet(ByVal url)
- With CreateObject("Msxml2.ServerXMLHTTP")
- .open "GET", url, False
- .send
- HttpGet = .responseText
- End With
- End Function
-
- ' ====================================================================================================
- ' 检查字符串是否符合正则表达式
- 'Msgbox Join(regEx_execute( "[A-z]", "a-v d-f b-c"), " | ")
- 'Msgbox regEx_replace( "[A-z]+-[A-z]+", "a-v d-f b-c", " | ")
- ' 取得正则表达式搜索结果,返回数组
- Function regEx_execute(ByVal sPattern, ByVal str)
- Dim regEx, Match, Matches, arrMatchs(), i : i = -1 ' 建立变量。
- Set regEx = CreateObject("VBScript.RegExp") ' 建立正则表达式。
- regEx.Pattern = sPattern ' 设置模式。
- regEx.IgnoreCase = True ' 设置是否区分字符大小写。
- regEx.Global = True ' 设置全局可用性。
- regEx.MultiLine = True ' 多行匹配模式
- Set Matches = regEx.Execute(str) ' 执行搜索。
- For Each Match in Matches ' 遍历匹配集合。
- If Not Match.Value = "" Then
- i = i + 1
- ReDim Preserve arrMatchs(i) ' 动态数组:数组随循环而变化
- arrMatchs(i) = Match.Value
- End If
- Next
- regEx_execute = arrMatchs
- Set Match = Nothing
- Set regEx = Nothing
- End Function
复制代码
作者: mingjianko 时间: 2016-6-23 17:01
用第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
作者: pcl_test 时间: 2016-6-24 00:53
本帖最后由 pcl_test 于 2019-5-8 21:32 编辑
回复 6# mingjianko - With CreateObject("Microsoft.XMLHTTP")
- .open "GET", "http://2019.ip138.com/ic.asp", False
- .send
- ip= Split(Split(.responseText, "[")(1),"]")(0)
- End With
- CreateObject("Scripting.FileSystemObject").CreateTextFile("IP.txt", 1).Write ip
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |