Статистика трафика на сетевой порт

15

У меня есть две машины с двумя приложениями, которые общаются друг с другом на нескольких сетевых портах (TCP и UDP). Я хочу считать трафик, который они отправляют и получают. Мне нужен не только общий подсчет, но и статистика на машину на порт в день. Я пробовал darkstat , но он не предоставляет статистику за день, а только общие счетчики.

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

постоянный репер
источник

Ответы:

16

iptables может дать вам статистику о том, сколько было запущено каждое правило, поэтому вы можете добавить правила LOG на интересующие вас порты (скажем, порт 20 и порт 80):

iptables -A INPUT -p tcp --dport 22
iptables -A INPUT -p tcp --dport 80

а потом

iptables -n -L -v

даст вам количество пакетов и байтов, отправленных через эти порты. Конечно, вам придется разобрать с вывода интересующие вас порты.

Если вам нужны точные значения, добавьте -x:

iptables -n -L -v -x
mzet
источник
4
Не нужно ставить LOGправила (которые заполняют ваши файлы журналов), просто посчитайте, сколько раз правило срабатывает.
Жиль "ТАК ... перестать быть злым"
4
В самом деле. Правило не должно иметь действия. Полезный урок: правила без -Jхороши для учета.
Алексиос
2

Вы можете добавить правила учета в свою конфигурацию iptables. Это должно произойти до того, как вы примете УСТАНОВЛЕННЫЙ и СВЯЗАННЫЙ трафик, иначе вы пропустите подсчет проходящего трафика. Для подсчета веб-трафика попробуйте правило, подобное:

iptables -A INPUT -p tcp --dport 80 

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

Shorewall брандмауэр позволяет легко добавлять правила бухгалтерского учета для набора правил.

BillThor
источник
1

Не забудьте включить выходную статистику трафика.

# Port 80 (HTTP).
iptables -A INPUT -p tcp --dport 80
iptables -A OUTPUT -p tcp --sport 80

# Port 443 (HTTPS).
iptables -A INPUT -p tcp --dport 443
iptables -A OUTPUT -p tcp --sport 443


iptables -n -L -v
iptables -n -L -v -x


iptables -n -L -v -x | grep -i "Chain\|:443\|:80"

Chain INPUT (policy DROP 357 packets, 22828 bytes)
 1286265 75076978 ACCEPT tcp  --  *      *    0.0.0.0/0  0.0.0.0/0  tcp dpt:80
 1305378 75018232 ACCEPT tcp  --  *      *    0.0.0.0/0  0.0.0.0/0  tcp dpt:443

Chain OUTPUT (policy ACCEPT 303516 packets, 94716311 bytes)
     442   255112        tcp  --  *      *    0.0.0.0/0  0.0.0.0/0  tcp spt:80
      46    10515        tcp  --  *      *    0.0.0.0/0  0.0.0.0/0  tcp spt:443
Busindre
источник
0

Используйте tcpdump,

tcpdump -i любой -nnn

выходные данные вышеупомянутой команды будут включать метку времени, IP-адреса src / dest, порт и длину пакета. С помощью этой информации вы можете легко достичь своей цели с помощью хорошо написанного сценария.

Derui Si
источник
0

Не ясно, нужно ли вам использовать IP-адрес назначения, но vnstat - полезный инструмент для записи трафика на интерфейс. Установите его и запустите vnstat -u -i eth0для каждого интерфейса, который вы хотите отслеживать. Чтобы потом использовать за день использования vnstat -i eth0 -d.

mgorven
источник
1
Я не думаю, что с помощью vnstatя могу получить статистику на порт ... Или я не прав?
РВМ
1
@pbm Ах, вы имеете в виду порт TCP / UDP. Нет, vnstat не будет этого делать.
mgorven