通过接口监视网络流量


17

有没有一种方法可以监视特定网络接口(例如eth0)上的流量(例如,实时了解利用率)?

这里的问题是包装盒上的工具集是固定的,并且几乎是储备的RHEL部署,因此无法使用附加工具。

在这里寻找基本的和通常存在的东西,例如iostat。


1
看看stackoverflow.com/questions/596590/…。那里的一些建议应该是有用的。
安迪·史密斯

D'oh,搜索失败(我尝试过)。公平地说,我认为这是一个
服务器故障

Answers:


15

您想要查看的数据显示在旧的ifconfig中。

watch ifconfig eth0

或使情况变得更好:

watch -n 1 -d ifconfig eth0

谢谢-除了@ user239558的评论之外,这还不错。因为您是第一个提到我的人,所以我接受您的回答ifconfig
BeeOnRope '16

发现。这是我一直在寻找的东西,尽管在不同的论坛上有很多与此类似的问题,但这是我发现的第一个答案。
哈佐

ifconfig不在默认路径中。/ sbin / ifconfig可能是必需的。
凯文夫'18


4

不安装新工具:

while ifconfig eth0 | grep 'RX bytes'; do sleep 10; done


4

在2015年后的linux上可能会更好 watch -n1 -d ip -s link show [interface]


2

有很多实用程序:

  1. 网猪
  2. iptraf
  3. iptables可能是一个很好的解决方案,但是如果您使用防火墙设置,将很难正确地定位规则

iptraf正是我想要的。但是它的最新版本似乎在2005年9月19日的IPTraf 3.0.0中。这可能是个问题吗?
Al-Alamin '18

2

您也可以使用iptables进行这样的思考:

iptables -A INPUT -p tcp --dport $port -i eth0

iptables -A OUTPUT -p tcp --sport $port -i eth0

然后iptables -L -n -v将显示通过接口的数据包数量,iptables -Z将该计数清零


输出链应具有-o作为接口,-i是非法的
drake7707 '19

2
function humanValue()
{
    h=( '' K M G T P )
    i=1; v=$(( $1 * 8 ))
    while [ $v -gt $(( 1 << 10 * i )) ]; do let i++; done;
    echo -n "$(( $v >> 10 * --i )) ${h[i]}b/s";
}
ifaces=$(ip addr | grep -E "^[0-9]:" | cut -d" " -f2 | tr -d \:)
declare -A RX2 TX2;
while sleep 1; 
do
    date 
    for INTERFACE in $ifaces;
    do
        RX1=$(cat /sys/class/net/${INTERFACE}/statistics/rx_bytes)
        TX1=$(cat /sys/class/net/${INTERFACE}/statistics/tx_bytes)
        DOWN=$(( RX1 - RX2[$INTERFACE] ))
        UP=$(( TX1 - TX2[$INTERFACE] ))
        RX2[$INTERFACE]=$RX1; TX2[$INTERFACE]=$TX1
        echo -e "[ $INTERFACE:\tRX: $(humanValue $DOWN)\t|\tTX: $(humanValue $UP) ]"
    done;
done;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.