Опубликован: 20.02.2007 | Доступ: свободный | Студентов: 3483 / 787 | Оценка: 4.42 / 4.03 | Длительность: 40:03:00
Лекция 2:

Системные средства с открытым программным кодом: основы

Fping

Стандартная реализация программы Ping, которая поставляется с большинством версий TCP/IP-протокола, разработана для работы на одиночном хосте. Хоть это и удобно, но использование утилиты для тестирования большой сети превращается в кропотливый процесс. Пользователь должен последовательно запускать программу для каждого хоста и ожидать, пока Ping вернет результаты.

Для решения этих проблем была создана программа Fping, которая позиционируется как быстрый Ping. Утилиту можно свободно загрузить с хоста http://www.fping.com/. Windows-приложение, аналогичное утилите fping (но не портированное под Windows Fping), можно загрузить по адресу http://www.kwakkelflap.com/. Но мы не будем рассматривать эту программу в данном разделе.

Реализация

Fping посылает ICMP (Internet Control Message Protocol) запросы по списку IP-адресов, обеспечивая параллельную выдачу информации на стандартный вывод или в файл. Программа посылает циклические запросы, не ожидая ответа на каждый из них. Когда ответы, наконец, возвращаются, fping отмечает, доступен хост или нет, и продолжает ожидать ответы на протяжении всего цикла работы программы. Такой способ асинхронного управления работой при опросе большого количества хостов позволяет получить лучшие, чем при использовании обычной утилиты Ping, результаты. До появления утилиты Fping тестирование всей сети требовало написания программы на языке командного интерпретатора, в которой производился последовательный опрос всех хостов и запись результатов в файл. Вывод результатов этой программы требовал дальнейшей сортировки для анализа пользователем. Fping не только делает эту работу быстрее, но и выводит результаты своей работы в более дружественном для пользователя виде.

Ниже приведен пример вывода после тестирования подсети класса C с маской 192.168.1.0 Запустив команду fping -a -g 192.168.1.1 192.168.1.254 -s hosts, мы сможем увидеть, какие хосты в сети работают, и сохранить их IP-адреса в файле. Вдобавок к этому, флаг -s указывает на необходимость выводить итоговую информацию о работе. Если мы добавим флаг -n в командную строку, то сможем посмотреть и имена, соответствующие IP-адресам. Fping будет записывать в файл имена хостов вместо IP-адресов.

254  targets
   3  alive
 251  unreachable
   0  unknown addresses

 143  timeouts
 397  ICMP Echos sent
   3  ICMP Echo Replies received
 294  other ICMP received

0.10 ms (min round trip time)
0.62 ms (avg round trip time)
1.02 ms (max round trip time)
        11.921 sec (elapsed real time)

[root@originix fping-2.4b_2_to]# cat hosts
192.168.1.1
192.168.1.100
192.168.1.101

Анализируя далее командную строку мы увидим, что флаг -a указывает на необходимость выводить на стандартный вывод информацию о доступных хостах. Флаг -g выполняет функции утилиты gping (кратко упоминаемой здесь) и создает список IP-адресов для сканирования. В этом случае список IP-адресов от 192.168.1.1 до 192.168.1.254 передается утилите fping. В дополнение к флагу -g, fping может получить список IP-адресов, которые необходимо сканировать через стандартный вход или из файла, имя которого можно указать после флага -f. Полный список доступных параметров командной строки утилиты fping версии 2.4b2, к которым вы можете получить доступ, набрав fping в командной строке, таков.

Usage: ./fping [options] [targets...]
-a        show targets that are alive (показывает доступные хосты).
-A        show targets by address (показывает хосты по их IP-адресам).
-b n      amount of ping data to send, in bytes (default 56) (количество посылаемых 
          пакетов) (по умолчанию 56).
-B f      set exponential backoff factor to f (устанавливает фактор задержки). 
-c n      count of pings to send to each target (default 1) (количество пакетов 
          посылаемых, каждому хосту (по умолчанию 1)).
-C n      same as -c, report results in verbose format (тоже самое что и -c - выводит 
          результаты с расширенными текстовыми комментариями).
-e        show elapsed time on return packets (выводит время выполнения для 
          вернувшихся пакетов).
-f file   read list of targets from a file ( - means stdin) (only if no -g specified) (задает 
          имя файла со списком тестируемых хостов (пробел означает, что список берется из 
          стандартного ввода). Используется, только если не задан параметр -g).
-g        generate target list (only if no -f specified) (specify the start and end IP in the 
          target list, or supply an IP netmask) (ex. ./fping -g 192.168.1.0 192.168.1.255 or 
          ./fping -g 192.168.1.0/24) генерирует список тестируемых хостов (только если не задан 
          параметр -f) (задается начальный и конечный IP адреса, или сетевая маска ).
-i n      interval between sending ping packets (in millisec) (default 25) задает интервал 
          между посылаемыми пакетами (в миллисекундах) (по умолчанию 25).
-l        loop sending pings forever (задает опрос хостов в цикле).
-m        ping multiple interfaces on target host (тестирование нескольких интерфейсов на 
          доступном хосте).
-n        show targets by name (-d is equivalent) (отображает тестируемые хосты по имени 
          (то же самое что и -d)).
-p n      interval between ping packets to one target (in millisec) (in looping and counting 
          modes, default 1000) задает интервал между посылкой пакетов на один и тот же хост 
          (в миллисекундах) (в цикле или непрерывном режиме, по умолчанию 1000).
-q        quiet (don't show per-target/per-ping results) (подавляет вывод как по хостам 
          так и для пакетов).
-Q n      same as -q, but show summary every n seconds (то же самое что -q, но выводит сводную 
          информацию каждые n секунд).
-r n      number of retries (default 3) число попыток (по умолчанию 3).
-s        print final stats (вывод финальной статистики).
-t n      individual target initial timeout (in millisec) (default 500) (начальная задержка 
          для опрашиваемого хоста (в миллисекундах) (по умолчанию 500)).
-u        show targets that are unreachable (отображает недоступные хосты).
-v        show version (выводит номер версии) targets list of targets to check 
          (if no -f specified) (список проверенных хостов (если не задан параметр -f).
2.5.

Раньше утилита fping работала совместно с gping. Утилита gping брала на себя черновую работу по определению большого списка IP-адресов для сканирования с помощью fping. Вообразите себе необходимость сканирования сети класса B (65 534 хостов) и ввода вручную каждого IP-адреса! Вам понадобилось бы написать такой скрипт для автоматизации этой работы, создание которого весьма утомительно и сложно для человека, не имеющего опыта программирования на командном языке. Теперь в утилиту fping добавлен флаг -g. Добавление этого параметра сделала fping совершенно независимой утилитой.

Выгоды от использования fping очевидны. Примерно за 10 секунд мы определили, сколько хостов присутствует в нашей сети, какие у них IP-адреса и получили начальную информацию, необходимую для создания схемы нашей сети. Но следует иметь в виду, что этот инструмент предоставляет те же самые преимущества назойливым чужакам, которые бродят вокруг в поисках доступа к чужим сетям.

Traceroute

Traceroute делает то, что указано в ее названии - он размечает маршрут, который проходят IP-пакеты на пути от вашего хоста до указанной цели.

Программа начинает работать с отсылки IP-пакета (ICMP или UDP) к заданной цели, но при этом устанавливает время жизни пакета ( TTL- Time-To-Live ) равным 1. Пакет исчерпывает свои ресурсы при достижении первой же промежуточной точки, и маршрутизатор уведомляет нас с помощью ICMP-сообщения, что время жизни пакета исчерпано, сообщая тем самым, что достигнута первая промежуточная точка. Теперь мы отсылаем следующий IP-пакет к цели, но теперь уже устанавливаем параметр TTL равным 2. Пакет достигает второй промежуточной точки и происходит тоже самое. Продолжая наращивать параметр TTL до тех пор, пока не будет достигнута цель, мы сможем узнать, какой маршрут проходят пакеты на пути от нашего хоста до цели.

Этот инструмент может быть очень полезен при диагностике проблем в сети (для определения причин выхода сети из строя или для определения петель), но он также может быть использован для получения информации о местонахождении тестируемой системы.

Ниже приведен фрагмент вывода, который можно получить, используя команду traceroute

11 cxchg.GW2.SEA1.BACK_BONE.NET 
   (192.168.240.79) 88.959 ms 83.770 ms 84.251 ms
12 dxchg.GW1.SEA1.BACK_BONE.NET 
   (192.168.206.185) 84.427 ms 83.894 ms 82.176 ms
13 aexchg.GW5.SEA1.BACK_BONE.NET    
   (192.168.101.25) 84.570 ms 84.122 ms 84.243 ms

Здесь приведено несколько последних промежуточных точек маршрута на пути к цели. Часть базовых хостов сети интернет используют имена, отражающие их географическое положение. Вероятно, что комбинация символов SEA1 имеет отношение к Сиэтлу, штат Вашингтон. Это говорит о том, что данная машина, возможно, расположена на северо-западе Соединенных Штатов.

Примечание. В настоящее время держатели базовой инфраструктуры интернета начинают использовать коды аэропортов для обозначения своих маршрутизаторов.

Версия программы Traceroute с графическим интерфейсом для Unix называется gtrace и использует базу данных местоположения известных хостов для отображения географической карты маршрута, который проходят пакеты по всему миру. Эту программу можно найти по адресу http://www.caida.org/tools/visualization/gtrace/. Аналогичные программы для Windows называются VisualRoute и McAfee Visual Trace, и доступны в интернете по адресам http://www.vsualware.com и http://www.mcafee.com, соответственно. Имейте в виду, что графические версии traceroute не всегда правильно отображают информацию, поскольку соответствующие whois -базы данных могут содержать, а могут и не содержать требуемую информацию.

Реализация

Так же как и Ping, команда traceroute имеет несколько различных реализаций. Так же как и Ping, реализация traceroute для Windows сильно отличается от версии, используемой для Unix. Настолько что Windows-утилита носит название tracert, напоминая о том, что в системе Windows эта программа используется без поддержки длинных имен файлов. В таблице 2.4 описаны некоторые наиболее важные параметры командной строки (все параметры, если иное не оговаривается, приводятся для Unix-версии).

Таблица 2.4. Общие параметры командной строки Traceroute
Параметр Описание
-g hostlist (Unix) -j hostlist (Windows) Определяет маршрут для прохождения пакетов (см. лекцию ""NETCAT и CRYPTCAT"" ).
-i interface Задает используемый для отсылки пакетов сетевой интерфейс (для хоста с несколькими сетевыми интерфейсами).
-I Определяет использование ICMP-сообщений вместо UDP. По умолчанию traceroute посылает UDP-пакеты порту, который обычно бывает свободным, так что конечный хост может послать в ответ сообщение PORT_UNREACHABLE в ответ на пришедшие пакеты.
-m hops (Unix) -h hops (Windows) Задает максимальное число промежуточных хостов, которое может быть пройдено до конечного пункта. Если конечный хост не достигается за заданное число шагов, все возвращается обратно. По умолчанию равно 30.
-n (Unix) -d (Windows) Запрещает определение имен для IP-адресов. Обычно это существенно ускоряет работу программы, но в этом случае вы не сможете получить представление о географическом положении хостов.
-p port Если мы используем traceroute на основе протокола UDP и конечный хост прослушивает номера портов вокруг значения по умолчанию(33434), мы можем определить здесь другой номер порта.
-w (Unix and Windows) Задает время ожидания ответа от промежуточных хостов.
Интерпретация выходной информации от traceroute

Ниже приведен отрывок вывода программы traceroute, запущенной на локальной машине для тестирования удаленного сервера.

bash-2.03$ traceroute -n 192.168.76.177
traceroute to 192.168.76.177 (192.168.76.177), 
  30 hops max, 40 byte packets
1 192.168.146.1 20.641 ms   15.853 ms   16.582 ms
2 192.168.83.187    15.230 ms   13.237 ms   13.129 ms
3 192.168.127.65    16.843 ms   14.968 ms   13.727 ms
4 * * *
5 192.168.14.85 16.915 ms   15.945 ms   15.500 ms
6 192.168.14.138    17.495 ms   17.697 ms   16.598 ms
7 192.168.14.38 17.476 ms   17.073 ms   14.342 ms
8 192.168.189.194   19.130 ms   18.208 ms   18.250 ms
9 192.168.96.162    39.989 ms   35.118 ms   36.275 ms
10 192.168.98.19    472.009 ms  36.853 ms   35.128 ms
11 192.168.210.126  37.135 ms   36.288 ms   35.612 ms
12 192.168.76.177   37.792 ms   36.920 ms   34.972 ms

Обратите внимание, что каждая попытка повторяется трижды. Об этом говорит наличие трех колонок со временем отклика (20.641 ms 15.853 ms 16.582 ms). Также обратите внимание, что на четвертом шаге не получено никакой информации. Если вы видите символ * для соответствующего шага, но программа переходит к следующему шагу, вероятно, хост не послал в ответ ICMP-сообщение о том, что исчерпано время жизни посланного пакета. Возможно, что на промежуточном брандмауэре запрещена передача ICMP-сообщений. Возможно, посланное в ответ ICMP-сообщение имело слишком маленький TTL-параметр, и ответ не дошел до получателя.

Traceroute может принять множество других ICMP-сообщений. Если в выводе traceroute вы видите странные значки, описанные в таблице 2.5 - это попытка сообщить вам нечто.

Примечание. Вам необходимо использовать параметр -v, если вы хотите увидеть отличные от стандартного TIME_EXCEEDED или трех UNREACHABLE сообщения.

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

Таблица 2.5. Расшифровка флагов-сообщений Traceroute
Флаг Описание
!H Хост ICMP недостижим.
!N ICMP network unreachable (сеть ICMP недостижима).
!P Протокол ICMP недостижим.
!S Неудавшаяся попытка задать маршрут.
!F Необходима фрагментация.
!X Соединение запрещено администратором.
!# ICMP код недостижимости #.