根据网络适配器的名字获取IP地址
本帖最后由 白隼 于 2014-12-12 23:46 编辑假如我有三个本地连接。我想用AU3通过其名字获取IP地址。
比如获取 名字叫:本地连接 的IP地址
或者获取 名字叫:Net 的IP地址
通过各位老大的解答。现在已经OK了。下面是源码。
嘿嘿,现在有点缺钱,就还是希望大家付点费吧。
回复 1# 白隼 $iPid = Run('ipconfig /all', @SystemDir, 0, 0x2)
ProcessWait($iPid)
$text = StdoutRead($iPid)
Local $input = ''
Do
$input = InputBox('输入网卡名称', '这里输入要查询的网卡名称', '本地连接')
Until $input <> ''
$aRe = StringRegExp($text, '(?sm)^.*?适配器\h*' & $input & ':.+?(?!:物理)地址.+?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', 3)
If @error Then
MsgBox(32, 'err', '此网卡不存在')
Else
MsgBox(64, $input & ' ip:', $aRe)
EndIf 回复 2# user3000
感谢,这个我也想过
不过有个问题 系统兼容性
因为是通过命令返回结果来提取的。XP和WIN7就返回的是不一样的。 本帖最后由 user3000 于 2014-11-7 20:09 编辑
回复 3# 白隼
"兼容XP":'(?ism)^.*?(?:适配器|adapter)\h*' & $input & ':.+?(?!:物理|physical )(?:地址|address).+?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' 改你的VBS似乎比较简单~{:face (303):}
Dim $strIPAddresses = "", $config
Dim $WMI = ObjGet("winmgmts:")
Dim $colNic = $WMI.ExecQuery("SELECT * FROM " & "Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
For $config In $colNic
ConsoleWrite("Network Adapter: " & $config.Index)
If IsArray($config.IPAddress) Then
$strIPAddresses = $config.IPAddress
Else
$strIPAddresses = ""
EndIf
ConsoleWrite("IP Address(es): " & $strIPAddresses & @CRLF)
Next
名字可能是 多个'本地连接 x' 啊 回复 5# haijie1223
感谢,太强了。。我知道我为什么写的不行了
我的IPAddress后面没有加数组的值
所以返回的都是空白 感谢user3000
能给解释下 这个正则吗?我实在是看不懂。。看这个正则看了老办天,也没看明白'(?ism)^.*?(?:适配器|adapter)\h*' & $input & ':.+?(?!:物理|physical )(?:地址|address).+?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'看不懂这个都代表什么意思。。。看着正则的列表,找到这几个了,但没看懂是怎么回事。 本帖最后由 白隼 于 2014-11-9 21:21 编辑
感谢各位老大为小弟解答。。
代码还有一个小问题,就是我不懂WMI,如果按第一个查询,只出网卡的名字,不出IP地址。按第二个查询,只出IP地址,不出网卡的名字。
导致不能用一个语句匹配出网卡的名字对应的IP地址。 所以只能多写了点代码。。。希望有老大能解决下。
不过现在也不影响使用。嘿嘿 本帖最后由 user3000 于 2014-11-9 21:40 编辑
回复 8# 白隼
要相关文本对照才好解释.就是捕获对应网上的IP.
在win7下,以"某某适配器 连接名称:"显示该网卡名,但XP下则是"XXX Adapter 连接名称:"
所以".*?(?:适配器|adapter)\h*' & $input & ':)"这部分正则是确认该网卡的在输出文本中的"位置".
紧接着是确认该网卡的IP的位置:".+?(?!:物理|physical )(?:地址|address).+?"
WIN7下此IP前面是" Pv4 地址 . . . . . . . . . . . . : "的字符串.前面还有个物理地址,所以用"(?!:物理|physical )"指出是一个"非物理"的地址.XP下类似.
可能是我想多了,担心有的WIN7不用"Pv4"这样的描述.
实质上,运行"ipconfig" 不带"all"参数更好.比如下面的输出文本可以这样匹配:'(?ism)^.*?(?:适配器|adapter)\h*' & $input & ':.+?(?:地址|address).+?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'后面直接用".+?地址"就能确认IP的具体位置了.
因为紧接在连接名称后面的只有一个"地址".Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Windows\system32>ipconfig
Windows IP 配置
以太网适配器 本地连接:
媒体状态. . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 无线网络连接:
连接特定的 DNS 后缀 . . . . . . . :
IPv4 地址 . . . . . . . . . . . . : 192.168.43.166
子网掩码. . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.43.254
隧道适配器 isatap.{0A7881DC-EB5B-482E-BB9E-0F2A4D0D589B}:
媒体状态. . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
C:\Windows\system32> 回复 10# user3000
感谢老大,太谢谢了。 真不知道你是来问问题的,还是来收钱卖码的..... 人家帮你解决了,你却自己来收费了。。。唉!~
真不知道你是来问问题的,还是来收钱卖码的..... 人
页:
[1]