Wrong value of some IP header fields

Home Forums Discussions Support Portal Wrong value of some IP header fields

This topic contains 4 replies, has 2 voices, and was last updated by  VK 11 years, 1 month ago.

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #5075

    VK
    Participant

    Использую WinpkFilter 3.0 и VC++ 2005

    Перехватив пакет, получаю, что значения некоторых полей IP заголовка неверные, а некоторые верные. Вот значения переменных для перехваченного ICMP эхо-пакета, пингующего ntoskrnl.com.

    http://img314.imageshack.us/img314/8563/strbagzu6.jpg

    Структура, описывающая IP заголовок:


    typedef struct iphdr
    {
    u_char ip_hl:4, /* header length */
    ip_v:4; /* version */
    u_char ip_tos; /* type of service */
    u_short ip_len; /* total length */
    u_short ip_id; /* identification */
    short ip_off; /* fragment offset field */
    #define IP_DF 0x4000 /* dont fragment flag */
    #define IP_MF 0x2000 /* more fragments flag */
    u_char ip_ttl; /* time to live */
    u_char ip_p; /* protocol */
    u_short ip_sum; /* checksum */
    struct in_addr ip_src,ip_dst; /* source and dest address */
    } iphdr, *iphdr_ptr;

    Думал, может в ней ошибка, но IP адреса, которые находятся в самом конце заголовка, верные!
    Подскажите, в чем может быть моя ошибка?

    #6183

    Vadim Smirnov
    Moderator

    А какие поля неправильные то?

    #6184

    VK
    Participant

    @SerpentFly wrote:

    А какие поля неправильные то?

    сразу можно сказать, что неправильные ip_len (т.к. пинг-пакет – 32 байта данных) ip_hl (должен быть равен 20) и ip_p (должен быть равен 1 – протокол ICMP).

    #6185

    Vadim Smirnov
    Moderator

    сразу можно сказать, что неправильные ip_len (т.к. пинг-пакет – 32 байта данных) ip_hl (должен быть равен 20) и ip_p (должен быть равен 1 – протокол ICMP).

    ip_len у вас показан как 12288, в 16-ричном представлении это 0х3000, учитывая сетевой порядок байт в пакете получаем 0x0030 = 48 байт. ip_hl измеряется в двойных словах, тут все верно 5 двойных слов (DWORD) это как раз 20 байт. Ну а протокол (ip_p) определен как TCP (6), из картинки не следует что это ICMP пакет, так что осмелюсь предположить что вы ошиблись приняв этот пакет за ICMP.

    #6186

    VK
    Participant

    Большое спасибо за разъяснение.

    Действительно, сетевой порядок байт и то, что длинна заголовка измеряется DWORD’ами я не учел. RFC не читал, а большинство снифферов длину заголовка выдают в байтах, вот я подумал, что так и в самом пакете. И насчет ICMP пакета я тоже ошибся, видимо это был TCP HTTP пакет.

Viewing 5 posts - 1 through 5 (of 5 total)

You must be logged in to reply to this topic.