Назад | Перейти на главную страницу

Каково правильное содержание сообщения ICMP? (Буфер, Не фрагментировать и т. Д.)

Я создаю программу Tracert, и мне интересно, действительно ли значение «buffer», используемое в полезных данных Ping, имеет значение. Может это быть что угодно, или роутеры по-разному реагируют в зависимости от содержимого буфера?

А как насчет других частей сообщения проверки связи ICMP? Не фрагментировать и т. Д.

http://msdn.microsoft.com/en-us/library/ms144962.aspx

Я нашел один образец, который устанавливает такой буфер:

    byte[] Buffer
    {
        get
        {
            if (_buffer == null)
            {
                _buffer = new byte[32];
                for (int i = 0; i < Buffer.Length; i++)
                {
                    _buffer[i] = 0x65;
                }
            }
            return _buffer;
        }
    }

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

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

Хороший справочник по этой теме - Эрик Холл. Основные протоколы Интернета.

Нет, раздел данных эха ICMP не имеет смысла.

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

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

Вы говорите, что пишете программу traceroute, но затем используете фразу «Ping payload», которая предполагает, что вы пытаетесь обрабатывать эхо-запросы и ответы ICMP. Хотя, безусловно, можно использовать сообщения ICMP для отслеживания маршрутов (это ваш единственный вариант с tracert в Windows) во многих случаях вы не сможете отследить полный путь, поскольку чрезмерно усердные администраторы часто блокируют эхо.

Вы можете рассмотреть возможность использования других протоколов для ваших зондов, в частности TCP. Например, при отслеживании маршрута к веб-серверу traceroute (который использует UDP по умолчанию) или tracert (ICMP) не так полезен, как nmap -Pn --traceroute -p 80 или tcptraceroute.