📄 print-radius.c
字号:
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 + -