PDA

Просмотр полной версии : Как проверить свою сеть



stayer
26.06.2011, 15:53
Как только компьютер подключается к сети (информационной), у него появляется собственная сетевая жизнь. Причем зачастую пользователи понятия о ней не имеют. Программы самостоятельно посылают данные в сеть от относительно безобидных сведений о конфигурации систем, до ваших персональных данных, навроде сохраненных паролей.

В закрытых коммерческих системах типа Windows также частенько заводятся трояны, черви и прочий сетевой сифилис, вследствие чего компьютеры без ведома хозяев становятся участниками робот-сетей (bot-net), участвующих в ddos-атаках, рассылающих спам и т.д. или используются для совершения криминальных операций.

Отдельной строчкой идет анонимность. Различные утечки делают ее невозможной без применения специальных средств анонимизации. Не помогают даже шифрующие прокси-сервера.

Neoformator
26.06.2011, 16:08
Ну и как её проверить?
Хороший фаер, правильные настройки, и ещё масса тонкостей помогут в этом деле.

А вообще пользовать Linux - милое дело.

stayer
26.06.2011, 16:57
Анализ сетевого трафика

Для проверки сети используются специальные программы - перехватчики-анализаторы сетевого трафика (информации, идущей по сети). Их называют еще снифферами (sniffer - вынюхиватель).

Наиболее известным анализатором является пожалуй программа tcpdump (http://ru.wikipedia.org/wiki/Tcpdump) , включенная в большинство дистрибутивов Linux. Для Windows есть ее клоны: открытая windump (http://www.winpcap.org/windump/install/default.htm)и условно-бесплатная tcpdump for windows (http://www.microolap.com/products/network/tcpdump/), их установка проста и понятна.

Программы консольные, поэтому для запуска потребуется консоль. В Linux все понятно. В Windows для запуска консоли надо выполнить cmd.exe : кнопка "Пуск" -> "Выполнить", в появившемся окошке набрать cmd, далее перейти в консоли в каталог установленного tcpdump-клона (командой cd - помощь1 (http://www.colorpilot.ru/command_line.html), помощь2 (http://pxkod.3bb.ru/viewtopic.php?id=216)).

Запуск в консоли tcpdump производится командной tcpdump с целой кучей ключей. Ключи выбираются в зависимости от задачи. Проверить работу можно просто, набрав в консоли команду* tcpdump или windump, в зависимости от установленной программы, после полазив в сети, в результате чего в окне консоли должна появиться информация о сетевом трафике.

Анализ DNS-утечек

Рассмотрим в качестве примера важную задачу определения DNS-утечек, являющуюся критичной с т.з. анонимности. При обращении к доменному имени сайта (типа dpni.org) вместо его ip-адреса (72.46.129.211), происходит вычисление ip по этому имени. Делается это службой Domain Name System (DNS). При этом происходит утечка: в сеть посылается открытый нешифрованный запрос к серверам DNS, содержащий доменное имя (dpni.org), что позволяет любопытным (СОРМ-2 (http://forum.dpni.org/showthread.php?t=10326)) узнать, куда вы ходите. Но даже если вы зашли, набрав в адресной строке ip-адрес (72.46.129.211), то и тут возможна утечка из-за запросов активных элементов загруженной с сайта страницы (например могут выполниться java-скрипты). Без специальных средств анонимизации типа TOR (http://forum.dpni.org/showthread.php?t=9559), включающих анализ, фильтрацию и обработку опасных запросов, с DNS-утечками не справиться. Если использовать доменные имена, то не спасает ни шифрующий прокси, ни opera turbo (http://forum.dpni.org/showthread.php?t=33270), а если не отключить активные элементы браузера (flash, java-script и т.д.), то и использование ip-адресов в запросах может не помочь.

Но и на старуху бывает проруха: недавно кто-то из пользователей лучшей анонимизирующей сборки Tor IM Browser (http://forum.dpni.org/showthread.php?t=6730) обнаружил DNS-утечку при использовании Pidgin в момент установки соединения с jabber-серверами. В результате потенциальный шпион может узнать, что вы пользуетесь, например, сервером jabber.org. Эта угроза конечно не смертельна (миллионы пользуются jabber.org), но вкупе с другими атаками может навредить, поэтому сборка Tor Im Browser временно приостановлена (https://blog.torproject.org/blog/tor-im-browser-bundle-discontinued-temporarily).

Теперь посмотрим на DNS-утечку. Запросы DNS короткие, поэтому посылаются по транспортному протоколу UDP (если запрос слишком длинный, используется обычный транспорт TCP), при этом используется 53 порт. Анализ DNS утечек можно осуществить следующей командой*: tcpdump port 53
При этом желательно закрыть все, кроме исследуемого приложения. Если после этой команды в результате работы исследуемого приложения появились строки в окне tcpdump, то DNS-утечка имеет место быть. Дальше можно анализировать какая.

* Если используется несколько сетевых устройств, то возможно дополнительно придется указать требуемый сетевой интерфейс. Их список можно узнать консольными командами: ifconfig для Linux и windump -D (см. ниже в пособиях) для Windows (также можно выполнить ipconfig /all, см. тут (http://www.winblog.ru/winxp/page,2,1147765767-21080801.html)). После нахождения имени сетевого интерфейса, надо прибавлять к команде следующее: -i <имя_сетевого_интерфейса или его номер> (пример для Linux: tcpdump -i eth1; для Windows: windump -i 2)

Neoformator
26.06.2011, 17:01
Вот это уже интересно, спасибо.
Жду новых пособий по проверки безопасности.

stayer
26.06.2011, 17:05
Пособие 1


Tcpdump & WinDump

(by Ghost//Necrosoft)

Как было сказано выше, TcpDump - наиболее часто используемый сниффер под *nix системы. Вы можете найти его в любом из последних дистрибутивов той операционки, которую вы используете. Описывать tcpdump лучше всего, просто перечислив все его опции командной строки - таким образом вы получаете перечисление его возможностей и прямое руководство к действию - "в одном флаконе".

WinDump - порт TcpDump с *nix систем, выполняет те же самые функции и имеет такой же синтаксис, что и TcpDump, но имеет пару дополнительных опций командной строки, о которых будет рассказано ниже.

Небольшая аннотация к использованию TcpDump под различными системами. Под SunOS с использованием устройств nit или bpf: для запуска tcpdump вы должны иметь доступ на чтение к /dev/nit или /dev/bpf*. Под Solaris с dlpi вы должны иметь доступ к псевдосетевым адаптерам, таким как /dev/le. Под HP-UX с dlpi: вы должны быть root'ом или на tcpdump должен быть установлен uid на root. Под IRIX с snoop и Linux: требования, аналогичные HP-UX. Под Ultrix и Digital UNIX: только суперюзеру доступны promiscuous-mode операции, используя pfconfig(8) можно получить право на запуск tcpdump. Под BSD: вы должны иметь доступ к /dev/bpf*. Под Win32: вы должны установить NDIS packet capture driver.

А теперь подробно разберем опции командной строки.

TcpDump [ -adeflnNOpqStvx ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ expression ]. Специфические опции Windump [-D] [ -B size ].

-a разрешает конвертировать сетевые и широковещательные адреса в имена.

-c выход после обработки count пакетов.

-d выводит содержимое пакета в удобочитаемом виде.

-dd выводит содержимое пакета как фрагмент Си-программы.

-ddd выводит содержимое пакета в десятичном виде.

-e выводит заголовки канального уровня в каждой новой строке.

-f выводит адреса удаленных и локального хостов без преобразования в имена.

-F использовать file с описанием параметров фильтрации (дополнительные выражения в командной строке игнорируются).

-i использовать интерфейс interface для трассировки. Если не определен, tcpdump находит активный сетевой интерфейс с наименьшим номером (исключая loopback). В Windows interface — имя сетевого адаптера или его номер (можно узнать, запустив WinDump —D).

-l использует буферизированный вывод на stdout. Полезным может оказаться конструкция вида "tcpdump -l | tee dat'' or "tcpdump -l > dat & tail -f dat''.

-n не преобразовывать адреса (т.e. адрес хоста, номер порта и т.д.) в имена.

-N не печатать доменное имя в имени хоста. Т.е. если использован данный флаг, tcpdump напечатает "nic'' вместо "nic.ddn.mil''.

-O не запускать оптимизатор пакетов. Эта опция полезна, если вы сами разгребаете пакеты.

-p не переводить сетевой интерфейс в "promiscuous mode".

-q сокращенный вывод. Выводит информацию в сокращенном виде.

-r читает пакеты из файла file (которые созданы при помощи опции -w). Если вы хотите использовать в качестве ввода консоль, то file это "-''.

-s выдает snaplen байт каждого пакета (в SunOS'овсоком NIT минимальное количество 96). 68 байт достаточно для протоколов IP, ICMP, TCP и UDP, однако обрезает информацию с более высоких уровней, скажем, DNS и NFS пакетов.

-T принудительная интерпретация пакетов по типу type соответствующих маске "expression". На данный момент известны следующие типы: rpc (Remote Procedure Call), rtp (Real-Time Applications protocol), rtcp (Real-Time Applications control protocol), vat (Visual Audio Tool), и wb (distributed White Board).

-S выводит абсолютный номер TCP-пакета.

-t не выводит время в каждой строке.

-tt выводит неформатированное время в каждой строке.

-v детальный вывод. К примеру, время жизни пакетов и тип сервиса.

-vv более детальный вывод. К примеру, вывод дополнительных полей NFS reply packets.

-w записывает raw-пакеты в file, которые вы сможете в дальнейшем расшифровать с использованием опции —r. Если вы хотите использовать в качестве вывода консоль, то file это "-''.

-x выводит каждый пакет в шестнадцатеричном виде (без заголовка). На вывод будет отправлено snaplen байт.

Дополнительные опции WinDump:

-B устанавливает размер буфера драйвера size в килобайтах. По умолчанию размер буфера 1 мегабайт. Если в процессе работы некоторые пакеты не отображаются, попробуйте увеличить размер буфера. Если у вас РРР-соединение или 10 Мбит Ethernet, то размер буфера можно уменьшить вдвое или втрое.

-D выводит список сетевых устройств, которые присутствуют в вашей системе. Список имеет вид: number — номер сетевого устройства в системе, name — его имя, а за ними следует описание устройства. В последствии вы сможете использовать эти данные для того, чтобы работать со всеми имеющимися сетевыми интерфейсами вашей системы, которые доступны в данный момент. А выбрать устройство можно будет при помощи опции —I — "WinDump —i name" или "WinDump —i number".

expression — собственно, выражение, которое задает критерий фильтрации пакетов. Если поле expression отсутствует, то выводятся все пакеты. В противном случае выводятся только те пакеты, которые соответствуют маске expression.

expression может состоять из одного или более примитивов. Примитивы часто состоят из id (имя или номер) определителя. Существует три ключевых типа определителей:

type — определитель, задающий общую политику. Возможные типы — host, net и port. Т.е. "host foo", "net 128.3", "port 20". Если type не указан, то по умолчанию используется host.

dir — определитель, указывающий направление передачи пакетов. Возможные варианты src, dst, src or dst и src and dst. Т.е "src foo", "dst net 128.3", "src or dst port ftp-data". Если dir не указан, то по умолчанию используется src or dst. Для "null" соединений (это ppp или slip) используется inbound и outbound определитель для указания желаемого направления.

proto — определитель позволяет фильтровать пакеты по конкретному протоколу. Возможные протоколы: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp и udp. Т.е. "ether src foo", "arp net 128.3", "tcp port 21". Если определитель отсутствует, то никакие пакеты не фильтруются. ("fddi" фактически является алиасом для "ether", т.к. в большинстве случаев FDDI-пакеты содержат Ethernet-адрес отправителя и получателя и часто содержат Ethernet-типы пакетов. FDDI-заголовки также содержат другие поля, которых нет в списке фильтров.)

В дополнение к вышесказанному, некоторые специальные примитивы не имеют шаблонов, это: gateway, broadcast, less, greater и арифметические выражения. Об этом чуть далее.

Множество составных выражений фильтров используют слова and, or и not для объединения примитивов. К примеру "host foo and not port ftp and not port ftp-data". Для упрощения ввода некоторые определители могут быть опущены. К примеру, "tcp dst port ftp or ftp-data or domain" — то же самое, что и "tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain".

Допускаются следующие выражения:

dst host host верно, если поле IP destination пакета — host, может быть адрес или имя хоста.

src host host верно, если поле IP source пакета — host.

host host верно, если source или destination пакета — host. Также могут употребляться префиксы: ip, arp, или rarp как: ip host host что эквивалентно ether proto \ip and host host. Если host — имя с несколькими IP-адресами, каждый адрес проверяется на соответствие.

ether dst ehost Верно, если Ethernet-адрес получателя — ehost. Ehost — любое из имен /etc/ethers или номер (см. ethers(3N).

ether src ehost верно, если Ethernet-адрес отправителя — ehost.

ether host ehost верно, если Ethernet-адреса получателя или отправителя — ehost.

gateway host верно, если host — gateway. Т.е. Ethernet-адрес отправителя или получателя — host, но ни IP отправителя, ни IP получателя не являются host. Host может быть именем, а также может находиться в /etc/hosts и /etc/ethers. (Что равносильно ether host ehost and not host host, который может использоваться с любым именем или номером для host / ehost.)

dst net net верно, если IP получателя имеет адрес — net. Net — любая запись из /etc/networks или адрес сети.

src net net верно, если IP отправителя имеет адрес — net.

net net Верно, если IP получателя или отправителя имеют адрес сети — net.

net net mask mask Верно, если IP-адрес совпадает с net c соответствующей netmask. Может быть определен совместно с src или dst.

net net/len верно, если IP равно net, a маска подсети — len в битовом виде (CIDR-формат). Может быть определен совместно с src или dst.

dst port port верно, если пакет ip/tcp или ip/udp и имеет порт получателя — port. port может быть числом или присутствовать в /etc/services (см tcp(4P) и udp(4P)). Если имя используется для двух или более портов, то проверяются оба номера порта и протоколы. Если используются недопустимые номер порта или имя, то проверяются только номера портов (т.е. dst port 513 выводит трафик tcp/login и udp/who, и port domain выводит tcp/domain и udp/domain).

src port port верно, если порт отправителя — port.

port port верно, если порт отправителя или получателя — port. Некоторые выражения можно комбинировать, к примеру: tcp src port port — только tcp-пакеты у которых порт — port.

less length верно, если длина пакета меньше или равна length, что равносильно len <= length.

greater length верно, если длина пакета больше или равна length, что равносильно len >= length.

ip proto protocol верно, если пакет является IP пакетом с протоколом protocol. Protocol может иметь номер или одно из имен icmp, igrp, udp, nd, или tcp.

ether broadcast верно, если пакет — широковещательный Ethernet-пакет. Выражение ether является необязательным.

ip broadcast верно, если пакет — широковещательный IP-пакет.

ether multicast верно, если пакет — Еthernet multicast-пакет. Выражение ether является необязательным. Это сокращенная запись для "ether[0] & 1!= 0".

ip multicast верно, если пакет — IP-multicast пакет.

ether proto protocol верно, если пакет типа Ethernet. Protocol может быть число или имя: ip, arp, или rarp.

decnet src host верно, если DECNET-адрес получателя — host, который может быть адресом типа "10.123'', или DECNET-имя хоста. (DECNET имя хоста поддерживается только в Ultrix системах).

decnet dst host Верно, если DECNET-адрес получателя — host.

decnet host host Верно, если DECNET-адрес получателя или отправителя — host.

proto [ expr: size ]

Proto один из следующих протоколов ether, fddi, ip, arp, rarp, tcp, udp, или icmp, и показывает уровень протокола для данной операции. Смещение в байтах для данного уровня протокола берется из expr. Size — необязательное, показывает интерeсующее количество байт по данному смещению, может быть 1,2 или 4, по умолчанию 1.

Примеры использования tcpdump

Выдача всех вохдящих и исходящих пакетов от sundown: tcpdump host sundown

Выдача трафика между helios и одним из двух hot или ace: tcpdump host helios and \(hot or ace \)

Выдача всех пракетов между ace и другими хостами, исключая helios: tcpdump ip host ace and not helios

Выдача трафика между локальной машиной и машиной, находящейся в Berkeley: tcpdump net ucb-ether

Выдача ftp трафика через шлюз snup: tcpdump 'gateway snup and (port ftp or ftp-data)'

Выдача трафика не принадлежащего машинам в локальной сети (если ваша машина — шлюз в другую сеть, tcpdump не сможет выдать трафик вашей локальной сети). tcpdump ip and not net localnet

Выдача старовых и стоп пакетов (SYN и FIN пакеты), которые не принадлежат локальной сети. tcpdump 'tcp[13] & 3!= 0 and not src and dst net localnet'

Выдача IP пакетов длиной более 576 байт, переданных через шлюз snup: tcpdump 'gateway snup and ip[2:2] > 576'

Выдача IP broadcast или multicast пакетов, которые не посылаются через Ethernet broadcast или multicast: tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'

Выдача всех ICMP пакетов, которые не являются эхо запросами/ответами (т.е, не ping пакеты): tcpdump 'icmp[0]!= 8 and icmp[0]!= 0"


---------- Post added at 18:05 ---------- Previous post was at 18:02 ----------

Пособие 2


http://www.linuxshare.ru/docs/net/tcpdump.html

Довольно часто встает проблема, когда ему нужно узнать как работает сеть. Или просто для учебных-исследовательских целей узнать как взаимодействуют между собой объекты сети. Для этих целей в UNIX-мире написано целая куча инструментов. В данном материале будет рассматриваться один из них: tcpdump. Итак, tcpdump.
$ man tcpdump, нам гласит
Tcpdump выводит заголовки пакетов проходящих через сетевой интерфейс, которые совпадают с булевым выражением. Он может также быть запущен с ключем -w, который заставляет сохранять данные пактов в файл для дальнейшего исследования, и/или с ключем -r, который заставляет читать сохраненные пакеты из файла, вместо чтения пакетов из сетевого интерфейса. В любом случае, tcpdump будут обработаны только те пакеты, которые совпадают с выражением.
Tcpdump будет, если не запущен с ключем -c, продолжать собирать пакеты до тех пор, пока не будет прерван сигналом SIGINT (генерируемым, для примера, вводом Вашего символа прерывания, обычно CTRL+C) или сигналом SIGTERM (обычно генерируемого командой kill). Если запуск был с ключем -c, то сбор пакетов будет продолжаться до тех пор, пока не произойдет прерывание сигналом SIGINT или SIGTERM или пока не будет обработано определенное количество пакетов.
Когда tcpdump закончит сбор пакетов, то будет сообщено об количестве:


пакетов "полученных фильтром" (received by filter) (значение зависит от той ОС, на какой Вы запускаете tcpdump, и, возможно, от способа, котрым ОС была сконфигурирована - если фильтр был определен в командной строке, на некоторых ОС будут сосчитаны пакеты независимо от фильтрующего выражения, а в других ОС будут сосчитаны только те пакеты, которые попадают под фильтрующее и выражение, и были обработаны tcpdump);
пакетов "отброшенных ядром" (dropped by kernel) (это число пакетов, которые были отброшены, в зависимости от механизма сбора пакетов (недостаточного объема буферов) на той ОС, где запускается tcpdump, ОС предоставит эту инофрмацию приложению или нет, и тогда будет выведено число 0)

Это был перевод - исправления приветствуются.
Дальше идет описание ключей. Вот некоторые из них:


-c count Выйти после получения определенного количества пакетов.
-C file_size Перед записью "сырого" пакета в файл, происходит проверка на превышение размером файла лимита, указанного в file_size. Если размер файла больше, то файл закрывается и открывается новый. Новый файл будет иметь имя определенное в ключе -w, со стоящим в конце числом 2, которое будет увеличиваться в следующих именах файлов. file_size определяет размер в миллионах байт (1,000,000), а не мегабайтах (1,048,576).
-F file Использовать file для ввода фильтрующего выражения. Выражение, указанное в командной строке, будет игнорироваться.
-i interface Собирать пакеты только на определенном интерфейсе. Если не указан - берется минимальный по номеру интерфейс (исключая loopback). Для Linux-ядер 2.2 и более новых, возможно указать 'any', тогда будет происходить сбор на всех интерфейсах, но они не будут переведены в режим promiscuous.
-n Не преобразовывать адрес хоста в имя. Может быть использовано, если необходимо избегать DNS-запросов.
-nn Не преобразовывать протокол и номер порта в их имена.
-N Не выводить доменную часть имени хоста. Например, при данном ключе будет выводится "nic" вместо "nic.ddn.mil"
-p Не переводить интерфейс в режим promiscuous. Следует заметить, что интерфейс может быть в режиме promiscuous по другим причинам.
-r file Читать пакеты из file (который, был создан с ключем -w). Если file указан как "-", то используется стандартный ввод.
-t Не выводить временной штамп (timestamp) в каждой строке дампа (dump).
-tt Выводит не форматированный временной штамп в каждой строке дампа.
-ttt Выводить разницу (в микросекундах) между текущей и предыдущей строками дампа.
-tttt Выводить временной штамп вместе с датой в формате по-умолчанию в каждой строке дампа.
-v (Чуть более) подробный вывод. Для еще более подробного вывода используются: -vv и -vvv.
-w file Писать "сырые" пакеты в file перед тем как произвести их разбор и вывести. Они могут быть позднее выведены с ключем -r. Если file указан как "-", то используется стандартный вывод.
-x Печатать каждый пакет (без заголовков уровня соединения) в шестнадцатиричном виде.
-X Помимо шестнадцатиричного вида выводить их ASCII-значения.

Теперь, рассмотрим фильтрующее выражение.
Оно выбирает какие пакеты будут выбираться из общего потока. Если оно не указано, то будут выбираться и выводится все пакеты идущие через интерфейс. Иначе, будут обработаны только те пакеты, для которых проверка с выражением выдаст значение "истина" (true).
Выражение состоит из одного или более примитивов. Примитивы обычно состоят из ID (имя или номер) следующего за одним или более классификаторами. Различают три вида классификаторов:


type Говорят к какому виду относить ID. Возможный значения host, net или port. Пример: 'host foo', 'net 128.3', 'port 20'. Если классификатор type не указан, то подразумевается host.
dir Определяет конкретное направление передачи "к" и/или "от" ID. Возможны значения src, dst, src or dst and src and dst. Пример, 'src foo', 'dst net 128.3', 'src or dst port ftp-data'. Если не указан, то подразумевается src or dst. Для соединений нулевого ('null') уровня (к примеру, протокол точка-точка, такой как slip) указанием направления могут быть классификаторы inbound и outbound.
proto Ограничивает совпадение конкретным протоколом. Возможные протоколы: ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp и udp. Пример, 'ether src foo', 'arp net 128.3', 'tcp port 21'. Если классификатор proto не указан, то подразумеваются все перечисленные типы протоколов. Например, 'src foo означает '(ip or arp or rarp) src foo', 'net bar' означает '(ip or arp or rarp) net bar', а 'port 53' означает '(tcp or udp) port 53'.

В добавок, существует несколько специальных примитивов - ключевых слов: gateway, broadcast, less, greater и арифметические выражения.
Более сложные фильтрующие выражения могут быть построены с помощью слов and, or и not, объединяющих примитивы. Пример, 'host foo and not port ftp and not port ftp-data'. Чтобы уменьшить количество вводимой информации, идентичные списки классификаторов могут быть опущены. Пример, 'tcp dst port ftp or ftp-data or domain' это тоже самое, что и 'tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'
Перечислим некоторые из допустимых примитивов (за более полным списком в man tcpdump):
dst host host


Истина, если поле "назначение" пакета -это host, который может быть адресом или именем

src host host


Истина, если поле "источник" пакета - это host.

host host


Истина, если или поле "назначение", или поле "источник" пакета - это host. Любое из описанный выше выражений может быть приписано к ключевому слову ip, arp, rarp, или ip6, как в 'ip host host', что эквивалентно 'ether proto \ip and host host'. Если host - это имя с несколькими IP адресам, то проверяется совпадение по каждому адресу.

net net mask netmask


Истина, если IP адрес входит в сеть с указанной сетевой маской. Может быть классифицировано с dst или src.

net net/len


Истина, если IP адрес входит в сеть с указанной сетевой маской, заданной количеством бит. Может быть классифицировано с dst или src.

dst port port


Истина, если пакет протоколов ip/tcp, ip/udp, ip6/tcp или ip6/udp, и порт-назначения имеет значение указанное в port. Порт может быть числом или именем, используемым в /etc/services. Если используется число или неоднозначное имя, то проверяется только номер порта (пример, 'dst port 513' будет выводить трафик и для tcp/login и для udp/who, а 'port domain' будет выводить трафик и для tcp/domain и для udp/domain).

src port port


Истина, если пакет имеет порт-источник - port

port port


Истина, если или порт-назначение, или порт-источник в пакете - port. Любое из описанных выше выражений может быть приписано к ключевому слову tcp или udp, как в 'tcp src port port', проверяющее совпадения только для TCP-пакетов.

less length


Истина, если пакет имеет длину меньше или равную length. Это эквивалентно len <= length.

greater length


Истина, если пакет имеет длину больше или равную length. Это эквивалентно len >= length.

ip proto protocol


Истина, если пакет - это IP-пакет протокола, указанного в protocol. Протокол может быть числом или одним из имен icmp, icmp6, igmp, igrp, pim, ah, esp, vrrp, udp, или tcp. Заметим, что идентификаторы tcp, udp и icmp - ключевые слова и должны быть "заэкскейпены" через обратный слэш (\).

Прежде чем переходит к примерам рассмотрим, что может нам выдать tcpdump при выполнении.
Типичные результаты работы tcpdump -ttt:
1. 000107 192.168.2.13 > 192.168.2.254: icmp: 192.168.2.13 udp port 3631 unreachable
2. 000313 192.168.2.254.53 > 192.168.2.13.3656: 4 ServFail 0/0/0 (22) (DF)
3. 000287 192.168.2.254 > 192.168.2.100: icmp: net 205.188.179.233 unreachable [tos 0xc0]
4. 010956 192.168.2.254.139 > 192.168.2.13.3661: P 1:5(4) ack 73 win 5840 NBT Packet (DF)
5. 276274 192.168.2.150.3053 > 192.168.2.254.53: 7+ A? Tatyana.karavay-shops.ru. (42)
6. 001162 192.168.2.100.32772 > 192.168.2.254.16007: . ack 73 win 5840 (DF)

Первое поле - поле времени, т. к. запуск осуществлялся с ключом "-ttt", то это разница в микросекундах между этим пакетом и предыдущим.
Потом идет IP-адрес (или имя) отправителя пакета, через точку может указываться порт. После знака ">", указывается получатель пакета (или его имя) и также порт. Затем будет идти либо сразу служебная информация идущая в пакете, либо протокол (у нас это icmp). В служебной информации может быть указано либо состояние флагов в пакете, либо расшифрованная информация ("192.168.2.13 udp port 3631 unreachable" или DNS-запрос об хосте "Tatyana.karavay-shops.ru").
Ну а теперь пора взяться за конкретные примеры.
1. Ловим весь входящий трафик из локальной сети на сервер. Здесь все просто.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt dst host 192.168.2.254
Если вы запускаете его в SSH сессии, то подготовьтесь - польется очень много и очень быстро...
2. Ловим весь входящий трафик, исключая трафик генерируемый нашей SSH-сессией.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'dst host 192.168.2.254 and not ( src host 192.168.2.100 and dst port 22 )'
Вот теперь в потоке пакетов можно разобраться.
3. Нужна информация об DNS-общении между сервером и каким-нибудь узлом сети.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.13 and ip proto \udp'
Здесь, кстати будет бегать не только DNS-трафик. А вообще весь, который идет по UDP. Исправить это можно следующим:
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.13 and port 53'
4. Отлавливаем исключительно icmp пакеты.
# /usr/sbin/tcpdump -i eth0 -n -nn -ttt 'ip proto \icmp'
Вот. Теперь все.
Не забывайте, что более подробную информацию можно получить из man tcpdump. Там же можно прочитать об структуре пакетов основных протоколов, что позволит еще глубже исследовать Ваши сети.

stayer
06.11.2011, 15:50
Wireshark (http://ru.wikipedia.org/wiki/Wireshark) - свободно-распространяемый кроссплатформенный (Linux/Windows) сниффер, похожий на tcpdump и обладающий графическим интерфейсом. Официальный сайт (http://www.wireshark.org/). Ниже учебничек (http://wiki.mvtom.ru/index.php/Wireshark) по использованию Wireshark:

Описание

Wireshark представляет собой анализатор сетевых протоколов с графическим интерфейсом. Программа позволяет просматривать и анализировать пакеты, полученные из сетевого интерфейса или ранее собранного файла.

Установка

Наиболее стабильную версию программы (v1.0.6-1.0.7) можно скачать по адресу компании-разработчика программы http://www.wireshark.org/download.html. Ход установки: Для установки программы необходимо запустить скачанный файл wireshark-setup-1.0.6.exe и в появившемся окне выбрать Next.

http://wiki.mvtom.ru/images/b/b5/1.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:1.gif)

Далее Вам необходимо согласить с выбранными по умолчанию компонентами, предложенными для установки:
http://wiki.mvtom.ru/images/2/27/2.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:2.gif)

Далее соглашаемся с выбранными параметрами установки программы и выбираем путь для инсталляции:
http://wiki.mvtom.ru/images/0/06/3.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:3.gif)

Процесс установки начался, далее инсталлятор попросит установить WinPcap 4.0.2 – соглашаемся:
http://wiki.mvtom.ru/images/8/8f/4.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:4.gif)

Для завершения процесса инсталляции программы нажмите Finish:
http://wiki.mvtom.ru/images/6/6a/5.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:5.gif)

Первый запуск и начало работы с программой

http://wiki.mvtom.ru/images/b/bd/6.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:6.gif)

Для начала сборки перехваченных программой пакетов сообщений по сети, Вам необходимо выбрать пункт главного меню Capture>Interfaces или кнопку на верхней панели инструментов List the available capture interfaces – после этого на экране появится следующее диалоговое окно:

http://wiki.mvtom.ru/images/e/e7/7.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:7.gif)

С помощью кнопки Options возможна установка желаемых параметров работы программы. Для того, чтобы начать процедура захвата, Вам необходимо нажать кнопку Start, после чего интерфейс программы примет следующий вид:
http://wiki.mvtom.ru/images/4/40/8.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:8.gif)

Как видно из изображения, подобно другим анализаторам протоколов, окно Wireshark включает в себя 3 области просмотра с различными уровнями детализации. Верхнее окно содержит список собранных пакетов с кратким описанием, в среднем окне показывается дерево протоколов, инкапсулированных в кадр. Ветви дерева могут быть раскрыты для повышения уровня детализации выбранного протокола. Последнее окно содержит дамп пакета в шестнадцатеричном или текстовом представлении. Программа Wireshark представляет пользователю ряд уникальных возможностей, не поддерживаемых другими анализаторами протоколов. Программа обеспечивает возможность сбора всех пакетов заданного соединения TCP и представления данных в удобном для просмотра формате.
Возможности программы Рассмотрим возможности программы более подробно. В верхней панели по умолчанию выводится 6 колонок – номера пакета в списке собранных, временная метка, адреса и номера портов отправителя и получателя, тип протокола и краткое описание пакета. Выбрав необходимый пакет из списка, содержащейся в верхней панели, мы можем просмотреть содержимое средней панели. В ней представлено дерево протоколов для пакета. Дерево отображает каждое поле и его значение для заголовков всех протоколов стека:
http://wiki.mvtom.ru/images/3/30/9.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:9.gif)

С помощью программы Wireshark Вы можете контролировать пакеты, проходящие по протоколу НТТР. Приведем пример вычисления имени пользователя и пароля при входе в почту. Для этого необходимо предварительно произвести процедуру входа в почтовый ящик и запуск программы в режиме захвата пакетов сообщений. После этого для удобства желательно произвести сортировку по протоколам при помощи нажатия на колонку Protocol. Далее, выбрав любой пакет, у которого установлено значение Protocol - НТТР, кликнуть правую кнопку мыши, в контекстном меню нажать Conversation filter>IP, тем самым выбрав фильтрацию списка пакетов только данного перечня адресов отправителя и получателя:
http://wiki.mvtom.ru/images/5/57/10.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:10.gif)

Далее возможно отфильтровать пакеты сообщений, выбрав только пакеты протокола НТТР – для этого выберем любой пакет протокола НТТР и кликнем правую кнопку мыши и в контекстном меню выберем Conversation filter>Ethernet. Теперь у нас в верхнем окне остались только пакеты протокола НТТР. Для оптимизации поиска нужного пакета, воспользуемся пунктом главного меню Edit>Find Packet:
http://wiki.mvtom.ru/images/b/b0/11.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:11.gif)
В появившемся диалоговом окне выбираем Find by string и указываем название строки с адресом страницы почтового ящика:
http://wiki.mvtom.ru/images/0/00/12.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:12.gif)

С помощью системы поиска проверяем пакеты, соответствующие адресации и в дереве протоколов находим в ветви Line-based text data значения Login, Domain, Password.
http://wiki.mvtom.ru/images/6/66/13.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:13.gif)

Wireshark предоставляет возможность пользователю сохранять файлы данных (изображения, CSS и др.) на жесткий диск из просмотренных ранее страниц в Интернете. Для этого необходимо в главном меню программы выбрать File>Export>Objects>HTTP:
http://wiki.mvtom.ru/images/e/eb/14.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:14.gif)
В появившемся списке НТТР object list выбираем необходимый файл и нажимаем Save As:
http://wiki.mvtom.ru/images/8/84/15.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:15.gif)

Далее программа предложит нам выбрать путь для сохранения файла на диск:
http://wiki.mvtom.ru/images/8/85/16.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:16.gif)

Дополнительные параметры

В анализаторе протоколов Wireshark возможна маркировка при помощи установки курсора на нужный пакет и выбора в контекстном меню после нажатия правой кнопки мыши Mark Packet. Далее возможен быстрый поиск маркированного Вами пакета при помощи главного меню Edit>Find Next Mark:
http://wiki.mvtom.ru/images/2/24/17.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:17.gif)

Программе предусмотрена возможность экспорта суммарной информации о пакетах и дереве протоколов в файл формата .txt при помощи главного меню File>Export>File:

http://wiki.mvtom.ru/images/0/0e/18.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:18.gif)
Полученный текстовый файл:
http://wiki.mvtom.ru/images/2/23/19.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:19.gif)

Программа обладает большим набором вывода статистических данных о захваченных пакетах сообщений. Так, можно вывести общую таблицу иерархии протоколов при помощи пункта главного меню Statistics>Protocol Hierarchy:
http://wiki.mvtom.ru/images/b/b4/20.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:20.gif)

Для наглядного представления результатов выполнения захвата пакетов и сборки кадров в программе имеется возможность отображения данной информации в виде графика передачи пакетов в единицу времени. Для отображения данного графика необходимо воспользоваться пунктом главного меню Statistics>IO Graphs:
http://wiki.mvtom.ru/images/2/2e/21.gif (http://wiki.mvtom.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:21.gif)