Отслеживать количество байтов, переданных на / с IP-адреса порта
Может ли кто-нибудь порекомендовать инструмент командной строки linux для мониторинга количества байтов, передаваемых между локальным сервером и указанным IP-адресом / портом.
Эквивалентная команда tcpdump будет:
tcpdump -s 0 -i any -w mycapture.trc port 80 host google.com
какие выводы:
46 packets captured
131 packets received by filter
0 packets dropped by kernel
Я хотел бы что-то подобное, что выводит:
54 bytes out, 176 bytes in
Я бы хотел, чтобы он работал на RHEL и был свободен / открыт. Было бы хорошо, если бы существовал какой-то инструмент, который мне тоже не хватало!
4 ответа
Вы можете использовать iptables. Если вы еще не используете его, вы можете использовать открытую конфигурацию Accept, но у вас есть правило для подсчета.
Например, на RHEL ваш /etc/sysconfig/iptables
файл может выглядеть примерно так:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -j INPUT
-A INPUT -s 10.10.1.1 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 10.10.1.1 -p tcp -m tcp --dport 80 -j ACCEPT
Где 10.10.1.1:80 - хост: порт, на который вы хотите рассчитывать трафик (вы не можете использовать имя хоста). Затем вы можете проверить трафик с помощью команды iptables -nvxL
как корень.
Пример вывода:
Chain INPUT (policy ACCEPT 7133268 packets, 1057227727 bytes)
pkts bytes target prot opt in out source destination
7133268 1057227727 ACCEPT tcp -- * * 10.10.1.1 0.0.0.0/0 tcp spt:80
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 INPUT all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 7133268 packets, 1057227727 bytes)
pkts bytes target prot opt in out source destination
7133268 1057227727 ACCEPT tcp -- * * 0.0.0.0/0 10.10.1.1 tcp dpt:80
Я собирался предложить wireshark (для него много " разговорных " функций), но это не инструмент командной строки. Вы можете попробовать tshark, который является инструментом анализа командной строки, который закрыт для wireshark. Вывод должен иметь (несколько) то, что вы ищете (пример ниже):
tshark -R "ip.addr == 10.2.3.67" -z conv,ip -p -f "tcp port 22"
Результат:
| <- | | -> | | Total |
| Frames Bytes | | Frames Bytes | | Frames Bytes |
10.2.3.23 <-> 10.2.3.67 42 15341 35 4890 77 20231
Существует также инструмент iftop, который отображает использование полосы пропускания на интерфейсе хоста. Я думаю, что iftop может сделать то, что вы описали, но обычно его интерфейс похож на "top".
Итак, для вашего примера, я думаю, что вы можете просто создать конфигурационный файл, чтобы предоставить свой фильтр-код.
Вот мой код фильтра в моем конфигурационном файле.
$ cat /tmp/conf
filter-code: port http and host google.com
Затем я запустил следующее, чтобы увидеть сетевой трафик.
$ sudo iftop -c /tmp/conf
Не уверен, что это лучший вариант, но, безусловно, один из способов достижения того, что вам нужно. НТН.
Вы также можете попробовать "iptraf", он легкий и простой. Он может фильтровать по порту и дает вам информацию высокого уровня, никаких данных полезной нагрузки и т. Д.