Анализ трафика локальной сети, обновление квот с помощью tshark и BASH - PullRequest
1 голос
/ 07 февраля 2011

У меня немного странная проблема, и я действительно надеюсь, что кто-то может помочь с этим:

Я иду в университет, и беспроводная сеть здесь выдает каждую регистрацию определенной квоты / неделю (у меня 2 ГБ).Это означает, что каждую неделю мне разрешен только доступ к 2 ГБ Интернета - мои закачки и загрузки должны составлять не более 2 ГБ (мне разрешен доступ к веб-странице , в которой указана моя оставшаяся квота).Мне обычно дают несколько грамм КБ, но давайте не будем учитывать это для этой проблемы.

Мой ноутбук работает под управлением Ubuntu и имеет установленный системный монитор, который я настроил для отображения (среди прочего) моегооставшаяся беспроводная квота.Первоначально я набрал веб-страницу и grep для моей оставшейся квоты.Однако, поскольку мой conky обновляется каждые 5 секунд, и я подключен к беспроводному соединению на срок свыше 12 часов, проверка самой веб-страницы 1011 * сама по себе убивает мою беспроводную квоту.

Для решения этой проблемыЯ подумал, что мог бы сделать одно из двух:

  1. Хит на веб-страницу гораздо реже, чтобы это не нарушило мою квоту.
  2. Мониторбеспроводной трафик на моей беспроводной карте и продолжаю вычитать его из 2 ГБ

(1) - это то, что я сделал до сих пор: я настраиваю задание cron, чтобы посещать веб-страницу каждыйминуту и ​​сохранить результат в файл в моей локальной файловой системе.Конки затем читает этот файл - не нужно, чтобы он попал на веб-страницу;благодаря conky не теряется беспроводная квота.

Это решение выигрывает в 12 раз, но этого все еще недостаточно.Тем не менее, я фанат данных в реальном времени и больше не буду уменьшать частоту крона.

Итак, единственное другое решение, которое у меня есть, это (2).Это когда я узнал о wireshark и его версии командной строки tshark.Теперь вот что, я думаю, я должен сделать:

  1. daemonize tshark
  2. установить tshark для мониторинга количества (в КБ или В или МБ - я могу преобразовать это позже) потока трафикачерез мою беспроводную карту
  3. продолжайте добавлять эту информацию о трафике в файл1
  4. , суммируйте информацию о трафике в файле1 и вычтите ее из 2 ГБ.Сохраните результат в file2
  5. установите conky для чтения file2 - это моя оставшаяся квота
  6. установите задание cron для удаления / erase_the_contents_of file1 каждый понедельник в 6:30 утра (именно тогда еженедельная квота сбрасывается)

Наконец-то мои вопросы:

  1. Вы видите лучший способ сделать это?
  2. Если нет, то как мне настроить tshark назаставить его делать то, что я хочу?Какие еще скрипты мне могут понадобиться?

Если это поможет, веб-сайт сообщит мне, что моя оставшаяся квота равна КБ

Я уже посмотрел на tshark man page , что, к сожалению, не имеет для меня никакого смысла, поскольку я являюсь сетью-n00b.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011
0 голосов
/ 07 февраля 2011

Интересный вопрос. У меня нет опыта использования tshark , поэтому лично я подхожу к этому, используя iptables .

Глядя на:

[root@home ~]# iptables -nvxL | grep -E "Chain (INPUT|OUTPUT)"
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
Chain OUTPUT (policy ACCEPT 9763462 packets, 1610901292 bytes)

мы видим, что iptables ведет подсчет байтов, проходящих через каждую цепочку. Таким образом, можно предположить, что вы можете отслеживать использование полосы пропускания следующим образом:

  1. Когда ваша система запускается, извлеките оставшуюся квоту из Интернета
  2. Обнуление байта в iptables (используйте опцию -z)
  3. Каждые X секунд, использовать от iptables и вычитать из квоты

Вот несколько примеров использования iptables для учета IP .

Предостережения

У этого подхода есть некоторые недостатки. Прежде всего, вам нужен root-доступ для запуска iptables , что означает, что вам нужно conky, работающий от имени root, или запустить демон cron, который записывает текущие значения в файл, к которому у conky есть доступ.

Кроме того, не все пакеты INPUT / OUTPUT могут учитываться при выделении полосы пропускания, например доступ в интрасеть, DNS и т. д. Можно отфильтровать только соответствующие соединения, сопоставив их и поместив в отдельную цепочку iptables (примеры приведены в приведенной выше ссылке). Более простой подход (если расхождение не слишком велико) состоит в том, чтобы иногда извлекать вашу квоту в реальном времени из Интернета, сбрасывать значения и начинать заново.

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

...