Как определить текущее использование сети?

Я хочу показать текущее использование сети (использование полосы пропускания) одного интерфейса окна Debian на веб-сайте. Он не должен быть очень сложным или точным, просто простое число, такое как «52 Мбит / с».

Типичные мониторы пропускной способности сети, такие как iftop дают мне возможности просто извлечь такое значение.

Как я могу получить его лучше?

Например, я думаю, что я могу разобрать /proc/net/dev каждые несколько минут. Не уверен, что это действительно лучший способ сделать это.

3 Solutions collect form web for “Как определить текущее использование сети?”

Я думаю, что ifstat поможет вам:

 [root @ localhost ~] # ifstat -i eth0 -q 1 1
        eth0
  KB / s в KB / s out
  3390,26 69,69

Лучший способ сделать это просто, вероятно, для разбора /proc/net/dev (следует предупредить, что /proc не переносится). Вот сценарий bash который я быстро собрал, чтобы он мог вычислить его:

 #!/bin/bash _die() { printf '%s\n' "$@" exit 1 } _interface=$1 [[ ${_interface} ]] || _die 'Usage: ifspeed [interface]' grep -q "^ *${_interface}:" /proc/net/dev || _die "Interface ${_interface} not found in /proc/net/dev" _interface_bytes_in_old=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { sub(/^.*:/, "") ; print $1 } else { print $2 } }' /proc/net/dev) _interface_bytes_out_old=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { print $9 } else { print $10 } }' /proc/net/dev) while sleep 1; do _interface_bytes_in_new=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { sub(/^.*:/, "") ; print $1 } else { print $2 } }' /proc/net/dev) _interface_bytes_out_new=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { print $9 } else { print $10 } }' /proc/net/dev) printf '%s: %s\n' 'Bytes in/sec' "$(( _interface_bytes_in_new - _interface_bytes_in_old ))" \ 'Bytes out/sec' "$(( _interface_bytes_out_new - _interface_bytes_out_old ))" # printf '%s: %s\n' 'Kilobytes in/sec' "$(( ( _interface_bytes_in_new - _interface_bytes_in_old ) / 1024 ))" \ # 'Kilobytes out/sec' "$(( ( _interface_bytes_out_new - _interface_bytes_out_old ) / 1024 ))" # printf '%s: %s\n' 'Megabits in/sec' "$(( ( _interface_bytes_in_new - _interface_bytes_in_old ) / 131072 ))" \ # 'Megabits out/sec' "$(( ( _interface_bytes_out_new - _interface_bytes_out_old ) / 131072 ))" _interface_bytes_in_old=${_interface_bytes_in_new} _interface_bytes_out_old=${_interface_bytes_out_new} done 

Имейте в виду, что sleep не учитывает количество времени, которое требуется для выполнения операций в цикле while, поэтому это (очень немного) неточно. На моей 600mhz медной линии цикл занимает 0.011 секунд – незначительная неточность для большинства целей. Помните также, что при использовании (закомментированных) килобайтных / мегабитных выходов bash понимает только целую арифметику.

Существуют мониторы сетевого трафика, такие как vnstat, которые хранят ежемесячные записи вашего трафика или slurm, которые принимают его значения непосредственно из тех, которые хранятся в ядре. Он доступен в большинстве дистрибутивов.

Вот что я вижу, когда я запускаю slurm -i ra0 :

введите описание изображения здесь

  • список доступных сетевых интерфейсов удаленного хоста (без SSH)?
  • NetBSD 5.1 Ошибка компиляции ядра NDIS
  • Прочитать текущий IP-адрес из файловой системы?
  • Возможно ли выполнить ping 8.8.8.8 с двух интерфейсов, подключенных к разным WAN
  • Стек TCP / IP в пользовательском контексте против ядра Linux
  • Debian 8: где установлены статические маршруты по умолчанию?
  • Более 255 туннелей Linux GRE
  • Что происходит с запросами к службе, которая остановлена ​​с помощью SIGSTOP
  • Как измерить использование сетевого трафика?
  • Используя connman, как я могу установить параметры resolv.conf, когда connman продолжает перегружать файл?
  • Почему, когда и где используется phy
  • Linux и Unix - лучшая ОС в мире.