bluecap 发表于 2020-12-3 17:40:00

请教怎样获取指定网络连接的ip地址?


我已经查到如何获取连接名称的办法,也知道可以通过@IPAddress1 @IPAddress2获取ip地址。
比如我电脑有多个网络连接,分别是本地连接1、本地连接2,现在我想获取本地连接2的ip地址,应该如何实现?
@IPAddress2不能对应指定的网卡名。
我也查到有些网友是用ipconfig获取一段文本,然后提取,想知道还有没有更简单一点的方法呢?谢谢!

yuantian 发表于 2020-12-6 09:53:37

本帖最后由 yuantian 于 2020-12-6 10:38 编辑

我的思路大概是先根据网络连接名称,找到对应的MAC地址,然后 根据MAC地址,找到对应的IP



wmic nic where (not NetConnectionID=null) get productname,NetConnectionID,MACAddress

wmic nicconfig WHERE MACAddress="这里填写网卡MAC地址" get ipaddress /value

bluecap 发表于 2020-12-7 16:33:28

yuantian 发表于 2020-12-6 09:53
我的思路大概是先根据网络连接名称,找到对应的MAC地址,然后 根据MAC地址,找到对应的IP

感谢大神的好办法,不过我水平太低,还要请问,按照此方法得出来的ip,如何把它赋值给我定义的系统变量呢?可以不通过读写文件来实现吗?

yuantian 发表于 2020-12-7 21:59:29

本帖最后由 yuantian 于 2020-12-7 22:40 编辑

bluecap 发表于 2020-12-7 16:33
感谢大神的好办法,不过我水平太低,还要请问,按照此方法得出来的ip,如何把它赋值给我定义的系统变量呢 ...
大概这个意思:



#include <Array.au3>


Global $GetIDName = "以太网"

$GetMacAddArray = StringRegExp(__Run_Bat_Get_Echo("wmic nic where (not NetConnectionID=null And NetConnectionID like '%" & $GetIDName & "%') get MACAddress /value"), "(?m)MACAddress=(.*)", 3, 1)
If IsArray($GetMacAddArray) Then
      For $a = 0 To UBound($GetMacAddArray) - 1
                $GetIP = __Run_Bat_Get_Echo('wmic nicconfig WHERE MACAddress="' & $GetMacAddArray[$a] & '" get ipaddress /value')
                $GetIPArray = StringRegExp($GetIP, '"(.*?)"', 3, 1)
                If IsArray($GetIPArray) Then _ArrayDisplay($GetIPArray, $GetMacAddArray[$a])
      Next
EndIf


Func __Run_Bat_Get_Echo($Command);运行批处理命令,并返回执行结果

      ;功能    :完整返回批处理命令的执行回显。不会出现乱码或者缺失。支持将多条命令连在一起执行
      ;注意    :支持带参数执行批处理。支持带变量执行批处理。但变量中请注意“'”标点符号的使用,不使用或需要成对使用。
      ;作者    :迷路轮回
      ;编写时间:2018-02-27
      ;最后更新:2019-02-03
      Local $iPID = Run(@ComSpec & ' /c ' & $Command, @ScriptDir, @SW_HIDE, 8)
      If Not @error Then
                ProcessWaitClose($iPID)
                Local $Result = BinaryToString(StdoutRead($iPID, 1, 1))
                Return $Result
      EndIf

EndFunc   ;==>__Run_Bat_Get_Echo

==================================
更新增加显示网络连接名称:




#include <Array.au3>


Global $GetIDName = "WLAN"

$GetIDResult = __Run_Bat_Get_Echo("wmic nic where (not NetConnectionID=null And NetConnectionID like '%" & $GetIDName & "%') get MACAddress,NetConnectionID /value")
$GetMacAddArray = StringRegExp($GetIDResult, "(?m)=(.*)", 3, 1)
If IsArray($GetMacAddArray) Then
      For $a = 0 To UBound($GetMacAddArray) - 1 Step 2
                $GetIP = __Run_Bat_Get_Echo('wmic nicconfig WHERE MACAddress="' & $GetMacAddArray[$a] & '" get ipaddress /value')
                $GetIPArray = StringRegExp($GetIP, '"(.*?)"', 3, 1)
                If IsArray($GetIPArray) Then
                        _ArrayDisplay($GetIPArray, $GetMacAddArray[$a+1])
                Else
                        MsgBox(8192 + 16, "提示", "网络连接名称:" & $GetMacAddArray[$a+1] & @CRLF & "MAC地址:" & $GetMacAddArray[$a] & @CRLF & @CRLF &"未找到IP")
                EndIf
      Next
Else
      MsgBox(8192 + 16, "提示", '网络连接名称:"' & $GetIDName & '"' & @CRLF & '未找到,请确认后重试!')
EndIf


Func __Run_Bat_Get_Echo($Command);运行批处理命令,并返回执行结果

      ;功能    :完整返回批处理命令的执行回显。不会出现乱码或者缺失。支持将多条命令连在一起执行
      ;注意    :支持带参数执行批处理。支持带变量执行批处理。但变量中请注意“'”标点符号的使用,不使用或需要成对使用。
      ;作者    :迷路轮回
      ;编写时间:2018-02-27
      ;最后更新:2019-02-03
      Local $iPID = Run(@ComSpec & ' /c ' & $Command, @ScriptDir, @SW_HIDE, 8)
      If Not @error Then
                ProcessWaitClose($iPID)
                Local $Result = BinaryToString(StdoutRead($iPID, 1, 1))
                Return $Result
      EndIf

EndFunc   ;==>__Run_Bat_Get_Echo




afan 发表于 2020-12-8 20:19:15

yuantian 发表于 2020-12-7 21:59
大概这个意思:




WMI 速度较慢,而且不一定能用。可以试试直接读注册表

bluecap 发表于 2020-12-9 08:27:22

yuantian 发表于 2020-12-7 21:59
大概这个意思:




非常感谢!

bluecap 发表于 2020-12-9 08:28:22

afan 发表于 2020-12-8 20:19
WMI 速度较慢,而且不一定能用。可以试试直接读注册表

好的,我也试试,谢谢!
页: [1]
查看完整版本: 请教怎样获取指定网络连接的ip地址?