Контролюйте кількість байтів, переданих на / з IP-адреси на порт


19

Хто-небудь може порекомендувати інструмент командного рядка 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 та був безкоштовним / відкритим. Було б добре, якби був існуючий інструмент, який мені теж просто не вистачало!

Відповіді:


14

Ви можете використовувати 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як root.

Приклад виводу:

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

7
Також цілком законно мати правило без цілі, виключно для підрахунку, наприклад, iptables -A INPUT -d 1.2.3.4 -p tcp --dport 3456. Це не призведе до трафіку, оскільки немає аргументу "-j", але кожен відповідний пакет підкреслить підрахунки.
MadHatter підтримує Моніку

9

Я збирався запропонувати провідну стрічку (бо це багато функцій " розмови "), але це не інструмент командного рядка. Ви можете спробувати 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

7

Існує також інструмент під назвою "iftop", який відображає використання пропускної здатності в інтерфейсі від хоста. Я думаю, що iftop може зробити те, що ви описали, але, як правило, його інтерфейс - це щось на кшталт "top".

Отже, для вашого прикладу, я думаю, що ви можете просто створити конфігураційний файл, щоб надати свій фільтр-код.

Отже, ось мій фільтр-код у моєму конфігураційному файлі.

$ cat /tmp/conf
filter-code: port http and host google.com

Потім я провів наступне, щоб побачити мережевий трафік.

$ sudo iftop -c /tmp/conf

Не впевнений, чи це найкращий варіант, але, безумовно, один із способів досягти того, що вам потрібно. HTH.


3
Ви також можете вказати фільтр у командному рядку без використання конфігураційного файлу:iftop -f 'port 80 and host google.com'
gioele

Оп як би загальна кількість переданих байтів, а не пропускна здатність. iftopМоже це показати?
arainone

3

Ви також можете спробувати "iptraf", це легкий і простий. Він може фільтрувати по порту і надає інформацію високого рівня, відсутність даних про корисне навантаження тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.