netstat如何知道接收和发送的字节数?
How does netstat know the number of bytes received and sent?
我想创建一个简单的应用程序来显示下载和上传的字节数。我注意到 netstat
就是这样做的(当使用 -e
开关时):
netstat
是如何知道这些信息的,它调用了 Windows API 函数还是什么?
Netstat 使用1 IP Helper API,它是核心Windows 网络API 的一部分。 运行 dumpbin /imports
在 netstat 上产生:(为简洁起见被剪掉)
IPHLPAPI.DLL
140007000 Import Address Table
1400080A0 Import Name Table
0 time date stamp
0 Index of first forwarder reference
A3 InternalGetBoundTcp6EndpointTable
A4 InternalGetBoundTcpEndpointTable
C2 InternalGetUdpTableWithOwnerModule
B5 InternalGetTcp6Table2
B9 InternalGetTcpTable2
B6 InternalGetTcp6TableWithOwnerModule
BB InternalGetTcpTableWithOwnerModule
BE InternalGetUdp6TableWithOwnerModule
80 GetUdpStatisticsEx
64 GetIpStatisticsEx
4D GetIcmpStatisticsEx
7A GetTcpStatisticsEx
最后 4 个 IP Helper 函数是您感兴趣的。GetUdpStatisticsEx
, GetIpStatisticsEx
, GetIcmpStatisticsEx
and GetTcpStatisticsEx
1这是最有可能问题的答案,但为了完整起见,netstat 还导入了QueryPerformanceCounter
它可能用来产生输出。没有 netstat 的源代码,就无法 100% 确定。
每个接口发送和接收的八位字节数可以通过GetIfTable(). See dwInOctets
and dwOutOctets
from MIB_IFROW获得。
我想创建一个简单的应用程序来显示下载和上传的字节数。我注意到 netstat
就是这样做的(当使用 -e
开关时):
netstat
是如何知道这些信息的,它调用了 Windows API 函数还是什么?
Netstat 使用1 IP Helper API,它是核心Windows 网络API 的一部分。 运行 dumpbin /imports
在 netstat 上产生:(为简洁起见被剪掉)
IPHLPAPI.DLL
140007000 Import Address Table
1400080A0 Import Name Table
0 time date stamp
0 Index of first forwarder reference
A3 InternalGetBoundTcp6EndpointTable
A4 InternalGetBoundTcpEndpointTable
C2 InternalGetUdpTableWithOwnerModule
B5 InternalGetTcp6Table2
B9 InternalGetTcpTable2
B6 InternalGetTcp6TableWithOwnerModule
BB InternalGetTcpTableWithOwnerModule
BE InternalGetUdp6TableWithOwnerModule
80 GetUdpStatisticsEx
64 GetIpStatisticsEx
4D GetIcmpStatisticsEx
7A GetTcpStatisticsEx
最后 4 个 IP Helper 函数是您感兴趣的。GetUdpStatisticsEx
, GetIpStatisticsEx
, GetIcmpStatisticsEx
and GetTcpStatisticsEx
1这是最有可能问题的答案,但为了完整起见,netstat 还导入了QueryPerformanceCounter
它可能用来产生输出。没有 netstat 的源代码,就无法 100% 确定。
每个接口发送和接收的八位字节数可以通过GetIfTable(). See dwInOctets
and dwOutOctets
from MIB_IFROW获得。