找回密码
 加入
搜索
查看: 10934|回复: 12

[网络通信] 根据网络适配器的名字获取IP地址

    [复制链接]
发表于 2014-11-6 23:31:18 | 显示全部楼层 |阅读模式
本帖最后由 白隼 于 2014-12-12 23:46 编辑

假如我有三个本地连接。我想用AU3通过其名字获取IP地址。

比如获取 名字叫:本地连接 的IP地址
或者获取 名字叫:Net 的IP地址

通过各位老大的解答。现在已经OK了。下面是源码。
嘿嘿,现在有点缺钱,就还是希望大家付点费吧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-11-7 18:29:46 | 显示全部楼层
回复 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[0])
EndIf
 楼主| 发表于 2014-11-7 18:58:49 | 显示全部楼层
回复 2# user3000


    感谢,这个我也想过
不过有个问题   系统兼容性
因为是通过命令返回结果来提取的。XP和WIN7就返回的是不一样的。
发表于 2014-11-7 20:01:43 | 显示全部楼层
本帖最后由 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})'
发表于 2014-11-7 20:09:53 | 显示全部楼层
改你的VBS似乎比较简单~
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[0]
 Else
  $strIPAddresses = ""
 EndIf
 ConsoleWrite("  IP Address(es): " & $strIPAddresses & @CRLF)
Next
发表于 2014-11-9 11:17:30 | 显示全部楼层
名字可能是 多个'本地连接 x' 啊
 楼主| 发表于 2014-11-9 20:20:19 | 显示全部楼层
回复 5# haijie1223


  感谢,太强了。。我知道我为什么写的不行了
我的IPAddress后面没有加数组的值[0]
所以返回的都是空白
 楼主| 发表于 2014-11-9 20:22:26 | 显示全部楼层
感谢user3000
能给解释下 这个正则吗?我实在是看不懂。。看这个正则看了老办天,也没看明白
'(?ism)^.*?(?:适配器|adapter)\h*' & $input & ':.+?(?!:物理|physical )(?:地址|address).+?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
看不懂这个都代表什么意思。。。看着正则的列表,找到这几个了,但没看懂是怎么回事。
 楼主| 发表于 2014-11-9 21:15:02 | 显示全部楼层
本帖最后由 白隼 于 2014-11-9 21:21 编辑

感谢各位老大为小弟解答。。
代码还有一个小问题,就是我不懂WMI,如果按第一个查询,只出网卡的名字,不出IP地址。按第二个查询,只出IP地址,不出网卡的名字。
导致不能用一个语句匹配出  网卡的名字对应的IP地址。 所以只能多写了点代码。。。希望有老大能解决下。
不过现在也不影响使用。嘿嘿
发表于 2014-11-9 21:37:49 | 显示全部楼层
本帖最后由 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>
 楼主| 发表于 2014-11-9 23:27:36 | 显示全部楼层
回复 10# user3000


    感谢老大,太谢谢了。
发表于 2014-11-10 13:08:01 | 显示全部楼层
真不知道你是来问问题的,还是来收钱卖码的.....   人家帮你解决了,你却自己来收费了。。。唉!~
发表于 2019-11-30 17:50:26 | 显示全部楼层

真不知道你是来问问题的,还是来收钱卖码的.....   人
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 17:49 , Processed in 0.088201 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表