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
request for parameter’s value, and will return response time for that particular request. Argument
target should be an IP address. Optional argument timeout specifies timeout in milliseconds.
Default timeout is 1 second. Optional argument psize specifies packet size in bytes, including
IP header. If this argument is omitted, value from DefaultPacketSize configuration parameter
will be used.

Please note that other parameters just return result of background ping process, while this
parameter waits for actual ping completion and then returns the result. Because of this behavior,
it is not recommended to use Icmp.Ping parameter for instant monitoring, only for
occasional tests. For instant monitoring, you should configure targets for background ping and use
Icmp.AvgPingTime or Icmp.LastPingTime parameters to retrieve results.

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:

  • IP address
  • Last response time (milliseconds)
  • Average response time (milliseconds)
  • Packet loss (percents)
  • Configured packet size
  • Name
  • DNS name
  • Automatic

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-туннелированием?

Потому что:

  1. DPI встречается далеко не везде.
  2. Большинство DPI-инструментов полагаются на базу с сигнатурами — если для ICMP-сообщений сигнатур нет, то и туннель обнаружить не получится.
  3. Даже если в базе найдётся подходящая сигнатура, оператор сначала должен настроить её на работу в активном режиме.

Почему он может её не активировать?

  • На проверку каждой сигнатуры требуются ресурсы (преимущественно процессор и время), что может замедлить сеть.
  • Проверка сети может проводиться с помощью разных 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 пакета

IP Datagram
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
Тип Код Контрольная сумма
Данные (формат зависит от значений полей «Код» и «Тип»)
Типы пакетов ICMP
Тип Статус Код Сообщение Данные (длина, бит)
Эхо-ответ
Идентификатор (16) Номер последовательности (16)
Данные (переменная)
1, 2 не используется Зарезервировано
3 Адресат недоступен
Не используется (32)
Заголовок IP, Начало исходной дейтаграммы (64)
Сеть недостижима
1 Узел недостижим
2 Протокол недостижим
3 Порт недостижим
4 Необходима фрагментация, но установлен флаг её запрета (DF)
5 Неверный маршрут от источника
6 Сеть назначения неизвестна
7 Узел назначения неизвестен
8 Узел источник изолирован
9 Сеть административно запрещена
10 Узел административно запрещён
11 Сеть недоступна для ToS
12 Узел недоступен для ToS
13 Коммуникации административно запрещены
14 Нарушение порядка предпочтения узлов
15 Активно отсечение порядка предпочтения
4 устарел Сдерживание источника (отключение источника при переполнении очереди)
5 Перенаправление
Адрес маршрутизатора (32)
Заголовок IP, Начало исходной дейтаграммы (64)
Перенаправление пакетов в сеть
1 Перенаправление пакетов к узлу
2 Перенаправление для каждого типа обслуживания (ToS)
3 Перенаправление пакета к узлу для каждого типа обслуживания
6 устарел Альтернативный адрес узла
7 не используется Зарезервировано
8 Эхо-запрос
Идентификатор (16) Номер последовательности (16)
Данные (переменная)
9 Объявление маршрутизатора
Количество адресов (8) Размер элемента (8) Срок действия (16)
Адрес (32)
Предпочтительность (32)
Адрес (32)
Предпочтительность (32)
10 Запрос маршрутизатора
Не используется (32)
11 Время жизни дейтаграммы истекло
Не используется (32)
Заголовок IP, Начало исходной дейтаграммы (64)
Время жизни пакета (TTL) истекло при транспортировке
1 Время жизни пакета истекло при сборке фрагментов
12 Неверный параметр (проблема с параметрами дейтаграммы: ошибка в IP-заголовке или отсутствует необходимая опция)
Указатель говорит об ошибке
Указатель (8) Не используется (24)
Заголовок IP, Начало исходной дейтаграммы (64)
1 Отсутствует требуемая опция
Не используется (32)
Заголовок IP, Начало исходной дейтаграммы (64)
2 Некорректная длина
13 Запрос метки времени
Идентификатор (16) Номер последовательности (16)
Начальное время (32)
Время приёма (32)
Время отправки (32)
14 Ответ с меткой времени
15 устарел Информационный запрос
Идентификатор (16) Номер последовательности (16)
16 устарел Информационный ответ
17 устарел Запрос адресной маски
Идентификатор (16) Номер последовательности (16)
Маска (32)
18 устарел Отклик на запрос адресной маски
19 зарезервирован Зарезервировано (для обеспечения безопасности)
20—29 зарезервирован Зарезервировано (для экспериментов на устойчивость к ошибкам)
30 устарел Трассировка маршрута
Идентификатор (16) Не используется (16)
Количество хопов исходящего пакета (16) Количество хопов возвращающегося пакета (16)
Скорость линии связи (32)
MTU линии связи (32)
Исходящий пакет успешно отправлен
1 Путь для исходящего пакета не найден, пакет уничтожен
31 устарел Ошибка преобразования датаграммы
Указатель (32)
Заголовок IP и транспортного протокола исходной дейтаграммы
Неизвестная или неуказанная ошибка
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 зарезервирован Зарезервировано
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *