예제 #1
0
파일: print-radius.c 프로젝트: biot/tcpdump
void
radius_print(netdissect_options *ndo,
             const u_char *dat, u_int length)
{
   const struct radius_hdr *rad;
   u_int len, auth_idx;

   ndo->ndo_protocol = "radius";
   ND_TCHECK_LEN(dat, MIN_RADIUS_LEN);
   rad = (const struct radius_hdr *)dat;
   len = EXTRACT_BE_U_2(rad->len);

   if (len < MIN_RADIUS_LEN)
   {
	  nd_print_trunc(ndo);
	  return;
   }

   if (len > length)
	  len = length;

   if (ndo->ndo_vflag < 1) {
       ND_PRINT("RADIUS, %s (%u), id: 0x%02x length: %u",
              tok2str(radius_command_values,"Unknown Command",EXTRACT_U_1(rad->code)),
              EXTRACT_U_1(rad->code),
              EXTRACT_U_1(rad->id),
              len);
       return;
   }
   else {
       ND_PRINT("RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ",
              len,
              tok2str(radius_command_values,"Unknown Command",EXTRACT_U_1(rad->code)),
              EXTRACT_U_1(rad->code),
              EXTRACT_U_1(rad->id));

       for(auth_idx=0; auth_idx < 16; auth_idx++)
            ND_PRINT("%02x", rad->auth[auth_idx]);
   }

   if (len > MIN_RADIUS_LEN)
      radius_attrs_print(ndo, dat + MIN_RADIUS_LEN, len - MIN_RADIUS_LEN);
   return;

trunc:
   nd_print_trunc(ndo);
}
예제 #2
0
void
radius_print(netdissect_options *ndo,
             const u_char *dat, u_int length)
{
   register const struct radius_hdr *rad;
   u_int len, auth_idx;

   ND_TCHECK2(*dat, MIN_RADIUS_LEN);
   rad = (struct radius_hdr *)dat;
   len = EXTRACT_16BITS(&rad->len);

   if (len < MIN_RADIUS_LEN)
   {
	  ND_PRINT((ndo, "%s", tstr));
	  return;
   }

   if (len > length)
	  len = length;

   if (ndo->ndo_vflag < 1) {
       ND_PRINT((ndo, "RADIUS, %s (%u), id: 0x%02x length: %u",
              tok2str(radius_command_values,"Unknown Command",rad->code),
              rad->code,
              rad->id,
              len));
       return;
   }
   else {
       ND_PRINT((ndo, "RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ",
              len,
              tok2str(radius_command_values,"Unknown Command",rad->code),
              rad->code,
              rad->id));

       for(auth_idx=0; auth_idx < 16; auth_idx++)
            ND_PRINT((ndo, "%02x", rad->auth[auth_idx]));
   }

   if (len > MIN_RADIUS_LEN)
      radius_attrs_print(ndo, dat + MIN_RADIUS_LEN, len - MIN_RADIUS_LEN);
   return;

trunc:
   ND_PRINT((ndo, "%s", tstr));
}
예제 #3
0
char *
radius_print(const u_char *dat, u_int length)
{
   register const struct radius_hdr *rad;
   u_int len, auth_idx;

   TCHECK2(*dat, MIN_RADIUS_LEN);
   rad = (struct radius_hdr *)dat;
   len = EXTRACT_16BITS(&rad->len);

   if (len < MIN_RADIUS_LEN)
   {
	  sprintf(&ArgusBuf[strlen(ArgusBuf)]," [|radius]");
	  return ArgusBuf;
   }

   if (len > length)
	  len = length;

   if (ArgusParser->vflag < 1) {
       sprintf(&ArgusBuf[strlen(ArgusBuf)],"RADIUS, %s (%u), id: 0x%02x length: %u",
              tok2str(radius_command_values,"Unknown Command",rad->code),
              rad->code,
              rad->id,
              len);
       return ArgusBuf;
   }
   else {
       sprintf(&ArgusBuf[strlen(ArgusBuf)],"RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ",
              len,
              tok2str(radius_command_values,"Unknown Command",rad->code),
              rad->code,
              rad->id);

       for(auth_idx=0; auth_idx < 16; auth_idx++)
            sprintf(&ArgusBuf[strlen(ArgusBuf)],"%02x", rad->auth[auth_idx] );
   }

   if (len > MIN_RADIUS_LEN)
      radius_attrs_print( dat + MIN_RADIUS_LEN, len - MIN_RADIUS_LEN);
   return ArgusBuf;

trunc:
   sprintf(&ArgusBuf[strlen(ArgusBuf)]," [|radius]");
   return ArgusBuf;
}
예제 #4
0
void
radius_print(packetbody_t dat, u_int length)
{
   __capability const struct radius_hdr *rad;
   u_int len, auth_idx;

   PACKET_HAS_SPACE_OR_TRUNC(dat, MIN_RADIUS_LEN);
   rad = (__capability struct radius_hdr *)dat;
   len = EXTRACT_16BITS(&rad->len);

   if (len < MIN_RADIUS_LEN)
   {
	  printf(" [|radius]");
	  return;
   }

   if (len > length)
	  len = length;

   if (vflag < 1) {
       printf("RADIUS, %s (%u), id: 0x%02x length: %u",
              tok2str(radius_command_values,"Unknown Command",rad->code),
              rad->code,
              rad->id,
              len);
       return;
   }
   else {
       printf("RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ",
              len,
              tok2str(radius_command_values,"Unknown Command",rad->code),
              rad->code,
              rad->id);

       for(auth_idx=0; auth_idx < 16; auth_idx++)
            printf("%02x", rad->auth[auth_idx] );
   }

   if (len > MIN_RADIUS_LEN)
      radius_attrs_print( dat + MIN_RADIUS_LEN, len - MIN_RADIUS_LEN);
   return;

trunc:
   printf(" [|radius]");
}