Почему значение типа протокола для протокола IP в кадре Ethernet равно 8?

Fsck обычно запускается при запуске, когда файловая система не была полностью размонтирована (обычно, когда вам нужно выполнить полный сброс). fsck проверит ваша файловая система перед ее монтированием и сообщает об ошибке, если обнаруживает, что что-то идет не так (несоответствия, неспособность воспроизвести журнал, потерянные inodes ...), или сообщит об ошибке, если не обнаружит никаких ошибок. Так что в вашем случае вам повезло, и с вашей файловой системой все в порядке. Есть очень интересный пост о fsck, если вам нужна дополнительная информация о том, как он работает внутри: https://lwn.net/ Статьи / 248180 /

0
03.04.2018, 12:15
2 ответа

Определение структуры показывает, что h_protoявляется 16-битным -битным целым числом -с прямым порядком байтов -:

struct ethhdr {
        unsigned char   h_dest[ETH_ALEN];       /* destination eth addr */
        unsigned char   h_source[ETH_ALEN];     /* source ether addr    */
        __be16          h_proto;                /* packet type ID field */
} __attribute__((packed));

Так что вам нужно обработать его с помощью ntohsперед чтением. Как только вы это сделаете, вы увидите правильное значение 0x0800.

5
28.01.2020, 02:16

Если вы попытаетесь напечатать это объявление EtherType, вы не получите правильное значение, значит, ваша машина неправильно интерпретирует порядок следования байтов. Решение будет:

 int etherType = ntohs(eth->h_proto);
 printf("EtherType: 02%x", etherType);

Это даст вам именно тот EtherType, который указан в документации.

0
27.04.2021, 11:17

Теги

Похожие вопросы