Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Инструменты для исследования сетей с интерфейсом командной строки, часть 1

Оригинал: CLI tools for Network analysis 1
Автор: Riccardo Capecchi
Дата публикации: 24 сентября 2010 г.
Перевод: А.Панин
Дата публикации перевода: 30 ноября 2012 г.

В прошлых статьях (1, 2, 3) мы рассмотрели инструмент для исследования сети с графическим интерфейсом Wireshark, сегодня же мы начнем рассматривать некоторые инструменты, которые можно использовать в терминале: ping, telnet, dig, traceroute, whois, netstat и mtr.

Ping

Ping является утилитой для проверки доступности узла в компьютерной сети, работающей по межсетевому протоколу (Internet Protocol) и измерения времени обращения сообщений, отправленных с компьютера исследователя на целевой компьютер. Название утилиты пришло из области активной эхолокации.

Функционирование утилиты ping связано с отправкой пакетов эхо-запроса протокола межсетевых управляющих сообщений (Internet Control Message Protocol (ICMP)) к целевому узлу и ожиданием ICMP-ответов. Во время работы происходит измерение времени от отправки запроса до получения ответа (времени обращения) и запись информации обо всех потерях пакетов. Результаты проверки выводятся в форме статистической сводки, включающей в себя количество принятых пакетов, минимальное, максимальное и среднее время обращения, а также иногда среднеквадратичное отклонение времени обращения.

Использование утилиты ping обычно описывается как тестовый опрос компьютера.

Ping может использоваться с различными параметрами командной строки, зависящими от конкретной реализации утилиты, которые позволяют использовать различные режимы работы, такие, как установка размера пакета для исследования, включение автоматического повторения отправки заданного количества пакетов, параметры учета времени или проведение атаки "наводнения пакетами ping" (ping-flood). Эта атака является простейшей разновидностью атаки отказа в обслуживании при которой атакующий блокирует работу целевой системы обработкой большого количества присланных пакетов с эхо-запросами ICMP.

Базовый синтаксис:
ping <имя узла | IP-адрес узла>
Пример:
ping www.linuxaria.com
PING linuxaria.com (66.7.205.168) 56(84) bytes of data.
64 bytes from solid.nseasy.com (66.7.205.168): icmp_seq=1 ttl=46 time=220 ms
64 bytes from solid.nseasy.com (66.7.205.168): icmp_seq=2 ttl=46 time=171 ms
64 bytes from solid.nseasy.com (66.7.205.168): icmp_seq=3 ttl=46 time=169 ms
64 bytes from solid.nseasy.com (66.7.205.168): icmp_seq=4 ttl=46 time=169 ms
64 bytes from solid.nseasy.com (66.7.205.168): icmp_seq=5 ttl=46 time=168 ms
^C
--- linuxaria.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 168.906/179.895/220.449/20.297 ms

Что означает этот вывод?

"time=220 ms" - время обращения; время, прошедшее между отправкой запроса "здесь ли ты" и получения ответа "да, я здесь!". В данном случае это 220 миллисекунд. Поскольку отправка запросов происходит несколько раз, можно заметить, что это время почти постоянно, что является хорошим знаком. Время может варьироваться в зависимости от ряда факторов, включающих в себя следующие: как далеко находится ваша система от удаленного сервера, как как много маршрутизаторов и другого сетевого оборудования находится между вашей системой и сервером и многое другие.

"5 packets transmitted, 5 received" - одной из особенностей протокола TCP/IP является то, что он может работать с потерями пакетов. В идеальном случае любой отправленный вами пакет должен быть доставлен по назначению, но по ряду причин это не всегда происходит. Поскольку в нормальных условиях работы сети пакеты все равно будут доставлены по назначению после одного или нескольких повторений отправки, вы даже не заметите этого. Ping отправляет множество пакетов и отдельно оценивает количество успешно отправленных пакетов, поэтому вы можете оценить, приводит ли данное соединение к потере пакетов.

"rtt min/avg/max/mdev" - примерное время обращения - в случае, когда в первый раз один и тот же тип пакета отправляется по одному и тому же адресу назначения, в следующий раз должно уйти примерно такое же время на отправку пакета, что не всегда так. Иногда по различным причинам, таким, как режимы функционирования сетевого оборудования и маршрут следования пакета, на некоторые процессы отправки пакета и получения ответа уходит больше времени, чем на другие. Ping выводит эту статистику, поэтому вы можете оценить, приводит ли данное соединение к неравномерности времени обращения.

Другие примеры:

ping -c 5 -q 127.0.0.1

Параметр -c используется для отправки только 5 пакетов, параметр -q используется для того, чтобы пользователю была показана только статистика.

for i in {1..254}; do ping -c 1 -W 1 192.168.0.$i | grep 'from' | cut -d' ' -f 4 | tr -d ':'; done

Пинг-исследование без nmap.

Эту команду удобно использовать в том случае, когда у вас нет возможности использовать nmap для поиска узла с неизвестным адресом.

Запросы отправляются по адресам из диапазона от 192.168.0.1 до 192.168.0.254, но вы можете легко отредактировать эту команду для использования в вашей подсети.

Время ожидания для повышения скорости работы установлено равным 1 секунде, а в случае использования низкоскоростного соединения рекомендуется повысить значение, чтобы избежать пропущенных ответов.

ping -q -c1 -w3 www.linuxaria.com 2&>1 /dev/null || echo www.linuxaria.com ping failed | mail -ne -s'Server unavailable' admin@linuxaria.com

Проверка работоспособности сервера. В случае отсутствия ответа, отправляется электронное письмо администратору.

Эта команда полезна в том случае, если администратор сервера хочет получать электронные письма в моменты недоступности сервера. Следует создать задачу cron, выполняющуюся каждые 5 минут с этой командой, чтобы администратору отправлялось письмо при отсутствии ответа на запрос ping в течение более чем 3 секунд.

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

Telnet

Telnet является протоколом из набора протоколов TCP/IP. Он практически полностью идентичен протоколу программы rlogin из UNIX. Программа telnet позволяет управлять удаленным компьютером с вашего компьютера. Она является программным эмулятором терминала. В прошлом жесткие диски были сложны и дороги (я говорю об очень давнем времени) и не было персональных компьютеров. Для использования имеющихся компьютеров необходимо было выделить часть жесткого диска и использовать терминал для управления системой. Для разработчиков это было прекрасным решением, так как работа с компьютером обходилась дешевле. Необходим был только сервер, с которым можно было создать и поддерживать множество соединений. С telnet вы можете имитировать этот тип распределенных вычислений и, например, управлять суперкомпьютером на расстоянии.

TCP/IP работает с портами, и один из них зарезервирован за telnet. Его номер 23. Существует несколько спецификаций RFC. Спецификация номер 854 от 1983 года носит название "Спецификация протокола telnet" ("Telnet protocol specification").

С telnet вы можете делать множество вещей, например, отправлять электронную почту, использовать IRC-конференции или прокси-сервера, и даже (хотя, конечно, сложнее) просматривать и изменять содержимое сайтов. Существуют сервисы, предоставляющие возможность поиска в огромных базах данных при помощи telnet. Благодаря telnet, вы можете использовать всю мощь удаленного компьютера, не тратя ценных ресурсов своей системы.

А теперь давайте рассмотрим, что мы сможем сделать при помощи telnet. Синтаксис вызова:
telnet <имя узла | IP-адрес узла>

Telnet должен создать TCP-соединение с системой, IP-адрес и порт которой указаны пользователем для проверки возможности соединения. Если время соединения истекает, telnet не может установить соединение с узлом (возможно, соединение блокируется межсетевым экраном). Если соединение отклонено, telnet может установить соединение с узлом, но либо служба не работает на заданном порту, либо доступ к службе заблокирован.

telnet www.linuxaria.com 80
Trying 66.7.205.168...
Connected to linuxaria.com.
Escape character is '^]'.
GET /index.php HTTP/1.1
HTTP/1.1 400 Bad Request
Date: Fri, 24 Sep 2010 21:02:46 GMT
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8e-
fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4
FrontPage/5.0.2.2635 PHP/5.2.11
Content-Length: 422
Connection: close
Content-Type: text/html; charset=iso-8859-1 

Использование telnet для соединения с HTTP-сервером но порту 80. После соединения отправлен HTTP-запрос GET для получения страницы сайта, что удобно для тестирования возможности доступа к сайту на удаленном сервере хостинг-провайдера с пользовательского сервера.

telnet towel.blinkenlights.nl

Просмотр Звездных Войн по telnet.

telnet towel.blinkenlights.nl 666

Генератор извинений BOHF.

DIG

DIG (искатель информации о домене (domain information groper)) является гибким инструментом для опроса серверов имен DNS. Он может проводить поиск записей и отображать результаты, возвращаемые сервером имен в ответ на запрос. Большинство администраторов DNS-серверов используют dig для поиска проблем с DNS потому, что dig отличается гибкостью, простотой использования и ясностью вывода. Другие аналогичные программы зачастую отличаются меньшей функциональностью.

Несмотря на то, что dig чаще всего используется с параметрами командной строки, предусмотрен и режим работы по сценарию, при котором производится чтение запросов из файла. Краткое описание параметров командной строки и аргументов выводится при передаче параметра -h. В отличие от ранних версий программы, реализация dig от разработчиков сервера BIND9 позволяет производить несколько поисков одновременно из командной строки.

При осуществлении запроса, dig использует список серверов из файла /etc/resolv.conf за исключением того случая, когда четко задан адрес сервера для запроса.

Базовый синтаксис:
dig @server name type

В качестве параметра "server" передается имя или IP-адрес сервера имен для осуществления запроса. В качестве параметра "name" передается имя записи для поиска.

dig +short myip.opendns.com @resolver1.opendns.com 

Получение вашего внешнего IP-адреса.

Вместо того, чтобы открывать браузер, переходить в поисковик Google и вводить строку поиска "whatismyip", можно просто использовать эту команду в терминале. Она также иногда полезна в различных сценариях оболочки.

dig +short txt .wp.dg.cx

Запрос статьи из энциклопедии Wikipedia в терминале через записи DNS.

Эта команда запрашивает статью из Wikipedia, выполняя запрос к DNS-серверу и выводит TXT-запись. Эта запись также содержит короткую ссылку URL на соответствующую запись в Wikipedia.

dig +short txt linux.wp.dg.cx
Вывод этой команды:
"Linux ( or ) is a Unix-like computer operating system assembled under the model of free and open 
source software development and distribution. The defining component of Linux is the Linux 
kernel, an operating system kernel first released 5 October 1991 by" " Linus Torvalds. 
http://en.wikipedia.org/wiki/Linux"

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