[已解决]如何通过iphlpapi.dll获取系统路由表,并删除默认路由0.0.0.0
本帖最后由 fayuOmg 于 2021-9-6 08:36 编辑最近写一个脚本,需要实时监测Windows系统的路由表,如果发现存在默认路由0.0.0.0,则删除。
根据P版提供的增删路由的脚本,链接如下:
https://www.autoitx.com/forum.ph ... 983&fromuid=7670061
提及删除路由部分的代码如下:
Func _DeleteIpForwardEntry($sDestination, $sNetworkMask, $sNextHop, $iIfIndex, $iProto = 3)
Local $iResult, $tBuffer
If $iIfIndex = -1 Then $iIfIndex = _GetBestInterface($sNextHop)
$tBuffer = DllStructCreate($tagMIB_IPFORWARDROW)
DllStructSetData($tBuffer, "Destination", _ConvertCharsToUlong($sDestination))
DllStructSetData($tBuffer, "NetworkMask", _ConvertCharsToUlong($sNetworkMask))
DllStructSetData($tBuffer, "NextHop", _ConvertCharsToUlong($sNextHop))
DllStructSetData($tBuffer, "IfIndex", $iIfIndex)
DllStructSetData($tBuffer, "Proto", $iProto)
$iResult = DllCall($IPHLPAPI, "long", "DeleteIpForwardEntry", "ptr", DllStructGetPtr($tBuffer))
Return SetError($iResult, 0, $iResult = 0)
EndFunc ;==>_DeleteIpForwardEntry
根据微软的格式要求,删除一条路由时,必须指定它的nexthop。
但是默认路由的特征很明显,它是0.0.0.0开头的,我想把目的地址是0.0.0.0的路由都给删掉(不管它的nexthop怎么变),请问iphlpapi.dll的代码要怎么写呢?
【不要调用cmd哦,这个效率太低了,因为我是后台实时监测,200ms运行一次】
P版已经写出代码了
Local $sDest, $sMask, $sNextHop
Local $aRouteList = _EnumIpForwordEntries()
If Not @error Then
For $i = 1 To $aRouteList
$sDest = $aRouteList[$i]
$sMask = $aRouteList[$i]
$sNextHop = $aRouteList[$i]
If StringRegExp($sDest, '^+$', 0) Then
;//删除0.0.0.0 路由
If _DeleteIpForwardEntry($sDest, $sMask, $sNextHop, -1) Then
MsgBox(48, "OK", "Done")
Else
MsgBox(48, "Error", "Failed with error " & @error)
EndIf
EndIf
Next
EndIf
页:
[1]