Опубликован: 13.05.2011 | Уровень: для всех | Доступ: платный
Лекция 19:

Сетевое администрирование Linux. ICMP

< Лекция 18 || Лекция 19 || Лекция 20 >
Аннотация: Протокол ICMP. Типы пакетов. Утилиты ping, traceroute, tcptraceroute. Утилиты управления сетью. Nmap. NetCat. Netstat.

Ход занятия

1. Протокол ICMP (Internet Control Message Protocol , протокол контроля сообщений в интернет) – это Internet-протокол третьего (сетевого) уровня модели OSI , создающий пакеты с сообщениями об ошибках и другой информацией об обработке IP-пакетов .

В протоколе ICMP описаны несколько типов пакетов, таких как:

  • эхо-запрос – пакет, отправляемый для проверки связи с удаленным узлом
  • эхо-ответ – пакет, получаемый источником в ответ на пакет типа эхо-запрос
  • назначение недоступно – получатель такого пакета информируется о недоступности сети/узла/порта назначения.
  • Редирект – пакет информирует узел об изменении маршрута до назначения. В современных ОС данный тип пакета игнорируется.
  • Время вышло – узел-источник получает этот тип пакета, если IP-пакет был уничтожен в связи с обнулением поля TimeToLive.

Остальные типы (а также подтипы) пакетов ICMP можно посмотреть в заголовочном файле /usr/include/linux/icmp.h.

2. Утилита ping служит для проверки факта наличия связи с удаленным узлом, а также надежности и скорости связи. Иногда утилита используется для раскрытия ip-адресов хоста по его имени.

Синтаксис ее таков:

ping [параметры] имя_или_ip-адрес_хоста

С помощью параметра -c вы можете указать количество запросов, которые выполнит ping . Если параметр -c опущен, то ping будет подавать запросы до тех пор, пока не получит сигнал или пользователь не нажмет <Ctrl-c> .

[gserg@WebMedia linux]$ ping -c3 www.ya.ru
PING ya.ru (213.180.204.8) 56(84) bytes of data.
64 bytes from ya.ru (213.180.204.8): icmp_seq=0 ttl=49 time=26.7 ms
64 bytes from ya.ru (213.180.204.8): icmp_seq=1 ttl=49 time=25.6 ms
64 bytes from ya.ru (213.180.204.8): icmp_seq=2 ttl=49 time=24.7 ms

--- ya.ru ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2019ms
rtt min/avg/max/mdev = 24.741/25.718/26.724/0.809 ms, pipe 2
[gserg@WebMedia linux]$

С помощью параметра -f можно проверить быстродействие сети (работает только из под root ). При использовании этого параметра ping посылает около 1000 пакетов в секунду.

[gserg@WebMedia gserg]$ ping -f 192.168.2.254
PING 192.168.2.254 (192.168.2.254) 56(84) bytes of data.
ping: cannot flood; minimal interval, allowed for user, is 200ms
[gserg@WebMedia gserg]$ su -c "ping -f 192.168.2.254"
Password:
PING 192.168.2.254 (192.168.2.254) 56(84) bytes of data.

--- 192.168.2.254 ping statistics ---
238 packets transmitted, 238 received, 0% packet loss, time 4379ms
rtt min/avg/max/mdev = 0.147/0.177/0.478/0.031 ms, pipe 2, ipg/ewma 18.478/0.179 ms
[gserg@WebMedia gserg]$

Параметром -s может быть указан размер пакета в байтах (не менее 64 и не более 65000 ), в ином случае размер пакета составит 64 байта.

[gserg@WebMedia linux]$ ping -s 65000 192.168.2.254
PING 192.168.2.254 (192.168.2.254) 65000(65028) bytes of data.
65008 bytes from 192.168.2.254: icmp_seq=0 ttl=64 time=12.0 ms
65008 bytes from 192.168.2.254: icmp_seq=1 ttl=64 time=12.0 ms
65008 bytes from 192.168.2.254: icmp_seq=2 ttl=64 time=11.9 ms
65008 bytes from 192.168.2.254: icmp_seq=3 ttl=64 time=11.9 ms

--- 192.168.2.254 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3026ms
rtt min/avg/max/mdev = 11.988/12.029/12.083/0.086 ms, pipe 2
[gserg@WebMedia linux]$

Дополнительную информацию можно получить из справочного руководства man .

Команда traceroute поможет Вам проверить путь до удаленного хоста, выдавая все промежуточные маршрутизаторы. С помощью этой команды становится просто диагностировать проблему в большой сети, быстро выявляя сбойный участок. Синтаксис команды такой же, как и у ping , за исключением параметров командной строки.

[gserg@WebMedia linux]$ traceroute www.ya.ru
traceroute to ya.ru (213.180.204.8), 30 hops max, 38 byte packets
1  ns.edu.vologda.ru (192.168.2.2)  0.281 ms  0.192 ms  0.162 ms
2  80.92.3.3 (80.92.3.3)  1.169 ms  1.257 ms  1.103 ms
3  sv-vol00ra-s2-0.severttk.ru (80.92.3.1)  3.140 ms  3.250 ms  3.111 ms
4  sv-yar00rb-s1-0-0.severttk.ru (80.92.0.69)  34.511 ms sv-yar00rb-s2-5-0.
severttk.ru (80.92.0.97)  25.161 ms sv-yar00rb-s1-0-0.severttk.ru (80.92.0.69)  10.718 ms
5  MSK41-F000.145.gw.transtelecom.net (217.150.38.142)  28.066 ms  21.430 ms  31.571 ms
6  MSK41.TRANSTELECOM.NET (193.232.244.211)  25.680 ms  18.921 ms  20.999 ms
     MPLS Label=350 CoS=6 TTL=255 S=1
7  ix2-m9.yandex.net (193.232.244.93)  23.085 ms  21.548 ms  35.076 ms
8  c3-vlan3.yandex.net (213.180.192.171)  25.177 ms  23.104 ms  22.918 ms
9  ya.ru (213.180.204.8)  33.519 ms  23.189 ms  32.496 ms

Команда tcptraceroute практически аналогична предыдущей, однако в качестве базового протокола она использует протокол tcp . Это позволяет проверять доступ к службам tcp и путь до них.

gserg@ADM:~$ tcptraceroute smtp.mail.ru 25
Selected device eth0, address 10.52.2.1, port 45217 for outgoing packets
Tracing the path to smtp.mail.ru (194.67.23.111) on TCP port 25 (smtp), 30 hops max
 1  10.52.0.5  0.383 ms  0.231 ms  0.219 ms
 2  b229.vologda.ru (193.19.67.229)  1248.475 ms  345.180 ms  106.562 ms
 3  spb-vgld.ptn.ru (212.48.195.9)  78.138 ms  65.802 ms  157.785 ms
 4  spb-bbn1-ge-2-1-0-88.rt-comm.ru (213.59.5.141)  120.521 ms  114.442 ms  131.549 ms
 5  msk-bgw1-ge1-0-0-0.rt-comm.ru (217.106.0.14)  76.536 ms  177.440 ms  130.447 ms
 6  msk-bgw1-ge1-0-0-0.rt-comm.ru (217.106.0.14)  143.422 ms  90.071 ms  115.207 ms
 7  195.161.165.246  172.163 ms  133.969 ms  110.668 ms
 8  cat03.Moscow.gldn.net (195.239.10.189)  79.129 ms  77.774 ms  93.654 ms
 9  cat12.Moscow.gldn.net (194.186.159.238)  76.082 ms  162.883 ms  77.045 ms
10  mailru-KK12-2-gw.Moscow.gldn.net (195.239.8.90)  105.042 ms  75.285 ms  89.922 ms
11  * * *
12  smtp.mail.ru (194.67.23.111) [open]  78.527 ms  81.314 ms  80.269 ms

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

3. Утилиты управления сетью существуют для диагностистики как сетевых проблем, так и диагностики проблем каждого конкретного хоста.

Наиболее популярной утилитой, с помощь которой диагностируются проблемы хостов является nmap , который входит в поставку практически всех современных дистрибутивов операционной системы Linux.

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

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

  • -sS – скрытое сканирование TCP-портов
  • -sT – открытое сканирование TCP-портов
  • -sU – открытое сканирование UDP-портов
  • -sP – ping-сканирование (поиск активных хостов в сети)
  • - sF, -sN, -sX – разные скрытые типы сканирования TCP-портов.
  • -O – определение типа операционной системы (не работает с -sP )
  • -p – указание диапазона портов для сканирования ( 12345 , 12345-23333 )
  • -v – подробный вывод.
[root@WebMedia linux]# nmap -v -sS -O 192.168.2.84

Starting nmap 3.48 ( http://www.insecure.org/nmap/ ) at 2005-04-23 17:24 MSD
Host 192.168.2.84 appears to be up ... good.
Initiating SYN Stealth Scan against 192.168.2.84 at 17:24
Adding open port 135/tcp
Adding open port 139/tcp
Adding open port 445/tcp
The SYN Stealth Scan took 0 seconds to scan 1657 ports.
For OSScan assuming that port 135 is open and port 1 is closed and neither are firewalled
Interesting ports on 192.168.2.84:
(The 1654 ports scanned but not shown below are in state: closed)
PORT    STATE SERVICE
135/tcp open  msrpc
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
Device type: general purpose
Running: Microsoft Windows 95/98/ME|NT/2K/XP
OS details: Microsoft Windows Millennium Edition (Me), Windows 2000 Professional or Advanced Server, or Windows XP
TCP Sequence Prediction: Class=random positive increments
                         Difficulty=9641 (Worthy challenge)
IPID Sequence Generation: Incremental

Nmap run completed -- 1 IP address (1 host up) scanned in 2.391 seconds

Команда NetCat (nc) – это еще более широко используемая команда. Ее предназначение, в первую очередь, это проверка работоспособности сети на конкретном узле и выявление ошибок при передаче. Команда nc может открыть порт и выводить информацию из него на экран (или в файл, другое приложение по каналу). Эту возможность часто используют для проверки работы TCP . Для открытия порта служит ключ -l , а порт можно указать параметром -p:

1-я консоль 
 [root@WebMedia linux]# nc -l -p 25 127.0.0.1 
 test 
 test double 
  punt! 
  
 2-я консоль 
 [gserg@WebMedia gserg]$ telnet 127.0.0.1 25 
 Trying 127.0.0.1... 
 Connected to 127.0.0.1. 
 Escape character is '^]'. 
 test 
 test double 
 Connection closed by foreign host. 
 [gserg@WebMedia gserg]$

Однако и с помощью nc можно просканировать открытые порты. Правда, nc не обладает таким широким набором возможностей как nmap , и делает сканирование намного медленнее. Для этого используется параметр -z . Параметр -v позволяет нам получить дополнительную информацию:

[root@WebMedia linux]# nc -z -v 127.0.0.1 600-700
localhost.localdomain [127.0.0.1] 631 (ipp) open

Команда netstat позволяет просмотреть открытые соединения на текущем компьютере. Введенная без параметров, она покажет все соединения, включая открытые сокеты unix. Команда принимает параметры, наиболее часто используемыми являются:

  • -n – показывает числовые значения номеров портов вместо имени из /etc/services и числовые ip-адреса вместо доменных имен;
  • -p – показывает pid процесса, использующего соединение;
  • -t – показывать только TCP-сокеты
  • -u – показывать только UDP-сокеты
  • -i – показать список интерфейсов и статистику трафика на них
  • -l – только слушающие порты

Таким образом, просмотр всех программ, слушающих TCP-порты :

root@ADM:/var/mail# netstat  -tpl
Активные соединения с интернетом (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State       PID/Program name
tcp        0      0 localhost:2208          *:*                     LISTEN     4785/hpiod       
tcp        0      0 *:print01               *:*                     LISTEN     4864/inetd       
tcp        0      0 *:51762                 *:*                     LISTEN     26729/sim        
tcp        0      0 *:telnet                *:*                     LISTEN     4864/inetd       
tcp        0      0 localhost:ipp           *:*                     LISTEN     4761/cupsd       
tcp        0      0 localhost:2207          *:*                     LISTEN     4788/python      
tcp6       0      0 *:5800                  *:*                     LISTEN     9066/kded [kdeinit]
tcp6       0      0 *:5900                  *:*                     LISTEN     9066/kded [kdeinit]
tcp6       0      0 *:65005                 *:*                     LISTEN     9519/notes2w     
tcp6       0      0 *:57177                 *:*                     LISTEN     9519/notes2w

Просмотр всех интерфейсов:

root@ADM:/var/mail# netstat  -i

Таблица интерфейсов ядра

Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0   1500 0    238445      0      0      0   200095      0      0      0 BMRU
lo    16436 0       282      0      0      0      282      0      0      0 LRU
< Лекция 18 || Лекция 19 || Лекция 20 >
Ярослав Горлов
Ярослав Горлов

Было бы хорошо если бы изучая Ленкцию можно было скачать файлы, используемые для тренировки в терминале. (lesson6_st.txt и т.п.)

Max Akt
Max Akt

Начиная с восьмого урока резко возросла сложность. Почему? Если первые семь уроком у нас было ознакомление с базовыми функциями, а с восьмого начались сценарии, переменные, функции. Как так? Неужели человек, который только начал изучать Linux, будет в курсе того, о чем говорится уже на восьмом уроке?
 

Михаил Байков
Михаил Байков
Россия, Москва, Московский Авиационный Институт, 2009
Александр Арчибасов
Александр Арчибасов
Россия, Магнитогорск, Школа №67, 2012