Доброго дня. Вопрос следующий.
Имеется лог фаервола. Точнее, фильтра пакетов. В нём - много строк, каждая отвечает за одно соединение. Строки примерно следующего вида:
<time> <Source_IP> <Destination_IP> <левая инфа> <action[dropped|accepted]>
Требуется следующее:
Составить список следующего вида:
Подсписок_1:
<Source_ip_1> <Destination_IP_1> <Destination_IP_1_resolved_name> <connections_count>
<Source_ip_1> <Destination_IP_2> <Destination_IP_2_resolved_name> <connections_count>
<Source_ip_1> <Destination_IP_n> <Destination_IP_n_resolved_name> <connections_count>
Подсписок_2:
<Source_ip_2> <Destination_IP_1> <Destination_IP_1_resolved_name> <connections_count>
<Source_ip_2> <Destination_IP_2> <Destination_IP_2_resolved_name> <connections_count>
<Source_ip_2> <Destination_IP_n> <Destination_IP_n_resolved_name> <connections_count>
То есть нужно составить список того, кто куда сколько раз подключался, и при этом отрезолвить по возможности эти адреса, чтобы не искать нслукапом соответствия вручную. При этом должны попадать только те пакеты, которые были accepted. Также требуется отсортировать данные внутри подсписков по количеству подключений (столбец <connections_count>) по убывающей, чтобы сразу, глянув на список, можно было сказать: Марья Ивановна больше всего заходила на одноклассники.ру. Я понимаю, что это ни в коей мере не даёт возможности понять, сколько трафика было потрачено, но в данном случае интересует именно количество попыток соединения.
Пример двух реальных строк:
2011:07:11-00:00:02 DesheliGateway ulogd[4137]: id=«2001» severity=«info» sys=«SecureNet» sub=«packetfilter» name=«Packet dropped» action=«drop» fwrule=«60002» initf=«eth1» outitf=«eth0» srcmac=«48:5b:39:3:42:50» dstmac=«0:26:5a:70:45:83» srcip=«192.168.0.11» dstip=«213.170.92.166» proto=«17» length=«429» tos=«0x00» prec=«0x00» ttl=«63» srcport=«5060» dstport=«5068»
2011:07:11-00:00:02 DesheliGateway ulogd[4137]: id=«2001» severity=«info» sys=«SecureNet» sub=«packetfilter» name=«Packet dropped» action=«drop» fwrule=«60002» initf=«eth1» outitf=«eth0» srcmac=«48:5b:39:3:42:50» dstmac=«0:26:5a:70:45:83» srcip=«192.168.0.11» dstip=«91.195.170.37» proto=«17» length=«416» tos=«0x00» prec=«0x00» ttl=«63» srcport=«5060» dstport=«5060»
Кстати, если length - это длина пакета, то в каких единицах, есть идеи? Они бывают совершенно произвольными. Возможно, стоит также добавлять это поле, так как это предположительно даст представление о потраченном трафике в байтах.
Насколько я понимаю, для решения этой задачи потребуются следующие утилиты:
cat, grep, wc, nslookup, sed, а также операторы цикла и знания в области программирования на bash, которыми я не обладаю совершенно.
Если найдутся желающие помочь мне решить эту задачу, буду благодарен. Единственная просьба: не надо предлагать «копать в сторону...». Этой информации мне недостаточно, иначе и сам бы мог написать нужный скрипт. Думаю, что помочь мне может только приблизительный текст программы.
Похожие темы
- Форум real ip + дешёвый роутер + DDOS (2012)
- Форум Броадкасты (2004)
- Форум што за пакетики (2005)
- Форум снова ppp-сервер (2002)
- Форум related, established (2007)
- Форум проблема с TCP-соединением (2005)
- Форум iptables: В логи пишется «спам» и ещё один вопрос (2005)
- Форум iptables: В логи пишется «спам» и ещё один вопрос (2005)
- Форум Два VPN-а на одном сервере (2022)
- Форум Проблема с LVS (ipvs) tunnel ipip truncated (2018)