LINUX.ORG.RU

перепутаны байты в ip


0

0

Есть програмка которая обрабатывает netflow поток, работает через 
libpcap. Но есть такая проблема,  байты в IP адресе перепутаны. 

Код такой:

nflw.h:

/* NetFlow Version 5 Record Format */
struct NFv5R {
        uint32_t srcaddr;       /* Source IP address */
        uint32_t dstaddr;       /* Destination IP address */
        uint32_t nexthop;       /* IP address of the next hop router */
....

main.cpp:

...
                packet = pcap_next(handle,&header);

                nf5h_pos = ETH_H + IP_H + TCP_H;
                nf5r_pos = nf5h_pos + sizeof(struct NFv5H);

                // 2ка стоит для проверки, а так оно в цикле будет
                int r_offset = (sizeof(NFv5H)+sizeof(NFv5R))*2 + sizeof(NFv5H);
                nf5r = (struct NFv5R *) (packet + r_offset);

                in_addr iadr;
                iadr.s_addr = ntohl(nf5r->srcaddr);
                printf("Src addr = %s\n",inet_ntoa(iadr));
                iadr.s_addr = ntohl(nf5r->dstaddr);
                printf("Dst addr = %s\n",inet_ntoa(iadr));
...

Выводится так:

Src addr = 141.213.212.153
Dst addr = 1.0.33.33

У src явно должно быть так:

213.141.212.153

а вот dst вообще непонятно что такое..

Заранее спасибо!!!
★★★★★

Явно какое-то поле в пакете пропустил, курни RFC. Я когда такое же для 9-й версии писал, в неверном порядке поля декодировал и получал тоже странные IP-адреса.

Oceanborn
()

Не надо конвертить в литтл.
 
The  inet_ntoa()  function converts the Internet host address in, given
       in NETWORK BYTE ORDER, to a string  in  IPv4  dotted-decimal  notation.
       The  string  is returned in a statically allocated buffer, which subse‐
       quent calls will overwrite.

anonymous
()
Ответ на: комментарий от smalcom

main.cpp: In member function 'void got_packet(pcap_t*)':
main.cpp:79: ошибка: запрошено преобразование от 'uint32_t' к нескалярному типу 'in_addr'

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

Разобрался :) Просто ступил, надо было считать udp заголовок, а я считал tcp.

 Кстати вопрос, а в netflow пакетет, заголовок только один раз встречается?

cyclon ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.