Мне нужно распарсить пакеты из pcap файла на с/с++. Я пытаюсь добраться до IP в пакетах типа MPLS. Но у некоторых из них один MPLS Header, а у некоторых 2.
Знаю, что на наличие еще одного header указывает бит в стеке. Я могу посмотреть его с помощью Wireshark, но не могу понять как достать его в программе c++.
Может кто-то знает как можно извлечь эту информацию из header?
Я только начинаю со всем этим разбираться, буду благодарен любой помощи.
Знаю, что на наличие еще одного header указывает бит в стеке. Я могу посмотреть его с помощью Wireshark, но не могу понять как достать его в программе c++.
Нужно достать и проанализировать поле S из метки MPLS. С этим сложность, что ли?
kuzko, извлечь текущий кадр MPLS, перевести его в host-endian, проверить бит S. Примерно так:
uint32_t *p = ...
for (;;) {
uint32_t v;
memcpy(&v, p, sizeof(v));
v = ntohl(v);
if (v & 0x100) {
// это последний заголовок MPLS в стеке
break;
} else {
// это не последний
++p;
}
}
Можно заглянуть в /usr/include/linux/mpls.h (приходящий из libc) для разнообразия.