u_int newlen;
int maxfamily = 0;
int maxsubtype = 0;
-
+
if ( (!hdr) || (!pkt) )
return;
if (hdr->caplen != hdr->len)
- fprintf(stderr, "aimdump: caplen/len mismatch\n");
+ return; //fprintf(stderr, "aimdump: caplen/len mismatch\n");
newlen = hdr->caplen;
if (flap->start != 0x2a)
return; /* ditch non-FLAP packets */
-#if 0
+#if 0
/* TODO: notify user of new connections (SYN) and closed connections (FIN) */
printf("\nTCP options: %s %s %s %s %s %s\n\n",
tcp->fin?"fin":"",
flap->seqnum = ntohs(flap->seqnum);
flap->len = ntohs(flap->len);
- snac = (struct snachdr *)(pkt+6);
-
- snac->family = ntohs(snac->family);
- snac->subtype= ntohs(snac->subtype);
- snac->id = (htons(snac->id & 0x0000ffff)) + (htons(snac->id >>16)<<16);
-
printf("\n--------------------\n");
{
struct in_addr tmpaddr;
flap->channel,
flap->seqnum,
flap->len);
- printf("SNAC:\n");
-
- /* for overrun checking... */
- for (maxfamily=1;snactypes[maxfamily].family; maxfamily++)
- ;
- if (snac->family <= maxfamily)
+ /* jump around flap */
+ pkt += 6;
+ newlen -= 6;
+
+ if (flap->channel != 0x02)
{
- for (maxsubtype=1;snactypes[snac->family].subtypes[maxsubtype].name; maxsubtype++)
- ;
+ printf("\t\tNo SNAC.\n");
}
- maxfamily--;
- maxsubtype--;
-
- printf("\tFamily:\t\t0x%04x (%s)\n",
- snac->family,
- (snac->family > maxfamily)?"Out of Range":snactypes[snac->family].family);
- printf("\tSubtype:\t0x%04x (%s)\n",
- snac->subtype,
- (snac->subtype > maxsubtype)?"Out of Range":snactypes[snac->family].subtypes[snac->subtype].name);
- printf("\tFlags:\t\t0x%02x,0x%02x\tID:\t0x%08lx\n", snac->flags[0], snac->flags[1], snac->id);
-
- /* jump around flap+snac */
- pkt += 16;
- newlen -= 16;
-
- if (snactypes[snac->family].subtypes[snac->subtype].parser)
- (*(snactypes[snac->family].subtypes[snac->subtype].parser))((u_char *)pkt, newlen);
+ else
+ {
+ snac = (struct snachdr *)pkt;
+ snac->family = ntohs(snac->family);
+ snac->subtype= ntohs(snac->subtype);
+ snac->id = (htons(snac->id & 0x0000ffff)) + (htons(snac->id >>16)<<16);
+
+ printf("SNAC:\n");
+
+ /* for overrun checking... */
+ for (maxfamily=1;snactypes[maxfamily].family; maxfamily++)
+ ;
+ if (snac->family <= maxfamily)
+ {
+ for (maxsubtype=1;snactypes[snac->family].subtypes[maxsubtype].name; maxsubtype++)
+ ;
+ }
+ maxfamily--;
+ maxsubtype--;
+
+ printf("\tFamily:\t\t0x%04x (%s)\n",
+ snac->family,
+ (snac->family > maxfamily)?"Out of Range":snactypes[snac->family].family);
+ printf("\tSubtype:\t0x%04x (%s)\n",
+ snac->subtype,
+ (snac->subtype > maxsubtype)?"Out of Range":snactypes[snac->family].subtypes[snac->subtype].name);
+ printf("\tFlags:\t\t0x%02x,0x%02x\tID:\t0x%08lx\n", snac->flags[0], snac->flags[1], snac->id);
+
+ /* jump around snac */
+ pkt += 10;
+ newlen -= 10;
+#if 0
+ if (snactypes[snac->family].subtypes[snac->subtype].parser)
+ (*(snactypes[snac->family].subtypes[snac->subtype].parser))((u_char *)pkt, newlen);
+#endif
+ }
+
printf("\nRAW:\n");
+#if 1
for (i=0;i<newlen;i+=2)
- {
+ {
if (!((i)%16))
printf("\n\t");
printf("%02x%02x ", pkt[i] &0xff, pkt[i+1] & 0xff);
}
printf("\n\n");
-
+#endif
fflush(stdout);
pkt = orig;
}