本帖最后由 xymc 于 2017-6-28 21:52 编辑
有一个物理网卡,本地连接,也有可能是本地连接2/3
然后装了虚拟机后多了一个VMware Network Adapter VMnet1和VMware Network Adapter VMnet8
MsgBox (0,0,$@IPAddress1)出来的有些机是物理网卡的IP,有些机出来的是虚拟网卡的IP,
怎么样可以准确获取到物理网卡的内网IP?
Local $sNetInfo = ""
;查询本机网卡信息
Local $oWMI = ObjGet("winmgmts:\\.\root\cimv2")
Local $colNet= $oWMI.ExecQuery("Select * From Win32_NetworkAdapter Where NetConnectionID IS NOT NULL")
Local $oNet,$colConfig
For $oNet In $colNet
If $oNet.NetConnectionStatus == 4 Or $oNet.NetConnectionStatus == 5 Then ContinueLoop ;排除非活动状态的网卡
If $oNet.NetConnectionID == "" Or StringInStr($oNet.name,"virtual") Then ContinueLoop ;排除虚拟网卡
$sNetInfo &= $oNet.NetConnectionID & @CRLF
Next
;MsgBox(0,"全部",$sNetInfo)
If $sNetInfo <> "" Then
Local $text_sNetInfo = StringStripWS($sNetInfo, 3);删除左右空白字符
$iPid = Run('ipconfig /all', @SystemDir, 0, 0x2)
ProcessWait($iPid)
$text = StdoutRead($iPid)
$aRe = StringRegExp($text, '(?ism)^.*?(?:适配器|adapter)\h*' & $text_sNetInfo & ':.+?(?!:物理|physical )(?:地址|address).+?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', 3)
If @error Then
MsgBox(32, 'err', '此网卡不存在')
Else
MsgBox(64, $text_sNetInfo & ' ip:', $aRe[0])
EndIf
EndIf
功能是实现了,但不是很理想,速度慢,而且有时会返回此网卡不存在!希望有高手优化一下。 |