请教怎样获取指定网络连接的ip地址?
我已经查到如何获取连接名称的办法,也知道可以通过@IPAddress1 @IPAddress2获取ip地址。
比如我电脑有多个网络连接,分别是本地连接1、本地连接2,现在我想获取本地连接2的ip地址,应该如何实现?
@IPAddress2不能对应指定的网卡名。
我也查到有些网友是用ipconfig获取一段文本,然后提取,想知道还有没有更简单一点的方法呢?谢谢!
本帖最后由 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
yuantian 发表于 2020-12-6 09:53
我的思路大概是先根据网络连接名称,找到对应的MAC地址,然后 根据MAC地址,找到对应的IP
感谢大神的好办法,不过我水平太低,还要请问,按照此方法得出来的ip,如何把它赋值给我定义的系统变量呢?可以不通过读写文件来实现吗? 本帖最后由 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
yuantian 发表于 2020-12-7 21:59
大概这个意思:
WMI 速度较慢,而且不一定能用。可以试试直接读注册表 yuantian 发表于 2020-12-7 21:59
大概这个意思:
非常感谢! afan 发表于 2020-12-8 20:19
WMI 速度较慢,而且不一定能用。可以试试直接读注册表
好的,我也试试,谢谢!
页:
[1]