⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 print-radius.c

📁 TCPDUMP的C语言源代码,是在数据链路层的应用
💻 C
📖 第 1 页 / 共 3 页
字号:
                printf( "%02d secs", timeout);             else             {                if ( timeout < 3600 )                   printf( "%02d:%02d min",                          timeout / 60, timeout % 60);                else                   printf( "%02d:%02d:%02d hours",                          timeout / 3600, (timeout % 3600) / 60,                          timeout % 60);             }          break;        case FRM_ATALK_LINK:             if (EXTRACT_32BITS(data) )                printf("%d",EXTRACT_32BITS(data) );             else                printf("Unnumbered" );          break;        case FRM_ATALK_NETWORK:             if (EXTRACT_32BITS(data) )                printf("%d",EXTRACT_32BITS(data) );             else                printf("NAS assigned" );          break;        case TUNNEL_PREFERENCE:            tag = *data;            data++;            if (tag == 0)               printf("Tag (Unused) %d",EXTRACT_24BITS(data) );            else               printf("Tag (%d) %d", tag, EXTRACT_24BITS(data) );          break;        default:             printf("%d",EXTRACT_32BITS( data) );          break;      } /* switch */   } /* if-else */   return;   trunc:     printf(" [|radius]");}/*****************************//* Print an attribute IPv4   *//* address value pointed by  *//* 'data' and 'length' size. *//*****************************//* Returns nothing.          *//*****************************/static voidprint_attr_address(register u_char *data, u_int length, u_short attr_code ){   if (length != 4)   {       printf("ERROR: length %u != 4", length);       return;   }   TCHECK2(data[0],4);   switch(attr_code)   {      case FRM_IPADDR:      case LOG_IPHOST:           if (EXTRACT_32BITS(data) == 0xFFFFFFFF )              printf("User Selected");           else              if (EXTRACT_32BITS(data) == 0xFFFFFFFE )                 printf("NAS Select");              else                 printf("%s",ipaddr_string(data));      break;      default:          printf("%s",ipaddr_string(data) );      break;   }   return;   trunc:     printf(" [|radius]");}/*************************************//* Print an attribute of 'secs since *//* January 1, 1970 00:00 UTC' value  *//* pointed by 'data' and 'length'    *//* size.                             *//*************************************//* Returns nothing.                  *//*************************************/static void print_attr_time(register u_char *data, u_int length, u_short attr_code _U_){   time_t attr_time;   char string[26];   if (length != 4)   {       printf("ERROR: length %u != 4", length);       return;   }   TCHECK2(data[0],4);   attr_time = EXTRACT_32BITS(data);   strlcpy(string, ctime(&attr_time), sizeof(string));   /* Get rid of the newline */   string[24] = '\0';   printf("%.24s", string);   return;   trunc:     printf(" [|radius]");}/***********************************//* Print an attribute of 'strange' *//* data format pointed by 'data'   *//* and 'length' size.              *//***********************************//* Returns nothing.                *//***********************************/static void print_attr_strange(register u_char *data, u_int length, u_short attr_code){   u_short len_data;   switch(attr_code)   {      case ARAP_PASS:           if (length != 16)           {               printf("ERROR: length %u != 16", length);               return;           }           printf("User_challenge (");           TCHECK2(data[0],8);           len_data = 8;           PRINT_HEX(len_data, data);           printf(") User_resp(");           TCHECK2(data[0],8);           len_data = 8;           PRINT_HEX(len_data, data);           printf(")");        break;      case ARAP_FEATURES:           if (length != 14)           {               printf("ERROR: length %u != 14", length);               return;           }           TCHECK2(data[0],1);           if (*data)              printf("User can change password");           else              printf("User cannot change password");           data++;           TCHECK2(data[0],1);           printf(", Min password length: %d",*data);           data++;           printf(", created at: ");           TCHECK2(data[0],4);           len_data = 4;           PRINT_HEX(len_data, data);           printf(", expires in: ");           TCHECK2(data[0],4);           len_data = 4;           PRINT_HEX(len_data, data);           printf(", Current Time: ");           TCHECK2(data[0],4);           len_data = 4;           PRINT_HEX(len_data, data);        break;      case ARAP_CHALLENGE_RESP:           if (length < 8)           {               printf("ERROR: length %u != 8", length);               return;           }           TCHECK2(data[0],8);           len_data = 8;           PRINT_HEX(len_data, data);        break;   }   return;   trunc:     printf(" [|radius]");}static voidradius_attrs_print(register const u_char *attr, u_int length){   register const struct radius_attr *rad_attr = (struct radius_attr *)attr;   const char *attr_string;   while (length > 0)   {     if (length < 2)        goto trunc;     TCHECK(*rad_attr);          if (rad_attr->type > 0 && rad_attr->type < TAM_SIZE(attr_type))	attr_string = attr_type[rad_attr->type].name;     else	attr_string = "Unknown";     if (rad_attr->len < 2)     {	printf("\n\t  %s Attribute (%u), length: %u (bogus, must be >= 2)",               attr_string,               rad_attr->type,               rad_attr->len);	return;     }     if (rad_attr->len > length)     {	printf("\n\t  %s Attribute (%u), length: %u (bogus, goes past end of packet)",               attr_string,               rad_attr->type,               rad_attr->len);        return;     }     printf("\n\t  %s Attribute (%u), length: %u, Value: ",            attr_string,            rad_attr->type,            rad_attr->len);     if (rad_attr->type < TAM_SIZE(attr_type))     {         if (rad_attr->len > 2)         {             if ( attr_type[rad_attr->type].print_func )                 (*attr_type[rad_attr->type].print_func)(                     ((u_char *)(rad_attr+1)),                     rad_attr->len - 2, rad_attr->type);         }     }     /* do we also want to see a hex dump ? */     if (vflag> 1)         print_unknown_data((u_char *)rad_attr+2,"\n\t    ",(rad_attr->len)-2);     length-=(rad_attr->len);     rad_attr = (struct radius_attr *)( ((char *)(rad_attr))+rad_attr->len);   }   return;trunc:   printf(" [|radius]");}voidradius_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)   {	  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]");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -