Linux下如何获取网卡设备收发数据包相关统计数据?

踏岸寻柳 2010-06-30 11:25:56
需要的信息就是/proc/net/dev中的数据。
不过/proc/net/dev有个问题,它无法呈现类似于eth0:1、eth0:2这样的接口相关信息,而只是eth0、eth1这样的。

简单查了一下,可能会用到ioctl、ethtool等编程接口,但是查了<net/if.h>、<linux/ethtool.h>等头文件,却没有发现什么端倪。

请大牛赐教,谢~
...全文
1761 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiyan 2010-07-14
  • 打赏
  • 举报
回复
你的要求并非真的无法实现。
网络接口统计数据是由网卡驱动维护的,之所以无法获取虚拟网络接口设备的相关数据,是因为驱动没有做。
如果真的要分别实现绑定在同一个MAC上的多个接口相关的统计信息,那么就得从驱动层面下手。
当然,这只是一个理论上的答案,具体如何实现可能还会遇到一些问题。

你可以根据自己的实际情况对网卡驱动进行修改。
踏岸寻柳 2010-07-02
  • 打赏
  • 举报
回复
虽然没有解决掉我的问题,但是基本上证实我想要的实现是不现实的 :)
cceczjxy 2010-07-01
  • 打赏
  • 举报
回复
系统好象不作这样的区分计数吧.
steptodream 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mengge 的回复:]

引用 9 楼 steptodream 的回复:
>> eth0 eth0:1 eth0:2 分别设置不同段的ip
我看你怎么添加路由让他们通信


这应该是一种常见的网络管理手段吧,一般公司网络里都会类似的做法。
如:http://blog.sina.com.cn/s/blog_54dd9b610100h7ww.html
[/Quote]
嘿 真让我学习了
虽然我这样用过 我还以为要同一个段的呢!
踏岸寻柳 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 steptodream 的回复:]
>> eth0 eth0:1 eth0:2 分别设置不同段的ip
我看你怎么添加路由让他们通信
[/Quote]

这应该是一种常见的网络管理手段吧,一般公司网络里都会类似的做法。
如:http://blog.sina.com.cn/s/blog_54dd9b610100h7ww.html

steptodream 2010-06-30
  • 打赏
  • 举报
回复
在同一个物理设备上面可以挂多个IP,只有有合适的路由,这些IP可以连接不同的网段并与这些网段中的设备正常通信。
--------------------------
你自己测试就知道了
eth0 eth0:1 eth0:2 分别设置不同段的ip
我看你怎么添加路由让他们通信 我也正好学习一下
踏岸寻柳 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 steptodream 的回复:]
就像我1 2楼说的 eth0:1 eth0:2只是虚拟的 不是真实存在的 他真实走的依然是eth0
不要轻易的去怀疑系统命令的缺陷或者bug
你可以这样测试一下 eth0:1里设置和eth0不同段的ip 你看卡eth0:1它还会好用吗?
[/Quote]

我同意设备别名的说法,同时也确信走的是同一个物理设备。
在同一个物理设备上面可以挂多个IP,只有有合适的路由,这些IP可以连接不同的网段并与这些网段中的设备正常通信。

我并不“肯定”/proc/net/dev、ifconfig、Net-SNMP都有问题,只是想寻求一种获取虚拟设备上统计信息的实现。只不过目前看来,/proc/net/dev、Net-SNMP都无法满足我的要求。

steptodream 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mengge 的回复:]
这是否能够说明内核并未分开保存这些接口设备的统计数据?
或者,可能是ifconfig实现的缺陷?
[/Quote]
就像我1 2楼说的 eth0:1 eth0:2只是虚拟的 不是真实存在的 他真实走的依然是eth0
不要轻易的去怀疑系统命令的缺陷或者bug
你可以这样测试一下 eth0:1里设置和eth0不同段的ip 你看卡eth0:1它还会好用吗?

/proc/net/dev
ifconfig
Net-SNMP
你都认为有问题 为什么不尝试改变自己的想法
踏岸寻柳 2010-06-30
  • 打赏
  • 举报
回复
在/proc/net/dev中,设备名称与统计信息间用了符号“:”分割,给我的感觉是它压根儿没打算考虑eth0:1这种情况。
而ifconfig的某些信息似乎与/proc/net/dev相关;同时,使用ioctl、ethtool也可以获取ifconfig相关的大部分信息。

在Net-SNMP这么一个经典的包括网卡设备接口统计信息的软件中,其实现竟然只是简单的获取/proc/net/dev的信息。
踏岸寻柳 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 steptodream 的回复:]
你配置了eth0:1 eth0:2之后
用ifconfig显示一下就会发现 eth0:1 eth0:2没有如下的统计信息
RX packets:6444480 errors:0 dropped:0 overruns:0 frame:0
TX packets:3945728 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:764466584 (729.0 MiB) TX bytes:358333607 (341.7 MiB)
[/Quote]
这是否能够说明内核并未分开保存这些接口设备的统计数据?
或者,可能是ifconfig实现的缺陷?
踏岸寻柳 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 steptodream 的回复:]
eth0:1、eth0:2这样的是虚拟的
他实际走的同样是物理口eth0 所以你统计eth0就可以了吧

eth0:1 eth0:2也可以叫做eth0的别名设备
[/Quote]

是的,eth0:1、eth0:2都是挂靠在eth0设备上面的别名设备。
如此说来,是否意味着无法分开获取这些别名设备的统计数据?

如果这些不同的别名设备连接的是不同的网络,我就无法获取设备与这些网络间交互数据的统计信息了么?
steptodream 2010-06-30
  • 打赏
  • 举报
回复
不好意思 有点罗嗦 再说一句
你配置了eth0:1 eth0:2之后
用ifconfig显示一下就会发现 eth0:1 eth0:2没有如下的统计信息
RX packets:6444480 errors:0 dropped:0 overruns:0 frame:0
TX packets:3945728 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:764466584 (729.0 MiB) TX bytes:358333607 (341.7 MiB)
steptodream 2010-06-30
  • 打赏
  • 举报
回复
eth0:1 eth0:2也可以叫做eth0的别名设备
steptodream 2010-06-30
  • 打赏
  • 举报
回复
eth0:1、eth0:2这样的是虚拟的
他实际走的同样是物理口eth0 所以你统计eth0就可以了吧

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧