Linux では、インターフェイスごとに次のカウンターを (プログラムで) 取得するにはどうすればよいですか:
- 送受信されたイーサネット フレーム、
- 送受信したIPv4パケット、
- 送受信された IPv6 パケット。
Linux では、インターフェイスごとに次のカウンターを (プログラムで) 取得するにはどうすればよいですか:
私のシステムでは、/sys/class/net/eth0/statistics
ネットワーク インターフェイスに関するさまざまな統計情報を提供する の下にファイルがあります。
これは、/sys
(sysfs) がマウントされた最近の Linux を想定しています。
cat /proc/net/dev
カウンター、統計、および情報を含める必要があります。
iptables
ルールとパケットカウンターを使用してこれを行うことができるはずです。
# input and output must be accounted for separately
# ipv4, eth0
iptables -I INPUT -i eth0
iptables -I OUTPUT -o eth0
# ipv6, eth0
ip6tables -I INPUT -i eth0
ip6tables -I OUTPUT -o eth0
統計を表示するには、これらの出力を解析します。
iptables -L -vxn
ip6tables -L -vxn
-Z
また、カウンターをリセットしたいときのためにフラグを調べる必要があります。
さまざまなカーネルステータスファイルをいつでも自分で解析できます。これはツールのようなものだと思いますnetstat
。
manページは次のことを示唆しています:
/proc/net/raw
-- RAW ソケット情報/proc/net/tcp
-- TCP ソケット情報/proc/net/udp
-- UDP ソケット情報これを行うための非procの方法があるはずだと思い/sys
ます。ざっと見ましたが、何も見つかりませんでした。
の出力を解析するだけですnetstat -i
。またはstrace netstat -i
、それを使用して、情報を探す場所を見つけます。
ifconfig
転送されたデータの量 (バイトとパケット) を示します。
ethtoolを使用して、完全なイーサネット統計を出力できます。
ethtool -S eth1
monodevelop の C# で簡単に実行できます。
using System.Net.NetworkInformation;
foreach (NetworkInterface ni in interfaces)
{
// perform your calculations
}