windows - 如何计算每个 TCP 连接(系统范围)发送和接收的字节数?

标签 windows winapi network-programming

例如最新版本的 TCPView 具有这样的功能:显示每个 TCP 连接发送/接收的字节数(启动 TCPView 时开始计数)。是否可以不进行数据包嗅探? Windows是否为此提供了任何API?我还没有找到这样的性能计数器

如何枚举所有连接的描述here

编辑:TDI 是否有助于接收每个套接字的传输统计信息?网络BIOS?任何链接在哪里挖掘?

最佳答案

总之,我已经基本把tcpview 3.0.2完全逆向,并且按照我所学实现了和它一样的特性。

tcpview 使用ETW用于监控网络事件。

关键 API 是 StartTrace , OpenTrace, ProcessTrace.

使用 KERNEL_LOGGER_NAME 并启用 EVENT_TRACE_FLAG_NETWORK_TCPIP 标志。

然后您可以从EventCallback 检索网络事件数据, 然后将其解析为 TcpIp_TypeGroup1和其他结构。根据文档,这些结构仅受 vista 支持。不过你可以在xp(逆向猜测)和2003(我的环境是2003,没有在xp上测试)中调用和使用它。当然,您必须自己定义所有这些结构。

从vista开始,win提供了一些API来获取每个连接的统计信息。比如GetPerTcpConnectionEStats,GetPerUdpConnectionEStats,你可以从MSDN上得到更多的细节。

此外,在 vista 中,您可以使用 RAW Socket 来完成相同的工作(我认为更精确)。 vista之前,RAW Socket无法获取SEND包,很遗憾。

关于windows - 如何计算每个 TCP 连接(系统范围)发送和接收的字节数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4705292/

相关文章:

c - C语言打开视频文件并播放

c# - 如何枚举为应用程序注册的声音?

python - 使用 python 在 win 10 上切换 "night light"功能

c++ - WINDOWPLACEMENT 的 showCmd...总是 1?

windows - 如何枚举磁盘卷名?

c++ - 如何计算 Windows 上的可用地址空间?

java - 在 Windows 上访问智能卡时重用 Java Keystore

windows - 在 Windows 8 上安装 AppFabric

java - 从服务器向客户端发送消息

c - 在 C 中找出 eth 设备链接速度能力