packet32 -- 打印packet32捕获的包

void PrintPackets(LPPACKET lpPacket)
{

    ULONG    i, j, ulLines, ulen, ulBytesReceived;
    char    *pChar, *pLine, *base;
    char    *buf;
    u_int off=0;
    u_int tlen,tlen1;
    struct bpf_hdr *hdr;

    ulBytesReceived = lpPacket->ulBytesReceived;


    buf = lpPacket->Buffer;

    off=0;

    while(off<ulBytesReceived){    
        if(_kbhit())return;
        hdr=(struct bpf_hdr *)(buf+off);
        tlen1=hdr->bh_datalen;
        tlen=hdr->bh_caplen;
        printf("Packet length, captured portion: %ld, %ld
", tlen1, tlen);
        off+=hdr->bh_hdrlen;

        ulLines = (tlen + 15) / 16;

        pChar =(char*)(buf+off);
        base=pChar;
        off=Packet_WORDALIGN(off+tlen);

        //if(ulLines >10) ulLines = 10;

        for ( i=0; i<ulLines; i++ )
        {

            pLine =pChar;

            printf( "%08lx : ", pChar-base );

            ulen=tlen;
            ulen = ( ulen > 16 ) ? 16 : ulen;
            tlen -= ulen;

            for ( j=0; j<ulen; j++ )
                printf( "%02x ", *(BYTE *)pChar++ );

            if ( ulen < 16 )
                printf( "%*s", (16-ulen)*3, " " );

            pChar = pLine;

            for ( j=0; j<ulen; j++, pChar++ )
                printf( "%c", isprint( (unsigned char)*pChar ) ? *pChar : '.' );

            printf( "
" );
        } 

        printf( "
" );
    }
} 
原文地址:https://www.cnblogs.com/hei-hei-hei/p/7428869.html