From: Ian Jackson Date: Thu, 21 Jul 2011 19:02:39 +0000 (+0100) Subject: WIP dns packet en/decoding test program X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=c2ed2c844c48551c9a852f86b65ba8678ed93486;p=secnet.git WIP dns packet en/decoding test program --- diff --git a/dns-bitenc-test.c b/dns-bitenc-test.c new file mode 100644 index 0000000..5d09cfb --- /dev/null +++ b/dns-bitenc-test.c @@ -0,0 +1,65 @@ +#define NMYLABELS 3 +static const char *const mylabels[NMYLABELS]={"z","example","com"}; +static const char prefix[]="PREFIX "; +static const char suffix[]=" SUFFIX"; +static uint8_t packet[100]; + +static struct dnsbitenc enc; + +int main(int argc, const char **argv) { + const char **argv_save= + memcpy(packet+sizeof(packet)-sizeof(suffix), suffix, sizeof(suffix)); + dnsbitenc_start(&enc, packet+sizeof(prefix), + sizeof(packet)-sizeof(prefix)-sizeof(suffix)); + for (;;) { + const char *arg = *++argv; + if (!strcmp(arg,"b")) { + uint32_t val=strtoul(*++argv,0,0); + int bits=atoi(*++argv); + dnsbitenc_addbits(&enc,val,bits); + } else if (!strcmp(arg,"w")) { + uint32_t val=strtoul(*++argv,0,0); + dnsbitenc_addu32(&enc,val); + } else if (!strcmp(arg,"r")) { + const char *rest=*++argv; + int l=strlen(rest); + int nofit=dnsbitenc_restbytes(&enc,rest,l); + printf("FIT %.*s|%.*s\n",l-nofit,rest,nofit,rest+l-nofit); + break; + } else { + abort(); + } + } + const uint8_t *encoded=dnsbitenc_getresult(&enc); + const uint8_t *pktbegin=encoded-sizeof(prefix); + memcpy(pktbegin,prefix,sizeof(prefix)); + + const uint8_t *pr; + for (pr=pktbegin; pr