Как прослушать пакет PPP с помощью libpcap? - PullRequest
0 голосов
/ 22 ноября 2010

Я могу захватывать пакеты с интерфейса eth0 и анализировать IP-пакеты следующим образом

/* IP header */
struct sniff_ip {
    u_char  ip_vhl;                 /* version << 4 | header length >> 2 */
    u_char  ip_tos;                 /* type of service */
    u_short ip_len;                 /* total length */
    u_short ip_id;                  /* identification */
    u_short ip_off;                 /* fragment offset field */
    #define IP_RF 0x8000            /* reserved fragment flag */
    #define IP_DF 0x4000            /* dont fragment flag */
    #define IP_MF 0x2000            /* more fragments flag */
    #define IP_OFFMASK 0x1fff       /* mask for fragmenting bits */
    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 */
};

Итак, если нужно захватывать пакеты из интерфейса PPP, как определить структуру заголовка?

Я просто заметил, что длина заголовка в данном случае составляет 32 байта.

1 Ответ

0 голосов
/ 20 октября 2012

Если при захвате на устройстве PPP с помощью libpcap подпрограмма pcap_datalink() возвращает DLT_PPP, тогда вы определяете заголовок в порядке, указанном записью для LINKTYPE_PPP / DLT_PPP в Страница типов заголовков канального уровня tcpdump.org :

PPP, согласно RFC 1661 и RFC 1662 ; если первые 2 байта равны 0xff и 0x03, это PPP в кадре, подобном HDLC, с заголовком PPP, следующим за этими двумя байтами, в противном случае это PPP без кадрирования, и пакет начинается с заголовка PPP.

...