找回密码
 加入
搜索
楼主: wllx

为什么提示错误?找不到 DHCP服务器地址?

[复制链接]
发表于 2023-8-28 08:17:04 | 显示全部楼层
LZ 只要贴出你的 $data 流内容字符串 + 即时回复 就马上解决了。提问时找对方向和态度很重要。
 楼主| 发表于 2023-8-28 14:09:36 | 显示全部楼层
本帖最后由 wllx 于 2023-8-28 14:14 编辑

“谢谢你!运行之后,还是一样”,   你一个超级版主不懂这个?你还要什么态度?你又不给解决这个问题?是不是花钱买的版主?为了下载 个代码,回帖挣个钱,你们把我拉黑几天,有没有天理?到现在还是负债累累。你以为你们是开发商,是政府、银行?
发表于 2023-8-28 15:35:33 | 显示全部楼层
楼主息怒,用ipconfig命令输出,再用正则提取字符串,不能适应所有操作系统,操作系统语言,版本都会影响输出结果.


可以用其它方法得到,还更全面.
#include <Array.au3>

Global $aInfo = _NetworkAdapterInfo('')
_ArrayDisplay($aInfo)

Func _NetworkAdapterInfo($strComputer, $flag = False) ;true 显示绑定TCP/IP的适配器,false显示所有适配器
        If Not $strComputer Then $strComputer = "localhost"
        Local $colItems = ""
        Local $colItem2 = ""
        Local $objWMIService
        Local $NetworkAdapterID = 0
        Local $index = ""
        Local $NetworkAdapterPNPDeviceID = ""
        Local $NetworkAdapterName = ""
        Local $NetworkAdapterGateway = ""
        Local $NetworkAdapterHostName = ""
        Local $NetworkAdapterDHCPEnabled = ""
        Local $NetworkAdapterIPaddress = ""
        Local $NetworkAdapterSubnet = ""
        Local $NetworkAdapterDNSCount = ""
        Local $NetworkAdapterMAC = ""
        Local $NetworkAdapterNetConnectionID = ""
        Local $NetConnectionStatus = ""
        Local $NetworkAdapterInfo[1][14]
        Local $remark = StringSplit('{AdapterIdentifier},网络适配器名称,设备范例ID,连接名称,连接状态,DNS主机名称,启用DHCP,IP地址,子网掩码,网关,MAC地址,DNS数量,主DNS', ',')
        For $i = 0 To UBound($remark) - 1
                $NetworkAdapterInfo[0][$i] = $remark[$i]
        Next
        Local $wbemFlagReturnImmediately, $wbemFlagForwardOnly
        $wbemFlagReturnImmediately = 0x10
        $wbemFlagForwardOnly = 0x20
        $NetworkAdapterInfo[0][0] = 0
        $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputer & "\root\CIMV2")
;~         $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
        If @error Then Return SetError(1, 0, False)
        If $flag Then
                $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
                $colItem2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus >0', "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        Else
                $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
                $colItem2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter', "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        EndIf
        Local $colComputers = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
        If IsObj($colItems) Then
                For $objItem In $colItems
                        $index = $objItem.index
                        $NetworkAdapterName = $objItem.Description
                        $NetworkAdapterHostName = $objItem.DNSHostName
                        $NetworkAdapterDHCPEnabled = $objItem.DHCPEnabled
                        If IsArray($objItem.DefaultIPGateway) Then
                                $NetworkAdapterGateway = $objItem.DefaultIPGateway(0)
                        Else
                                $NetworkAdapterGateway = ''
                        EndIf
                        If IsArray($objItem.IPAddress) Then
                                $NetworkAdapterIPaddress = $objItem.IPAddress(0)
                        Else
                                $NetworkAdapterIPaddress = ''
                        EndIf
                        $NetworkAdapterDNSCount = UBound($objItem.DNSServerSearchOrder)
                        For $i = 0 To $NetworkAdapterDNSCount - 1
                                Assign('NetworkAdapterDNS' & $i, $objItem.DNSServerSearchOrder($i))
                        Next
                        If IsArray($objItem.IPSubnet) Then
                                $NetworkAdapterSubnet = $objItem.IPSubnet(0)
                        Else
                                $NetworkAdapterSubnet = ''
                        EndIf
                        $NetworkAdapterMAC = $objItem.MACAddress
                        $NetworkAdapterID += 1
                        ReDim $NetworkAdapterInfo[UBound($NetworkAdapterInfo, 1) + 1][UBound($NetworkAdapterInfo, 2)]
                        $NetworkAdapterInfo[0][0] = $NetworkAdapterID
                        $NetworkAdapterInfo[$NetworkAdapterID][0] = $index
                        $NetworkAdapterInfo[$NetworkAdapterID][1] = $objItem.settingID
                        $NetworkAdapterInfo[$NetworkAdapterID][2] = $NetworkAdapterName
                        $NetworkAdapterInfo[$NetworkAdapterID][6] = $NetworkAdapterHostName
                        $NetworkAdapterInfo[$NetworkAdapterID][7] = $NetworkAdapterDHCPEnabled
                        $NetworkAdapterInfo[$NetworkAdapterID][8] = $NetworkAdapterIPaddress
                        $NetworkAdapterInfo[$NetworkAdapterID][9] = $NetworkAdapterSubnet
                        $NetworkAdapterInfo[$NetworkAdapterID][10] = $NetworkAdapterGateway
                        $NetworkAdapterInfo[$NetworkAdapterID][11] = $NetworkAdapterMAC
                        $NetworkAdapterInfo[$NetworkAdapterID][12] = $NetworkAdapterDNSCount
                        For $i = 0 To $NetworkAdapterDNSCount - 1
                                If UBound($NetworkAdapterInfo, 2) <= ($i + 13 + 1) Then ReDim $NetworkAdapterInfo[UBound($NetworkAdapterInfo, 1)][$i + 13 + 1]
                                If $i > 0 Then $NetworkAdapterInfo[0][$i + 13] ='备用DNS ' & ($i)
                                $NetworkAdapterInfo[$NetworkAdapterID][$i + 13] = Eval("NetworkAdapterDNS" & $i)
                        Next
                Next
        EndIf
        If IsObj($colItem2) Then
                $NetworkAdapterID = 0
                For $objItem2s In $colItem2
                        $NetworkAdapterNetConnectionID = $objItem2s.NetConnectionID
                        $NetworkAdapterPNPDeviceID = $objItem2s.PNPDeviceID
                        $DeviceID = $objItem2s.DeviceID
                        $NetConnectionStatus = $objItem2s.NetConnectionStatus
                        $NetworkAdapterID += 1
                        If UBound($NetworkAdapterInfo, 1) <= $NetworkAdapterID Then ReDim $NetworkAdapterInfo[$NetworkAdapterID + 1][UBound($NetworkAdapterInfo, 2)]
                        Local $find = _ArraySearch($NetworkAdapterInfo, $DeviceID, 1, 0, 0, 0, 1, 0)
                        If $find > -1 Then
                                $NetworkAdapterInfo[$find][3] = $NetworkAdapterPNPDeviceID
                                $NetworkAdapterInfo[$find][4] = $NetworkAdapterNetConnectionID
                                $NetworkAdapterInfo[$find][5] = $NetConnectionStatus
                                If Not (StringStripWS($NetworkAdapterInfo[$find][5], 8) == '') Then
                                        If StringStripWS($NetworkAdapterInfo[$find][8], 8) == '' Or $NetworkAdapterInfo[$find][8] = '0.0.0.0' Then
                                                Local $IP, $Subnet, $GateWay, $Dnslist
                                                If RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & $NetworkAdapterInfo[$find][1], 'EnableDHCP') = 0x00000000 Then
                                                        $IP = 'IPAddress'
                                                        $SubMask = 'SubnetMask'
                                                        $GateWay = 'DefaultGateway'
                                                        $Dnslist = 'NameServer'
                                                Else
                                                        $IP = 'DhcpIPAddress'
                                                        $SubMask = 'DhcpSubnetMask'
                                                        $GateWay = 'DhcpDefaultGateway'
                                                        $Dnslist = 'DhcpNameServer'
                                                EndIf
                                                $NetworkAdapterInfo[$find][8] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & $NetworkAdapterInfo[$find][1], $IP)
                                                $NetworkAdapterInfo[$find][9] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & $NetworkAdapterInfo[$find][1], $SubMask)
                                                $NetworkAdapterInfo[$find][10] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & $NetworkAdapterInfo[$find][1], $GateWay)
                                                Local $DNS = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & $NetworkAdapterInfo[$find][1], $Dnslist)
                                                If StringStripWS($DNS, 8) == '' Then
                                                        $NetworkAdapterInfo[$find][12] = 0
                                                Else
                                                        $DNS = StringSplit($DNS, ',')
                                                        $NetworkAdapterInfo[$find][12] = UBound($DNS) - 1
                                                        For $i = 1 To UBound($DNS) - 1
                                                                If UBound($NetworkAdapterInfo, 2) < ($i + 12 + 1) Then ReDim $NetworkAdapterInfo[UBound($NetworkAdapterInfo, 1)][$i + 12 + 1]
                                                                $NetworkAdapterInfo[$find][$i + 12] = $DNS[$i]
                                                        Next
                                                EndIf
                                        EndIf
                                EndIf
                        EndIf

                Next
        EndIf
        Return $NetworkAdapterInfo
EndFunc   ;==>_NetworkAdapterInfo


发表于 2023-8-28 21:58:36 | 显示全部楼层
wllx 发表于 2023-8-28 14:09
“谢谢你!运行之后,还是一样”,   你一个超级版主不懂这个?你还要什么态度?你又不给解决这个问题?是 ...

a版是本论坛最有能力,最热心回帖助人的。版主是好意提醒,论坛有置顶帖子,提问的智慧,建议认真阅读,心浮气躁不是一个好的学习心态。我刚注册论坛的时候,也曾被禁言扣分成乞丐,没觉得是坏事,也是一种成长。
发表于 2023-8-28 22:13:26 | 显示全部楼层
MsgBox(64, '成功!', FindDhcpServer(), 3)
Func FindDhcpServer()
        Local $pid = Run(@ComSpec & ' /c ipconfig /all', '', @SW_HIDE, 15)
        ProcessWaitClose($pid)
        Local $data = StdoutRead($pid)
        Local $result = StringRegExp($data, 'DHCP\s*?(?:Server|服务器).+?:\s*?(\d+\.\d+\.\d+\.\d+)', 3)
        If @error Then Return ''
        Return $result[0]
EndFunc   ;==>FindDhcpServer
发表于 2023-8-29 03:00:18 来自手机 | 显示全部楼层
wllx 发表于 2023-8-28 14:09
“谢谢你!运行之后,还是一样”,   你一个超级版主不懂这个?你还要什么态度?你又不给解决这个问题?是 ...

A大热心帮助了无数坛友,做出了无数原创性贡献。。。。力挺A大。
 楼主| 发表于 2023-8-29 05:54:41 | 显示全部楼层
本帖最后由 wllx 于 2023-8-29 05:56 编辑



搞不懂这个成功了啥?我是初学者,不懂

需求是这样的:MsgBox(64, '成功!', 'DHCP服务器地址已写入配置文件.',3)

本帖子中包含更多资源

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

×
发表于 2023-8-29 08:05:08 | 显示全部楼层
wllx 发表于 2023-8-29 05:54
搞不懂这个成功了啥?我是初学者,不懂

需求是这样的:MsgBox(64, '成功!', 'DHCP服务器地址已写 ...

仔细看16楼的回复,你命令行手动运行ipconfig /all,截图看看返回什么内容。
发表于 2023-8-29 08:47:41 | 显示全部楼层
afan 发表于 2023-8-28 08:17
LZ 只要贴出你的 $data 流内容字符串 + 即时回复 就马上解决了。提问时找对方向和态度很重要。

楼主没有get到a版回复的重点
 楼主| 发表于 2023-8-29 17:14:08 | 显示全部楼层
haijie1223 发表于 2023-8-29 08:47
楼主没有get到a版回复的重点

不想说了,解决不了的个,所回非所问,有点高深。
发表于 2023-8-29 18:44:43 | 显示全部楼层
wllx 发表于 2023-8-29 17:14
不想说了,解决不了的个,所回非所问,有点高深。

能给你回复的坛友,都看出问题在哪里了,a版给你回复也告诉你问题在哪里了,是你自己看不到而已。给你画画重点"贴出你的 $data 流内容字符串"
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 06:50 , Processed in 0.070190 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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