Используем SNORT
Как tcpdump. (слушаем сеть иными словами)
В целях отладки и тестирования интересно знать иногда, что у нас делается в сети. Для этого можно использовать и snort. (Микроскопом по гвоздям... однако, как иногда приятно микроскопом да по гвоздям :-) ). И так:
user@host# snort -vde
здесь, -v - позволяет вывести IP и TCP/UDP/ICMP заголовки;
-d - позволяет увидеть данные в пакетах;
-e - выводит заголовки канального уровня (MAC-адреса и пр.).
Выше указанная команда выдает что-то типа:
Log directory = /var/log/snort
Initializing Network Interface eth0
--== Initializing Snort ==--
Decoding Ethernet on interface eth0
--== Initialization Complete ==--
-*> Snort! <*-
Version 1.8.6 (Build 105)
By Martin Roesch (roesch@sourcefire.com, www.snort.org)
09/02-16:12:50.351602 0:80:48:89:5:3E -> 1:0:5E:0:0:2 type:0x800 len:0x3C
193.124.167.226 -> 224.0.0.2 ICMP TTL:128 TOS:0x0 ID:256 IpLen:20 DgmLen:28
Type:10 Code:0 ROUTER SOLICITATION
00 00 00 00 ....
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
09/02-16:12:50.601110 ARP who-has 193.124.164.182 tell 193.124.164.160
09/02-16:12:50.701639 ARP who-has 193.124.167.254 tell 193.124.164.141
09/02-16:12:50.716590 0:0:C0:DC:66:42 -> 1:0:5E:0:1:16 type:0x800 len:0x63
193.124.166.157:427 -> 224.0.1.22:427 UDP TTL:32 TOS:0x0 ID:8445 IpLen:20 DgmLen:85
Len: 65
01 01 00 39 00 00 65 6E 00 03 4C 9B 00 00 00 29 ...9..en..L....)
42 69 6E 64 65 72 79 2E 4E 6F 76 65 6C 6C 2F 2F Bindery.Novell//
28 53 56 43 4E 41 4D 45 2D 57 53 3D 3D 53 48 41 (SVCNAME-WS==SHA
4D 41 4E 41 45 56 41 29 2F MANAEVA)/
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
09/02-16:12:51.035006 ARP who-has 193.124.163.208 tell 193.124.167.207
09/02-16:12:51.460994 ARP who-has 193.124.167.254 tell 193.124.162.238
09/02-16:12:51.600966 ARP who-has 193.124.164.182 tell 193.124.164.160
09/02-16:12:51.665363 0:0:C0:DC:66:42 -> 1:0:5E:0:1:16 type:0x800 len:0x63
193.124.166.157:427 -> 224.0.1.22:427 UDP TTL:32 TOS:0x0 ID:8701 IpLen:20 DgmLen:85
Len: 65
01 01 00 39 00 00 65 6E 00 03 4C 9B 00 00 00 29 ...9..en..L....)
42 69 6E 64 65 72 79 2E 4E 6F 76 65 6C 6C 2F 2F Bindery.Novell//
28 53 56 43 4E 41 4D 45 2D 57 53 3D 3D 53 48 41 (SVCNAME-WS==SHA
4D 41 4E 41 45 56 41 29 2F MANAEVA)/
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
и так далее...
Как видно, по умолчанию используется eth0. Если нас больше интересует второй интерфейс, добавим просто "-i eth1" и получим требуемое.
Теперь, допустим, нам интересно поизучать общение двух машин по протоколу ftp. Пусть машинна server - сервер, а client - клиент. Тогда в командной строке, чтобы наблюдать только необходимый нам трафик, можно написать,
user@host# snort -vde '(dst host client and src host server and \
user@host# (src port 20 or 21)) or
user@host# (src host client and dst host server and (dst port 20 or 21))'
Здесь, в первом логическом блоке, выделенном скобками, определяем пакеты направляющиеся от сервера с определенных портов к клиенту, во втором - пакеты от клиента к серверу на порты 20 и 21. Так как нас интересуют и те, и другие пакеты, между блоками используется логичесакя связка 'or'. С помощью примитивов dst host и src host задаем источник и пункт назначения. С помощью примитивов src port и dst port указываем порты отправители и порты приемники пакетов, которые нас интересуют. Поскольку нас интересует пакет либо 20-го, либо 21-го порта, используем между примитивами логическую связку 'or'. Логическим 'and' свяжем теперь примитивы, правила задаваемые которыми должны выполнятся для одного пакета.
После такого введения дальнейшую информацию можно уже черпать из ман-страниц.
|