Большинство сетевых приложений построено по архитектуре клиент-сервер. Взаимодействие приложений через стек протоколов TCP\IP осуществляется с использованием многоуровневой адресации. Данные между компьютерами (хостами) доставляет протокол IP. Каждое сообщение протокола IP (IP-пакет) в заголовке содержит IP-адрес отправителя и IP-адрес получателя. По IP-адресу получателя определяется маршрут следования пакета и осуществляется его доставка. В IP-пакет инкапсулировано или сообщение протокола TCP, или сообщение UDP. Протоколы TCP и UDP доставляют сообщения конкретному приложению на хосте. В заголовках TCP и UDP содержатся особые адреса взаимодействующих приложений - номера порта отправителя и порта получателя. Таким образом, сообщение сначала доставляется на хост по IP-адресу получателя, а потом конкретному приложению по номеру порта получателя.
При взаимодействии клиента и сервера заранее известен номер порта программы-сервера. Это или стандартный для определенного прикладного протокола номер порта, или любой порт, на использование которого настроена программа- сервер. Например, для протокола HTTP (Web) стандартный порт сервера - 80 TCP, но Web-сервер может быть настроен на любой порт, положим – 8081 TCP. В первом случае для подключения к серверу на Web-клиенте достаточно указать адрес хоста, на котором работает программа-сервер, а номер порта получателя (по умолчанию 80 TCP) будет подставлен в заголовок TCP автоматически. Во втором случае в адресной строке после адреса надо явно указывать номер порта через двоеточие (например, 192.168.0.1:8081).
Программа-клиент занимает любой свободный порт больше 1024. На одном компьютере может быть запущено несколько клиентов, которые займут разные порты, при этом эти клиенты могут работать как с разными серверами, так и с одним и тем же сервером.
Для анализа трафика используются программы-снифферы. Они служат для перехвата всего трафика (входящего и исходящего) на наблюдаемом сетевом интерфейсе (например, сетевой карте) и последующего его анализа. Программы- снифферы имеют встроенный язык запросов для отбора части перехваченных сообщений по формальным признакам.
Студент Пётр изучает сетевые технологии. IP-адрес компьютера Петра 192.168.0.1. Пётр на своем компьютере запустил FTP-сервер в пассивном режиме и Web-сервер на стандартных портах (21 TCP и 80 TCP соответственно), к которым подключились другие студенты его группы. Пётр запустил на своем компьютере несколько Web-браузеров и FTP-клиентов и установил соединение с несколькими внешними Web и FTP-серверами, работающими по стандартным портам TCP.
Кроме этого Пётр запустил на своем компьютере SSH-клиент и подключился к SSH-серверу, который настроен на работу по порту 80 TCP.
Для анализа трафика Пётр использует программу-сниффер Wireshark. Пётр осуществлял перехват трафика в течение 10 минут и решил провести анализ трафика. Для фильтрации трафика Пётр решил использовать только следующие условия:
http - отбирает все сообщения, содержащие данные и (или) команды протокола HTTP
ftp - отбирает все сообщения, содержащие данные и (или) команды протокола FTP
ssh - отбирает все сообщения, содержащие данные и (или) команды протокола SSH ip.addr - отбирает все сообщения, содержащие IP пакеты, отправленные с подходящего по условию адреса или на него
ip.src - (от англ. source - источник) отбирает все сообщения, содержащие IP пакеты, отправленные с подходящего по условию адреса
ip.dst - (от англ. destination - адресат) отбирает все сообщения, содержащие IP пакеты, отправленные на подходящий по условию адрес
tcp.port - отбирает все сообщения, содержащие TCP сегменты, отправленные с подходящего по условию порта TCP или на него tcp.srcport - отбирает все сообщения, содержащие TCP сегменты, отправленные с подходящего по условию порта TCP
tcp.dstport - отбирает все сообщения, содержащие TCP сегменты, отправленные на подходящий по условию порт TCP
Доступны логические операторы и операторы сравнения:
&& - И
|| - ИЛИ
== - равно
!= - НЕ равно
() - скобки для управления порядком вычисления условия
! – логическое НЕ (например выражение !http – отбирает все пакеты кроме содержащих данные и (или) команды протокола HTTP)
> - больше
< - меньше
>= - больше или равно
<= - меньше или равно
Выберите все выражения-фильтры в программе Wireshark, которые позволят Петру отобрать среди всего перехваченного трафика только сообщения Web-клиентов и FTP-клиентов (от них и к ним), запущенных на его компьютере. Работа по протоколам HTTP и FTP напрямую, без серверов посредников (proxy). Никакие другие программы, кроме указанных, не передают данные по TCP\IP.
1. http && ftp
2. http && ((ip.src==192.168.0.1 && tcp.dstport==80) || (ip.dst==192.168.0.1 && tcp.srcport==80)) || ftp && ((ip.src==192.168.0.1 && tcp.dstport==21) || (ip.dst==192.168.0.1 && tcp.srcport==21))
3. (http || ftp) && ip.addr==192.168.0.1
4. (ip.src==192.168.0.1 && tcp.dstport==80) || (ip.dst==192.168.0.1 && tcp.srcport==80) || (ip.src==192.168.0.1 && tcp.dstport==21) || (ip.dst==192.168.0.1 && tcp.srcport==21)
5. http && ip.addr=192.168.0.1 && tcp.port=80 || ftp && ip.addr=192.168.0.1 && tcp.port=21
6. (http || ftp ) && ((ip.src==192.168.0.1 && tcp.srcport>1024 || ip.dst==192.168.0.1 && tcp.dstport>1024))
7. (http || ftp ) && (ip.addr==192.168.0.1 && (tcp.srcport>1024 || tcp.dstport>1024))
8. (http || ftp) && tcp.port>1024