ref: f4babfe7465912f06241dc26c6f350c2ac7b9b97
dir: /pkt.c/
#include <stdio.h>
#include <stdint.h>
#include <pcap.h>
#include "common.h"
/*
* todo: replace IPROTO with our own
*/
char*
pktTypeToStr(const u_char pkt)
{
switch(pkt)
{
case IPPROTO_UDP:
return "UDP";
case IPPROTO_TCP:
return "TCP";
default:
err(1, "pktTypeToStr(%d): unkown type", pkt);
return NULL;
}
}
int
parsePkt(const u_char *pkt, Pkt *p)
{
p->version = IP4_V(pkt[0]);
p->headerlen = IP4_HL(pkt[0]) * 4;
p->len = get2(pkt + PKT_LEN);
p->ttl = pkt[PKT_TTL];
p->proto = pkt[PKT_PROTO];
p->sum = get2(pkt + PKT_SUM);
p->srcip = get4(pkt + PKT_SRC);
p->dstip = get4(pkt + PKT_DST);
return 1;
}
void
printPkt(Pkt p)
{
printf("ip packet info:\n"
"\tversion: 0x%x\theaderlen: 0x%x\tlen: 0x%x\n",
p.version, p.headerlen, p.len);
printf("\tttl: 0%x (%d)\tproto 0%x (%s)\tsum: 0x%x\n",
p.ttl, p.ttl, p.proto, pktTypeToStr(p.proto), p.sum);
printf("\tsrcip: 0x%x\tdstip: 0x%x\n", p.srcip, p.dstip);
}
Parser pktParser = {
.parse = parsePkt,
.print = printPkt,
};