Yum*_*Yum 23 networking linux monitoring bash traffic
我用过IPTraf, Iftop, vnstat, bwm-ng, ifconfig -a。它们都没有帮助我找到从我的应用程序以 KB 或 MB 格式发送/接收的实时数据包。原因是我正在编写一个应用程序,我需要非常确定我的压缩是正确的,但我无法测试以继续前进。
我可以用什么来跟踪非常具体和准确的实时网络统计数据?

Red*_*ick 32
您的应用程序可能正在向特定的 UDP 或 TCP 端口号或特定的 IP 地址发送数据包。
因此,您可以使用 TCPdump 之类的东西来捕获该流量。
TCPdump 不会为您提供您想要的实时统计数据,但您可以将其输出提供给可以执行的操作(稍后我将尝试用答案更新此答案)。
更新:
$ sudo tcpdump -i eth1 -l -e -n | ./netbps
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
11:36:53 2143.33 Bps
11:37:03 1995.99 Bps
11:37:13 2008.35 Bps
11:37:23 1999.97 Bps
11:37:33 2083.32 Bps
131 packets captured
131 packets received by filter
0 packets dropped by kernel
Run Code Online (Sandbox Code Playgroud)
一分钟后,我按 Ctrl+C 打断了它。
您需要在tcpdump命令的末尾添加一个合适的过滤器表达式,以仅包含您的应用程序生成的流量(例如port 123)
程序netbps是这样的:
#!/usr/bin/perl
use strict;
use warnings;
use Time::HiRes;
my $reporting_interval = 10.0; # seconds
my $bytes_this_interval = 0;
my $start_time = [Time::HiRes::gettimeofday()];
STDOUT->autoflush(1);
while (<>) {
if (/ length (\d+):/) {
$bytes_this_interval += $1;
my $elapsed_seconds = Time::HiRes::tv_interval($start_time);
if ($elapsed_seconds > $reporting_interval) {
my $bps = $bytes_this_interval / $elapsed_seconds;
printf "%02d:%02d:%02d %10.2f Bps\n", (localtime())[2,1,0],$bps;
$start_time = [Time::HiRes::gettimeofday()];
$bytes_this_interval = 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,适应口味。
小智 15
同一个文件夹中的用法如下:
要检查每个接口的打包程序: ./netpps.sh eth0
要检查每个接口的速度: ./netspeed.sh eth0
在接口netpps.sh上测量每秒数据包作为文件名
#!/bin/bash
INTERVAL="1" # update interval in seconds
if [ -z "$1" ]; then
echo
echo usage: $0 [network-interface]
echo
echo e.g. $0 eth0
echo
echo shows packets-per-second
exit
fi
IF=$1
while true
do
R1=`cat /sys/class/net/$1/statistics/rx_packets`
T1=`cat /sys/class/net/$1/statistics/tx_packets`
sleep $INTERVAL
R2=`cat /sys/class/net/$1/statistics/rx_packets`
T2=`cat /sys/class/net/$1/statistics/tx_packets`
TXPPS=`expr $T2 - $T1`
RXPPS=`expr $R2 - $R1`
echo "TX $1: $TXPPS pkts/s RX $1: $RXPPS pkts/s"
done
Run Code Online (Sandbox Code Playgroud)
测量接口netspeed.sh上的网络带宽作为文件名
#!/bin/bash
INTERVAL="1" # update interval in seconds
if [ -z "$1" ]; then
echo
echo usage: $0 [network-interface]
echo
echo e.g. $0 eth0
echo
exit
fi
IF=$1
while true
do
R1=`cat /sys/class/net/$1/statistics/rx_bytes`
T1=`cat /sys/class/net/$1/statistics/tx_bytes`
sleep $INTERVAL
R2=`cat /sys/class/net/$1/statistics/rx_bytes`
T2=`cat /sys/class/net/$1/statistics/tx_bytes`
TBPS=`expr $T2 - $T1`
RBPS=`expr $R2 - $R1`
TKBPS=`expr $TBPS / 1024`
RKBPS=`expr $RBPS / 1024`
echo "TX $1: $TKBPS kB/s RX $1: $RKBPS kB/s"
done
Run Code Online (Sandbox Code Playgroud)
请参阅此站点以获取更多信息http://xmodulo.com/measure-packets-per-second-throughput-high-speed-network-interface.html
小智 7
最容易使用和最容易控制输出并重定向到文件以进行连续记录:
ifstat
Run Code Online (Sandbox Code Playgroud)
可能随大多数 linux 发行版一起提供,并且可以在 mac 上使用 brew 安装
| 归档时间: |
|
| 查看次数: |
121742 次 |
| 最近记录: |