Icmp
Содержание:
- session.close ()
- ping.createSession ([options])
- Ping subagent¶
- DPI — глубокий анализ пакетов ( Deep Packet Inspection)
- session.pingHost (target, callback)
- Code Fields
- Type 0 — Echo Reply
- Type 3 — Destination Unreachable
- Type 5 — Redirect
- Type 8 — Echo
- Type 9 — Router Advertisement
- Type 10 — Router Selection
- Type 11 — Time Exceeded
- Type 12 — Parameter Problem
- Type 13 — Timestamp
- Type 14 — Timestamp Reply
- Type 40 — Photuris
- Type 41 — ICMP messages utilized by experimental mobility protocols such as Seamoby
- Type 42 — Extended Echo Request
- Type 43 — Extended Echo Reply
- Type 253 — RFC3692-style Experiment 1 []
- Type 254 — RFC3692-style Experiment 2 []
- ICMP Extension Object Classes and Class Sub-types
- Contact Information
- Эхо-протокол
- Структура ICMP пакета
- Технические подробности
- Формат пакета ICMP
session.close ()
The method closes the underlying raw socket, and cancels all
outstanding requsts.
The calback function for each outstanding ping requests will be called. The
error parameter will be an instance of the class, and the
attribute set to .
The sessoin can be re-used simply by submitting more ping requests, a new raw
socket will be created to serve the new ping requests. This is a way in which
to clear outstanding requests.
The following example submits a ping request and prints the target which
successfully responded first, and then closes the session which will clear the
other outstanding ping requests.
ping.createSession ([options])
The function instantiates and returns an instance of the
class:
The optional parameter is an object, and can contain the following
items:
-
— Either the constant or the
constant , defaults to the constant -
— How many bytes each ICMP echo request packet should be,
defaults to , if the value specified is less that then the value
will be used (8 bytes are required for the ICMP packet itself, then 4
bytes are required to encode a unique session ID in the request and response
packets) - — Number of times to re-send a ping requests, defaults to
-
— A unique ID used to identify request and response packets sent
by this instance of the class, valid numbers are in the range of
to , defaults to the value of -
— Number of milliseconds to wait for a response before re-trying
or failing, defaults to - — Value to use for the IP header time to live field, defaults to
After creating the ping object an underlying raw socket will be
created. If the underlying raw socket cannot be opened an exception with be
thrown. The error will be an instance of the class.
Seperate instances of the class must be created for IPv4 and IPv6.
Ping subagent¶
This subagent can be used to measure ICMP ping response times from one location
to another. Measurements can be either scheduled by the agent itself or
requested by the server.
Metrics scheduled by the agent (based on “PacketRate” parameter):
- ICMP.AvgPingTime
- ICMP.LastPingTime
- ICMP.PacketLoss
- ICMP.PingStdDev
These metrics can be either defined in agent configuration file (using one or
more “Target” parameters), or registered automatically on first request from
server. If targets are registered automatically, default packet size is used.
First request to non-existing target will return “0” as a value. Automatically
registered targets are automatically removed after a timeout, if server stops
requesting metrics for that target.
Metrics available on demand:
ICMP.Ping
Metrics
When loaded, PING subagent adds the following parameters to agent:
Parameter | Description |
---|---|
Icmp.AvgPingTime(target) | Average ICMP ping response time from target for last minute. Argument target can be either IP address or name specified in Target configuration record (see below). |
Icmp.LastPingTime(target) | Last ICMP ping response time from target. Argument target can be either IP address or name specified in Target configuration record (see below). |
Icmp.PacketLoss(target) | ICMP ping packet loss (in percents) for target for last minute. Argument target can be either IP address or name specified in Target configuration record (see below). |
Icmp.Ping(target, timeout, psize) |
ICMP ping response time from target. Agent will send echo request as soon as it receives Please note that other parameters just return result of background ping process, while this |
Icmp.PingStdDev(target) |
Standard deviation of the response time for the target for last minute. Argument target can be either IP address or name specified in Target configuration record (see below). |
Tables
Table | Description |
---|---|
Icmp.Targets |
Table of configured ping targets. Columns:
|
Configuration file
All configuration parameters related to PING subagent should be placed into section of agent’s configuration file.
The following configuration parameters are supported:
Parameter | Format | Description | Default value |
---|---|---|---|
DefaultPacketSize | bytes | Set default packet size to bytes. | 46 |
PacketRate | packets | Set ping packet rate per minute. Allowed values are from 1 to 60 and values below or above will be adjusted automatically. |
4 |
Target | ip:name:psize | Add target with IP address ip to background ping target list and assign an optional name name to it. Target will be pinged using packets of psize bytes size. Name and packet size fields are optional and can be omitted. This parameter can be given multiple times to add multiple targets. |
none |
Timeout | milliseconds | Set response timeout to milliseconds. Allowed values are from 500 to 5000 and values below or above will be adjusted automatically. |
3000 |
Configuration example:
# This sample nxagentd.conf instructs agent to: # 1. load PING subagent # 2. Ping target 10.0.0.1 with default size (46 bytes) packets and 10.0.0.2 with 1000 bytes packets # 3. Timeout for ping set to 1 second and pings are sent 12 times per minute (each 5 seconds) MasterServers = netxms.demo SubAgent = ping.nsm Timeout = 1000 PacketRate = 12 # every 5 seconds Target = 10.0.0.1:target_1 Target = 10.0.0.2:target_2:1000
Note
Response time of 10000 indicate timeout
DPI — глубокий анализ пакетов ( Deep Packet Inspection)
Во время обычного анализа пакетов считываются метаданные пакета (в основном заголовки). DPI же просматривает содержимое пакета. По сути, DPI анализирует полезную нагрузку и пытается понять, всё ли с ней нормально.
В нашем случае DPI с помощью отслеживания аномалий может обнаружить ICMP-туннель, просмотрев полезную нагрузку и увидев, что она отличается от ожидаемой. Таким образом, мы не сможем скрыть все параметры.
Так а зачем тогда вообще возиться с ICMP-туннелированием?
Потому что:
- DPI встречается далеко не везде.
- Большинство DPI-инструментов полагаются на базу с сигнатурами — если для ICMP-сообщений сигнатур нет, то и туннель обнаружить не получится.
- Даже если в базе найдётся подходящая сигнатура, оператор сначала должен настроить её на работу в активном режиме.
Почему он может её не активировать?
- На проверку каждой сигнатуры требуются ресурсы (преимущественно процессор и время), что может замедлить сеть.
- Проверка сети может проводиться с помощью разных ping-сообщений с разным размером полезной нагрузки (например, отправит ping-сообщение с полезной нагрузкой в размере 1234 байт) для диагностики проблем, связанных с MTU. Активация подобной сигнатуры приведёт к множеству ложных срабатываний, что будет раздражать команду мониторинга и, как следствие, снизит надёжность сигнатуры.
session.pingHost (target, callback)
The method sends a ping request to a remote host.
The parameter is the dotted quad formatted IP address of the target
host for IPv4 sessions, or the compressed formatted IP address of the target
host for IPv6 sessions.
The function is called once the ping requests is complete. The
following arguments will be passed to the function:
-
— Instance of the class or a sub-class, or if no
error occurred -
— The target parameter as specified in the request
still be the target host and NOT the responding gateway -
— An instance of the class specifying when the first ping
was sent for this request (refer to the Round Trip Time section for more
information) -
— An instance of the class specifying when the request
completed (refer to the Round Trip Time section for more information)
The following example sends a ping request to a remote host:
Code Fields
- Reference
- Note
-
Many of these ICMP types have a "code" field. Here we list the types again with their assigned code fields.
Type 0 — Echo Reply
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Code |
Type 3 — Destination Unreachable
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
Net Unreachable | ||
1 | Host Unreachable | |
2 | Protocol Unreachable | |
3 | Port Unreachable | |
4 | Fragmentation Needed and Don’t Fragment was Set |
|
5 | Source Route Failed | |
6 | Destination Network Unknown | |
7 | Destination Host Unknown | |
8 | Source Host Isolated | |
9 | Communication with Destination Network is Administratively Prohibited |
|
10 | Communication with Destination Host is Administratively Prohibited |
|
11 | Destination Network Unreachable for Type of Service |
|
12 | Destination Host Unreachable for Type of Service |
|
13 | Communication Administratively Prohibited | |
14 | Host Precedence Violation | |
15 | Precedence cutoff in effect |
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Code |
Type 5 — Redirect
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
Redirect Datagram for the Network (or subnet) | ||
1 | Redirect Datagram for the Host | |
2 | Redirect Datagram for the Type of Service and Network | |
3 | Redirect Datagram for the Type of Service and Host |
- Reference
- []
- Available Formats
Codes | Description | Reference |
---|---|---|
Alternate Address for Host |
Type 8 — Echo
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Code |
Type 9 — Router Advertisement
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
Normal router advertisement | ||
16 | Does not route common traffic |
Type 10 — Router Selection
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Code |
Type 11 — Time Exceeded
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
Time to Live exceeded in Transit | ||
1 | Fragment Reassembly Time Exceeded |
Type 12 — Parameter Problem
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
Pointer indicates the error | ||
1 | Missing a Required Option | |
2 | Bad Length |
Type 13 — Timestamp
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Code |
Type 14 — Timestamp Reply
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Code |
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Code |
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Code |
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Code |
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Code |
- Reference
- []
- Reference
- []
- Reference
- Reference
- Reference
- []
- Reference
- []
- Reference
- []
- Reference
- []
- Reference
- []
- Reference
- Reference
- Reference
- []
Type 40 — Photuris
- Registration Procedure(s)
-
IESG Approval or Standards Action
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
Bad SPI | ||
1 | Authentication Failed | |
2 | Decompression Failed | |
3 | Decryption Failed | |
4 | Need Authentication | |
5 | Need Authorization |
Type 41 — ICMP messages utilized by experimental mobility protocols such as Seamoby
- Registration Procedure(s)
-
Specification Required or IESG Approval
- Expert(s)
-
Unassigned
- Reference
Type 42 — Extended Echo Request
- Registration Procedure(s)
-
First Come First Served
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Error | ||
1-255 | Unassigned |
Type 43 — Extended Echo Reply
- Registration Procedure(s)
-
First Come First Served
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
No Error | ||
1 | Malformed Query | |
2 | No Such Interface | |
3 | No Such Table Entry | |
4 | Multiple Interfaces Satisfy Query | |
5-255 | Unassigned |
Type 253 — RFC3692-style Experiment 1 []
- Registration Procedure(s)
-
Standards Action or IESG Approval
- Reference
Type 254 — RFC3692-style Experiment 2 []
- Registration Procedure(s)
-
Standards Action or IESG Approval
- Reference
ICMP Extension Object Classes and Class Sub-types
- Reference
- Available Formats
Range | Registration Procedures |
---|---|
0-246 | First Come First Served |
247-255 | Private Use |
Class Value | Class Name | Reference |
---|---|---|
1 | MPLS Label Stack Class | |
2 | Interface Information Object | |
3 | Interface Identification Object | |
4 | Extended information | |
5-246 | Unassigned | |
247-255 | Reserved for Private Use |
Sub-types — Class 1 — MPLS Label Stack Class
- Registration Procedure(s)
-
First Come First Served
- Reference
- Available Formats
C-Type (Value) | Description | Reference |
---|---|---|
Reserved | ||
1 | Incoming MPLS Label Stack | |
2-246 | Unassigned | |
247-255 | Reserved for private use |
Sub-types — Class 2 — Interface Information Object
- Reference
- Available Formats
C-Type (Value) | Description | Reference |
---|---|---|
0-1 | Interface Role field | |
2 | Unallocated — allocatable with Standards Action | |
3 | Unallocated — allocatable with Standards Action | |
4 | ifIndex included | |
5 | IP Address Sub-object included | |
6 | Name Sub-object included | |
7 | MTU included |
Sub-types — Class 2 — Interface Information Object — Interface Roles
- Available Formats
Value | Description | Reference |
---|---|---|
Incoming IP Interface | ||
1 | Sub-IP Component of Incoming IP Interface | |
2 | Outgoing IP Interface | |
3 | IP Next-hop |
Sub-types — Class 3 — Interface Identification Object
- Registration Procedure(s)
-
First Come First Served
- Reference
- Available Formats
Codes | Description | Reference |
---|---|---|
Reserved | ||
1 | Identifies Interface By Name | |
2 | Identifies Interface By Index | |
3 | Identifies Interface By Address | |
4-255 | Unassigned |
Sub-types — Class 4 — Extended information
- Registration Procedure(s)
-
Standards Action
- Reference
- Available Formats
Value | Description | Reference |
---|---|---|
Reserved | ||
1 | Pointer |
Contact Information
ID | Name | Contact URI | Last Updated |
---|---|---|---|
Jon Postel | mailto:postel&isi.edu | 1995-09 | |
David Johnson | |||
Tom Markson | mailto:markson&osmosys.incog.com | 1995-09 | |
Bill Simpson | mailto:Bill.Simpson&um.cc.umich.edu | 1995-10 | |
Zaw-Sing Su | mailto:ZSu&TSCA.ISTC.SRI.COM |
It is only appropriate to use these values in explicitly- configured experiments; they MUST NOT be shipped as defaults in implementations. See RFC 3692 for details. |
Эхо-протокол
Протокол ICMP предоставляет сетевым администраторам средства для тестирования достижимости узлов сети. Эти средства представляют собой очень простой эхо-протокол, включающий обмен двумя типами сообщений: эхо-запрос и эхо-ответ. Компьютер или маршрутизатор посылают по интерсети эхо-запрос, в котором указывают IP-адрес узла, достижимость которого нужно проверить. Узел, который получает эхо-запрос, формирует и отправляет эхо-ответ и возвращает сообщение узлу – отправителю запроса. В запросе могут содержаться некоторые данные, которые должны быть возвращены в ответе. Так как эхо-запрос и эхо-ответ передаются по сети внутри IP-пакетов, то их успешная доставка означает нормальное функционирование всей транспортной системы интерсети.
Во многих операционных системах используется утилита ping, которая предназначена для тестирования достижимости узлов. Эта утилита обычно посылает серию эхо-запросов к тестируемому узлу и предоставляет пользователю статистику об утерянных эхо-ответах и среднем времени реакции сети на запросы.
Структура ICMP пакета
Bit 0 — 7 | Bit 8 — 15 | Bit 16 — 23 | Bit 24 — 31 | |
---|---|---|---|---|
(20 bytes) | Version/IHL | Type of service | Length | |
Identification | flags and offset | |||
Time To Live (TTL) | Protocol | Checksum | ||
Source IP address | ||||
Destination IP address | ||||
ICMP Header(8 bytes) | Type of message | Code | Checksum | |
Header Data | ||||
ICMP Payload(optional) | Payload Data |
Общее содержание ICMP пакета
- IP Header (синим цветом):
- ICMP Header (красным цветом):
- Type of ICMP message (8 бит) — тип сообщения ICMP.
- Code (8 бит).
- Checksum (16 бит) — контрольная сумма, вычисляется из части ICMP пакета, заголовок не используется.
- Header Data (32 бита) — содержит Идентификатор (Identifier) (16 бит) и Порядковый номер (Sequence number) (16 бит) необходимые для корректного определения отправителя.
- ICMP Payload
Технические подробности
ICMP-сообщение строится из IP-пакетов, сгенерировавших ICMP-ответ. Протокол IP инкапсулирует соответствующее ICMP-сообщение с новым заголовком IP (чтобы отправить ICMP-сообщение обратно отправителю) и передает полученные пакеты дальше.
Например, каждая машина (такая, как маршрутизатор), которая перенаправляет IP-пакеты, уменьшает Time to live (TTL) поля заголовка IP на единицу, если TTL достигает 0, ICMP-сообщение о превышении TTL отправляется на источник пакета.
ICMP основан на протоколе IP. Каждое ICMP-сообщение инкапсулируется непосредственно в пределах одного IP-пакета, и, таким образом, как и UDP и в отличие от TCP, ICMP является т. н. «ненадежным» (не контролирующим доставку и её правильность). В отличие от UDP, где реализация надёжности возложена на ПО прикладного уровня, ICMP (в силу специфики применения) обычно не нуждается в реализации надёжной доставки. Его цели отличны от целей транспортных протоколов, таких как TCP и UDP: он, как правило, не используется для передачи и приёма данных между конечными системами. ICMP не используется непосредственно в приложениях пользователей сети (исключение составляют инструменты Ping и Traceroute). Тот же Ping, например, служит обычно как раз для проверки потерь IP-пакетов на маршруте.
Формат пакета ICMP
Октет (байт) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Тип | Код | Контрольная сумма | |||||||||||||||||||||||||||||
… | Данные (формат зависит от значений полей «Код» и «Тип») |
Тип | Статус | Код | Сообщение | Данные (длина, бит) | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Эхо-ответ |
|
||||||||||
1, 2 | не используется | Зарезервировано | |||||||||
3 | Адресат недоступен |
|
|||||||||
Сеть недостижима | |||||||||||
1 | Узел недостижим | ||||||||||
2 | Протокол недостижим | ||||||||||
3 | Порт недостижим | ||||||||||
4 | Необходима фрагментация, но установлен флаг её запрета (DF) | ||||||||||
5 | Неверный маршрут от источника | ||||||||||
6 | Сеть назначения неизвестна | ||||||||||
7 | Узел назначения неизвестен | ||||||||||
8 | Узел источник изолирован | ||||||||||
9 | Сеть административно запрещена | ||||||||||
10 | Узел административно запрещён | ||||||||||
11 | Сеть недоступна для ToS | ||||||||||
12 | Узел недоступен для ToS | ||||||||||
13 | Коммуникации административно запрещены | ||||||||||
14 | Нарушение порядка предпочтения узлов | ||||||||||
15 | Активно отсечение порядка предпочтения | ||||||||||
4 | устарел | Сдерживание источника (отключение источника при переполнении очереди) | |||||||||
5 | Перенаправление |
|
|||||||||
Перенаправление пакетов в сеть | |||||||||||
1 | Перенаправление пакетов к узлу | ||||||||||
2 | Перенаправление для каждого типа обслуживания (ToS) | ||||||||||
3 | Перенаправление пакета к узлу для каждого типа обслуживания | ||||||||||
6 | устарел | Альтернативный адрес узла | |||||||||
7 | не используется | Зарезервировано | |||||||||
8 | Эхо-запрос |
|
|||||||||
9 | Объявление маршрутизатора |
|
|||||||||
10 | Запрос маршрутизатора |
|
|||||||||
11 | Время жизни дейтаграммы истекло |
|
|||||||||
Время жизни пакета (TTL) истекло при транспортировке | |||||||||||
1 | Время жизни пакета истекло при сборке фрагментов | ||||||||||
12 | Неверный параметр (проблема с параметрами дейтаграммы: ошибка в IP-заголовке или отсутствует необходимая опция) | ||||||||||
Указатель говорит об ошибке |
|
||||||||||
1 | Отсутствует требуемая опция |
|
|||||||||
2 | Некорректная длина | ||||||||||
13 | Запрос метки времени |
|
|||||||||
14 | Ответ с меткой времени | ||||||||||
15 | устарел | Информационный запрос |
|
||||||||
16 | устарел | Информационный ответ | |||||||||
17 | устарел | Запрос адресной маски |
|
||||||||
18 | устарел | Отклик на запрос адресной маски | |||||||||
19 | зарезервирован | Зарезервировано (для обеспечения безопасности) | |||||||||
20—29 | зарезервирован | Зарезервировано (для экспериментов на устойчивость к ошибкам) | |||||||||
30 | устарел | Трассировка маршрута |
|
||||||||
Исходящий пакет успешно отправлен | |||||||||||
1 | Путь для исходящего пакета не найден, пакет уничтожен | ||||||||||
31 | устарел | Ошибка преобразования датаграммы |
|
||||||||
Неизвестная или неуказанная ошибка | |||||||||||
1 | Невозможно конвертировать опцию | ||||||||||
2 | Неизвестная обязательная опция | ||||||||||
3 | Неподдерживаемая обязательная опция | ||||||||||
4 | Неподдерживаемый транспортный протокол | ||||||||||
5 | Превышена полная длина | ||||||||||
6 | Превышена длина заголовка IP | ||||||||||
7 | Номер транспортного протокола больше 255 | ||||||||||
8 | Номер порта вне допустимого диапазона | ||||||||||
9 | Превышена длина заголовка транспортного протокола | ||||||||||
10 | Переход через границу 32 бит и установлен бит ACK | ||||||||||
11 | Неизвестная обязательная опция транспортного протокола | ||||||||||
32 | устарел | Перенаправление для мобильного узла | |||||||||
33 | устарел | IPv6 Where-Are-You (где вы находитесь) | |||||||||
34 | устарел | IPv6 I-Am-Here (я здесь) | |||||||||
35 | устарел | Запрос перенаправления для мобильного узла | |||||||||
36 | устарел | Отклик на запрос перенаправления для мобильного узла | |||||||||
37 | устарел | Запрос доменного имени | |||||||||
38 | устарел | Ответ на запрос доменного имени | |||||||||
39 | устарел | Обнаружение алгоритма безопасности SKIP (SKIP algorithm discovery ICMP message) | |||||||||
40 | Photuris | ||||||||||
Зарезервировано | |||||||||||
1 | Неизвестный индекс параметров безопасности | ||||||||||
2 | Параметры безопасности верны, но произошла ошибка аутентификации | ||||||||||
3 | Параметры безопасности верны, но произошёл сбой при расшифровке | ||||||||||
4 | Требуется проверка подлинности | ||||||||||
5 | Требуется авторизация | ||||||||||
41 | экспериментальный | ||||||||||
42—252 | Зарезервировано | ||||||||||
253-254 | экспериментальный | Зарезервировано для экспериментов по RFC 3692 | |||||||||
255 | зарезервирован | Зарезервировано |