Ваше приложение, вероятно, отправляет пакеты на определенный номер порта UDP или TCP или на определенный IP-адрес.
Поэтому вы можете использовать что-то вроде TCPdump для захвата этого трафика.
TCPdump не дает вам желаемую статистику в реальном времени, но вы можете передать ее вывод чему-то, что делает (я постараюсь обновить этот ответ ответом позже).
Обновить:
$ sudo tcpdump -i eth1 -l -e -n | ./netbps
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
11:36:53 2143.33 Bps
11:37:03 1995.99 Bps
11:37:13 2008.35 Bps
11:37:23 1999.97 Bps
11:37:33 2083.32 Bps
131 packets captured
131 packets received by filter
0 packets dropped by kernel
Я прервал это через минуту, нажав Ctrl + C.
Вам нужно добавить подходящее выражение фильтра в конце tcpdump
команды, чтобы включить только трафик, генерируемый вашим приложением (например port 123
)
Программа netbps
такая:
#!/usr/bin/perl
use strict;
use warnings;
use Time::HiRes;
my $reporting_interval = 10.0; # seconds
my $bytes_this_interval = 0;
my $start_time = [Time::HiRes::gettimeofday()];
STDOUT->autoflush(1);
while (<>) {
if (/ length (\d+):/) {
$bytes_this_interval += $1;
my $elapsed_seconds = Time::HiRes::tv_interval($start_time);
if ($elapsed_seconds > $reporting_interval) {
my $bps = $bytes_this_interval / $elapsed_seconds;
printf "%02d:%02d:%02d %10.2f Bps\n", (localtime())[2,1,0],$bps;
$start_time = [Time::HiRes::gettimeofday()];
$bytes_this_interval = 0;
}
}
}
Это всего лишь пример, приспособиться к вкусу.
vnstat -tr
Использование как ниже из той же папки:
Чтобы проверить упаковщик для интерфейса:
./netpps.sh eth0
Чтобы проверить скорость на интерфейс:
./netspeed.sh eth0
Измерение пакетов в секунду на интерфейсе netpps.sh в качестве имени файла
Измерение пропускной способности сети на интерфейсе netspeed.sh в качестве имени файла
Пожалуйста, обратитесь на этот сайт для получения дополнительной информации http://xmodulo.com/measure-packets-per-second-throughput-high-speed-network-interface.html
источник
Самый простой в использовании и самый простой для контроля вывода и перенаправления в файл для непрерывной регистрации:
Вероятно, поставляется с большинством дистрибутивов Linux, и может быть установлен с Brew на Mac
источник
Я думаю, что вы можете использовать интерфейс proc для получения необходимой информации. Я создал этот небольшой сценарий оболочки под названием rt_traf.sh:
Это напечатает входные и выходные октеты, разделенные табуляцией. Октеты, умноженные на 8, дадут вам бит / секунду, а затем, поделенные на 10 ^ 6, дадут вам мегабит / секунду. Конечно, вы можете добавить это в сценарий оболочки, чтобы отформатировать вывод, как вы хотите. Вы можете вызвать это с помощью PID вашего приложения,
./rt_traf.sh <PID>
что даст вам мгновенное чтение вашего приложения с момента запуска. Для просмотра статистики в реальном времени в секунду вы можете обернуть скрипт оболочки в команду watch:-n
Параметр можно регулировать вплоть до десятых долей секунды. Чтобы сделать расчет во времени, я бы сделал что-то вроде этого:Опять же, математика может быть скорректирована на размер / время, которое вам нужно. Не самый элегантный или термоусадочный раствор, но он должен работать в крайнем случае.
источник
/proc/<pid>/net/netstat
возвращает те же данные, что иproc/net/netstat
, т.е. Вы получаете те же данные для любых / всех процессов.Мне просто нужно было измерить объем входящего и исходящего трафика mysql в старой системе, где perl не работал должным образом, поэтому я не мог удержаться от написания нескольких строк awk, которые служат той же цели измерения общего трафика, видимого tcpdump:
И если вам больше нравятся однострочники, вот один для вас:
источник
else
Заявление должно быть удалено в противном случае строки будут пропущены, иsum
не будет точно.tcpdump -l -e -n port 3306 | awk '{t=substr($1,0,8);n=substr($9,0,length($9)-1);if(t!=pt){print t,sum;sum=0;};sum+=n;pt=t;}
Для каждого приложения можно сделать правило брандмауэра, используя xtables и модификацию ниже.
Это не отвечает на вопрос «на приложение», а только на вопрос «на интерфейс».
Ниже приведен скрипт, который работает на большинстве встроенных Linux-маршрутизаторов, таких как Ubiquiti и OpenWRT-совместимые, и получает его подробности из / proc / net / dev.
(И легко изменить на пакеты и т. Д.)
Скопируйте вышеупомянутое в свой буфер обмена и затем в сеансе терминала на своем маршрутизаторе:
затем: Ctrl + V (или правый клик / Вставить)
затем: Ctrl + D
Вы также можете вставить его в блокнот, а затем просто повторить вышеописанное, если вам нужно отредактировать его - не у всех встроенных маршрутизаторов есть редактор! Убедитесь, что вы скопировали все с # вверху до готового; внизу.
Приведенный выше пример с netpps великолепен, но не на всех устройствах есть смонтированная файловая система / sys. Возможно, вам также придется изменить / bin / bash на / bin / sh или наоборот.
Источник: https://gist.github.com/dagelf/ab2bad26ce96fa8d79b0834cd8cab549
источник