标题: [系统相关] [已解决]批处理为何获取不到正确的本地连接IP? [打印本页]
作者: q120072949 时间: 2010-9-20 13:49 标题: [已解决]批处理为何获取不到正确的本地连接IP?
当我没有连接VPN时可以获取到正确的内网IP,比如我局域网IP是192.168.1.11
但我连接了VPN虚拟专用网路连接后,获取到的地址成了外网IP,代码要怎么样修改??- @echo off FOR /f "tokens=2 delims=:" %%i in ('ipconfig^|find/i "ip address"') do Set IP=%%i
- echo IP:%IP%
- pause
复制代码
获取结果是192.168.1.11,但拨VPN后怎么都得不到这个结果,得到的是打开IP138显示的外网IP
我想在不断开VPN的情况下获取到本地连接的局域网地址192.168.1.11
[ 本帖最后由 q120072949 于 2011-3-11 09:47 编辑 ]
作者: batman 时间: 2010-9-20 14:38
请在连接上vpn运行后将ipconfig /all的结果贴出来
作者: q120072949 时间: 2010-9-20 15:04
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator>ipconfig/all
Windows IP Configuration
Host Name . . . . . . . . . . . . : PCPCPCPCPCPCPCPCPCPC
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Mixed
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
Ethernet adapter 本地连接:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Realtek PCIe GBE Family Controller
Physical Address. . . . . . . . . : 00-30-67-47-66-C8
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 192.168.1.11
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . : 192.168.1.1
DNS Servers . . . . . . . . . . . : 202.101.224.68
202.101.224.69
PPP adapter VPN:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
Physical Address. . . . . . . . . : 00-53-45-00-00-00
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 169.254.33.10
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : 169.254.33.10
DNS Servers . . . . . . . . . . . : 203.141.128.33
203.141.128.34
C:\Documents and Settings\Administrator>
作者: batman 时间: 2010-9-20 15:17 标题: 以下是不通用解法
- @echo off
- for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|findstr /c:"IP Address"') do if not defined ip set "ip=%%a"
- echo IP:%ip:~1%
- pause>nul
复制代码
作者: q120072949 时间: 2010-9-20 16:05
膜拜啊,高人!
谢谢版主了!!
不通用解决方式意思是有时行不通么,我在自己电脑上弄好了,在另一台上面还是获取的外网IP哦,我搞不明白,
那台机器的IP:
Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.
C:\Documents and Settings\Administrator>ipconfig/all
Windows IP Configuration
Host Name . . . . . . . . . . . . : vm010
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Unknown
IP Routing Enabled. . . . . . . . : Yes
WINS Proxy Enabled. . . . . . . . : Yes
PPP adapter RAS Server (Dial In) Interface:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
Physical Address. . . . . . . . . : 00-53-45-00-00-00
DHCP Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 169.254.15.61
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . :
Ethernet adapter 本地连接:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Network Connection
Physical Address. . . . . . . . . : 00-0C-29-7F-42-39
DHCP Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 192.168.6.110
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
DNS Servers . . . . . . . . . . . : 203.141.128.33
203.141.128.34
PPP adapter pppoe_native_wan_miniport:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
Physical Address. . . . . . . . . : 00-53-45-00-00-00
DHCP Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 125.198.93.91
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : 0.0.0.0
DNS Servers . . . . . . . . . . . : 202.225.94.247
210.147.240.193
NetBIOS over Tcpip. . . . . . . . : Disabled
C:\Documents and Settings\Administrator>
作者: q120072949 时间: 2010-9-20 16:12
获取结果是
IP:169.254.15.61
但这台机器上IP138得到的IP却是:125.198.93.91
批处理获取到的IP在IPCONFIG/ALL里又成了第一个IP Address.
本地IP是192.168.6.110
得到的是第一个IP Address信息,
批处理能否识别出"本地连接"这个名字??电脑上有可能有VPN,PPTP,PPP,ADSL等
作者: batman 时间: 2010-9-20 16:24 标题: 呵呵,本来想偷下懒的。。。
以下是通用解决方法:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims=:" %%a in ('ipconfig /all') do (
- if "%%a" equ "Ethernet adapter 本地连接" set "flag=a"
- if defined flag set /a n+=1
- if !n! equ 7 set "ip=%%b"
- )
- echo IP:%ip:~1%
- pause>nul
复制代码
作者: q120072949 时间: 2010-9-20 16:39
版主就是牛,呵呵,第一次的代码也没有偷懒啦!
各有千秋,各有利弊.
比如说当机器都是象第一种那样,只有本地连接(名字可能不是为:本地连接1或者本地连接2)和VPN的话
第一次的代码是对的,
如果名字都是"本地连接",那第一种第二种都是对的
可如果机器有双网卡,网线这次插的口不一样,本地连接成了"本地连接2"."本地连接3"之类的
那么第一种获取到的不是内网IP,第二种获取到的结果是:IP:~1(空值,呵呵)
批处理可以判断连接的类型么,比如不管本地连接还是本地连接1.2.3,前面一定有一行标识:Ethernet adapter
能否读取这个Ethernet adapter后面的IP Address值,这个IP Address值应该没有上面尴尬的意外出现吧
这样就算你把VPN名字改成"本地连接",但IPCONFIG/ALL显示的Ethernet adapter里的IP Address值就永远都是内网IP
哪怕有多网卡,或者ADSL,VPN什么的名字是"本地连接"也没关系
当然这是我的一点小想法,我刚刚接触批处理,上面2种代码我都学习了,已经可以满足我现在的要求了,呵呵,谢谢老版啦!
作者: q120072949 时间: 2010-9-20 16:44
这个是显示出所有连接的IP,
http://www.bathome.net/thread-8949-1-19.html
for /f "tokens=15" %%i in ('ipconfig ^| find /i "ip address"') do echo %%i
呵呵,只要内网IP就可以了
作者: batman 时间: 2010-9-20 16:51 标题: 回复 8楼 的帖子
如果是多网卡,电脑是无法识别那个网卡是你需要获取的内网ip的(除非事先有规则),唉,电脑最终是不及人脑的。
作者: q120072949 时间: 2010-9-20 16:56
原帖由 batman 于 2010-9-20 16:51 发表
如果是多网卡,电脑是无法识别那个网卡是你需要获取的内网ip的(除非事先有规则),唉,电脑最终是不及人脑的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
呵呵,老版误会我的意思了,这么说把,如果机器就一块网卡,但本地连接并不是叫"本地连接",或者VPN和ADSL被改成了本地连接
不管名字怎么修改,在CMD里运行IPCONFIG/ALL得到的结果中,Ethernet adapter后面的IP Address值始终是内网IP,
能否读取这个Ethernet adapter后面的IP Address值,这个IP Address值应该没有上面尴尬的意外出现吧
这样就算你把VPN名字改成"本地连接",但IPCONFIG/ALL显示的Ethernet adapter里的IP Address值就永远都是内网IP
或者网卡不叫本地连接,ADSL,VPN什么的名字是"本地连接"也没关系
这样的话就不局限于网线插上后网卡显示名字,得到的代码始终是内网IP
作者: batman 时间: 2010-9-20 17:01
如果有三片或三片以上的网卡呢(其中只有一片是连接外网的,其他的都是连接内网的)
作者: q120072949 时间: 2010-9-20 17:45
对的,每个连接后面都有IP Address信息
5楼就是有3个连接,Ethernet adapter后面的IP Address就是内网IP信息啊,只需要读取这个后面的IP Address
作者: q120072949 时间: 2010-9-20 18:30
难道版主的意思是:IPCONFIG/ALL里面的Ethernet adapter不一定表示本地连接???
或者说本地连接在IPCONFIG/ALL里面不一定叫做Ethernet adapter
那么Ethernet adapter这个是什么意思?百度得到的是:以太网适配器,通俗说就是网卡
就按照Ethernet adapter是本地连接内网IP,怎么获取到Ethernet adapter后面的IP Address
而不是获取其他的比如:
Windows IP Configuration
PPP adapter RAS Server (Dial In) Interface
PPP adapter pppoe_native_wan_miniport
.......
之类
只需要得到Ethernet adapter后面的IP Address即可
作者: q120072949 时间: 2010-9-21 13:19
这个问题我还是没弄好
不知道怎么得到Ethernet adapter后面的IP Address
- -!
作者: Batcher 时间: 2010-9-21 13:32 标题: 回复 15楼 的帖子
- @echo off
- ipconfig /all>"%temp%\ipList.txt"
- for /f "tokens=1 delims=:" %%a in ('findstr /n "Ethernet adapter" "%temp%\ipList.txt"') do (
- set SkipRow=%%a
- goto :DoSkip
- )
-
- :DoSkip
- for /f "usebackq skip=%SkipRow% tokens=1,15" %%a in ("%temp%\ipList.txt") do (
- if "%%a" equ "IP" (
- set IP=%%b
- goto :ShowResult
- )
- )
-
- :ShowResult
- echo,%IP%
复制代码
作者: q120072949 时间: 2010-9-21 18:29 标题: 批处理如何获取指定行后面的值
首先看一段IPCONFIG/ALL得到的信息:
Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.
C:\Documents and Settings\Administrator>ipconfig/all
Windows IP Configuration
Host Name . . . . . . . . . . . . : vm010
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Unknown
IP Routing Enabled. . . . . . . . : Yes
WINS Proxy Enabled. . . . . . . . : Yes
PPP adapter RAS Server (Dial In) Interface:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
Physical Address. . . . . . . . . : 00-53-45-00-00-00
DHCP Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 169.254.15.61
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . :
Ethernet adapter 本地连接:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Network Connection
Physical Address. . . . . . . . . : 00-0C-29-7F-42-39
DHCP Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 192.168.6.110
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
DNS Servers . . . . . . . . . . . : 203.141.128.33
203.141.128.34
PPP adapter pppoe_native_wan_miniport:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
Physical Address. . . . . . . . . : 00-53-45-00-00-00
DHCP Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 125.198.93.91
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : 0.0.0.0
DNS Servers . . . . . . . . . . . : 202.225.94.247
210.147.240.193
NetBIOS over Tcpip. . . . . . . . : Disabled
C:\Documents and Settings\Administrator>
上面有几个连接:
Windows IP Configuration
PPP adapter RAS Server (Dial In) Interface:
Ethernet adapter 本地连接:
PPP adapter pppoe_native_wan_miniport:
每个连接后面都带有一个IP Address信息
我只想获取Ethernet adapter这个连接后面的IP Address信息
需要注意的是这个连接可能为
“Ethernet adapter 本地连接1:”“Ethernet adapter 本地连接2:”
甚至“Ethernet adapter 1234:”
即Ethernet adapter 后面的内容不确定,能否用批处理获取到“Ethernet adapter xxx:”(XXX为未知内容)后面的IP Address信息呢?
参考帖子:
http://www.bathome.net/thread-9361-1-1.html
作者: q120072949 时间: 2010-9-21 18:41
如上面内容里的中,我想获取的IP Address是192.168.6.110,但IP Address的个数不限
也就是说不管有几个连接,不一定是下面的4个
Windows IP Configuration
PPP adapter RAS Server (Dial In) Interface:
Ethernet adapter 本地连接:
PPP adapter pppoe_native_wan_miniport:
可能只有1个或者5个和更多,获取第三个IP Address值不可取
只要获取到的是“Ethernet adapter xxx:”(XXX为未知内容)后面的IP Address信息
那肯定是我想要的
作者: vsbat 时间: 2010-9-21 19:38
- @echo off
- cd.>result.txt
- set flag=vsbat
- for /f "delims=" %%i in (1.txt) do (
- if defined flag (
- echo "%%i"|findstr /c:"Ethernet adapter" && set flag=
- ) else (
- echo %%i|findstr /c:"IP Address" && (set "t= %%i" & goto :DEAL)
- )
- )
- goto :END
- :DEAL
- for /f "tokens=2 delims=:" %%i in ("%t%") do echo %%i >> result.txt
- echo 成功提取!
- :END
- pause
复制代码
作者: q120072949 时间: 2010-9-25 17:39 标题: 回复 16楼 的帖子
第二行少个东西,哈哈
ipconfig/all>1.txt
作者: q120072949 时间: 2010-9-25 17:42
谢谢batcher和vsbat,们两个的代码都不错,已经达到了这个目的,
谢谢batman,的耐心解答,你的思路很宽广,你的代码已经解决我的那个问题,只是我有点完美心里作怪哈!
作者: q120072949 时间: 2010-9-25 17:42
这个论坛还是不错的!
作者: cjiabing 时间: 2010-9-25 19:10 标题: 回复 1楼 的帖子
echo 不在括号内时只获取FOR最后一个循环,要获取所有需加括号:
do (
Set IP=%%i
echo IP:%IP%
)
使用“ipconfig all”可能会获得更多信息,但不一定全部有用。
作者: q120072949 时间: 2011-1-22 11:57
翻出老帖来学习下!!!
作者: loongchip 时间: 2018-9-20 00:08
感谢各位,学习一下
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |