linux – 确定TCP有效负载活动/统计信息

我想查找给定文件描述符或给定接口的TCP有效负载活动的计数器(接收的总字节数).优选地,给定文件描述符,但是对于接口就足够了.理想情况下,我真的想知道任何已被识别的字节,即使是那些我还没有读入用户间的字节(但是?).

我已经看到了getsockopt()的TCP_INFO特性,但是据我所知,没有一个字段看起来存储“接收的总字节数”或“传输的总字节数(例如,acked)”.

我还看到了netlink IFLA_STATS RTNL_TC_BYTES和SIOCETHTOOL ETHTOOL_GSTATS ioctl()(rx_bytes字段)的接口,这些很棒,但我不认为他们能够区分对方的开销/头文件.层和实际的有效负载字节.

procfs有/ proc / net / tcp但这似乎不包含我正在寻找的东西.

有没有办法获得这个特定的数据?

编辑:混杂模式对吞吐量有不可承受的影响,所以我无法利用任何使用它的东西.更不用说实现IP堆栈的大部分以确定哪些数据包是合适的超出了我对此解决方案的预期范围.

我的目标是对recvmsg()存储的值进行总体/不信任/第二次猜测.

正确的事情是要正确地跟踪这些值,但是有一个简单的“嘿OS?我在这套接字上真正接收了多少字节?”是很有价值的.

解决方法

也可以使用带有SIOCINQ的ioctl调用获取接收缓冲区中排队的未读数据量.以下是手册页中的用法http://man7.org/linux/man-pages/man7/tcp.7.html
int value;
error = ioctl(tcp_socket_fd,SIOCINQ,&value);

对于接口TCP统计信息,我们可以使用“netstat -i -p tcp”来基于每个接口查找统计信息.

相关文章

insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...