Как получить данные трафика RX и TX с помощью сценария оболочки

Можно ли получить RX/TX от времени изменения, например, 1 минуты через командную строку?

1 ответ

Да, многие статистические данные, доступные для различных элементов в системе, относятся к тому, когда она началась. Пользователь может использовать эту информацию, чтобы извлечь то, что ему нужно. Для вашего требования это просто вопрос отметки значений в начале и конце временного интервала, а затем расчета разницы.

Принимая во внимание, что я обычно делаю это с программой переменного тока, в этом случае я использовал скрипт Python, просматривая данные примитивного сетевого интерфейса, например, cat /proc/net/dev:

$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
   br0: 863035125 16571440    0    0    0     0          0         0 9122070503 59231752    0    0    0     0       0          0
virbr0-nic:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    lo:   12444     170    0    0    0     0          0         0    12444     170    0    0    0     0       0          0
enp1s0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
lxcbr0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
virbr0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
enp3s0: 1095035285 16571440    0    0    0     0          0      3023 9121922741 59230702    0    0    0     0       0          0

Сценарий:

#!/usr/bin/python
# -*- coding: utf-8 -*-
#

import re
import time

previous_rx = 0
previous_tx = 0

while True:
    time.sleep(60)
    f = open('/proc/net/dev', 'r')
    data = f.readlines()
    for item in data:
        match=re.search(' br0:\s',item)
        if match is not None:
            if_data = ' '.join(item.split())
            if_data = if_data.split(' ')
            current_rx = if_data[2]
            current_tx = if_data[10]
            diff_rx = float(current_rx) - float(previous_rx)
            diff_tx = float(current_tx) - float(previous_tx)
            diff = diff_rx + diff_tx
            print "rx packets: "+str(diff_rx)+" :   tx packets: "+str(diff_tx)+" : Total packets: "+str(diff)
            previous_rx = current_rx
            previous_tx = current_tx

Итак, мой сетевой интерфейс, br0:, пакетов в минуту:

rx packets: 16571260.0 :   tx packets: 59231628.0 : Total packets: 75802888.0  <<< My script doesn't initialize properly.
rx packets: 14.0 :   tx packets: 7.0 : Total packets: 21.0
rx packets: 8.0 :   tx packets: 7.0 : Total packets: 15.0
rx packets: 10.0 :   tx packets: 7.0 : Total packets: 17.0
rx packets: 8.0 :   tx packets: 7.0 : Total packets: 15.0
rx packets: 115.0 :   tx packets: 80.0 : Total packets: 195.0
rx packets: 31.0 :   tx packets: 22.0 : Total packets: 53.0
rx packets: 194.0 :   tx packets: 552.0 : Total packets: 746.0
rx packets: 9.0 :   tx packets: 7.0 : Total packets: 16.0
Другие вопросы по тегам