如何通过调用Iphlpapi.dll 的API获得本机的发包率!
本帖最后由 805333 于 2009-11-19 03:08 编辑如何通过调用Iphlpapi.dll 的API获得本机的发包率! 发包率 怎么得到? 是不是netstat -e ? 意思就是检测当前网卡每秒钟发出去多少个包,即每秒上传多少个包! 那就是就是流量???论坛有,找找。 #include <SetupApi.au3>
Const $GUID_NDIS_LAN_CLASS = "{AD498944-762F-11D0-8DCB-00C04FC3358C}"
Local $hDevs, $tDevIfInfo, $tDevInfo, $sDescr, $sName, $sText
Local $iMask, $iIFIndex, $sDevicePath, $hDevice, $tBuffer, $pBuffer
$iMask = bitOR($DIGCF_PRESENT, $DIGCF_DEVICEINTERFACE)
$hDevs = _SetupDiGetClassDevs($iMask, $GUID_NDIS_LAN_CLASS)
$iMask = bitOR($GENERIC_READ, $GENERIC_WRITE)
$tBuffer = DllStructCreate("dword OID;dword PacketsSent")
$pBuffer = DllStructGetPtr($tBuffer)
DllStructSetData($tBuffer, "OID", 0x20101)
While _SetupDiEnumDeviceInterfaces($hDevs, 0, $GUID_NDIS_LAN_CLASS, $iIfIndex, $tDevIfInfo)
$iIFIndex += 1
$sDevicePath = _SetupDiGetDeviceInterfaceDetail($hDevs, $tDevIfInfo, $tDevInfo)
$sDescr = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, 0)
$sName = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, 0xC)
If $sName <> "" Then $sDescr = $sName
If $sDescr = "" Then $sDescr = ""
$hDevice = _CM_Create_File($sDevicePath, $iMask, 3, 0, 3, 0)
If Number($hDevice) < 1 Then ContinueLoop
_CM_Device_IO_Control($hDevice, 0x170002, $pBuffer, 4, $pBuffer + 4, 4)
_CM_Close_Handle($hDevice)
$sText &= "Device: " & $sDescr & @CRLF & "Packets sent: "
$sText &= DllStructGetData($tBuffer, "PacketsSent") & @CRLF & @CRLF
WEnd
_SetupDiDestroyDeviceInfoList($hDevs)
Msgbox(0, "", $sText)
感谢楼主提供的技术信息。以上代码可以检测本地网卡数据包发送的数量。
要获取每秒的发包率只需再套一个While循环,当前秒值发送的数据包数量减去上一秒的数据包数量就OK。
SetupApi.au3 - 11/17/2009 更新 - http://www.autoitx.com/forum.php?mod=viewthread&tid=10543&highlight= 似懂非懂的在看看 呵呵,学习一下。。 好东西,留个记号
页:
[1]