📄 iwlist.c
字号:
} /* Display min/max timeout availables */ if(range.pmt_flags & IW_POWER_TIMEOUT) { int flags = (range.pmt_flags & ~(IW_POWER_MIN | IW_POWER_MAX)); /* Display if auto or fixed */ if(range.pmt_flags & IW_POWER_MIN) printf("Auto timeout ; "); else printf("Fixed timeout ; "); /* Print the range */ iw_print_pm_value(buffer, range.min_pmt, flags | IW_POWER_MIN); printf("%s\n ", buffer); iw_print_pm_value(buffer, range.max_pmt, flags | IW_POWER_MAX); printf("%s\n ", buffer); }#endif /* WIRELESS_EXT > 9 */ /* Get current Power Management settings */ wrq.u.power.flags = 0; if(iw_get_ext(skfd, ifname, SIOCGIWPOWER, &wrq) >= 0) { int flags = wrq.u.power.flags; /* Is it disabled ? */ if(wrq.u.power.disabled) printf("Current mode:off\n "); else { int pm_mask = 0; /* Let's check the mode */ iw_print_pm_mode(buffer, flags); printf("Current %s", buffer); /* Let's check if nothing (simply on) */ if((flags & IW_POWER_MODE) == IW_POWER_ON) printf("mode:on"); printf("\n "); /* Let's check the value and its type */ if(wrq.u.power.flags & IW_POWER_TYPE) { iw_print_pm_value(buffer, wrq.u.power.value, wrq.u.power.flags); printf("%s", buffer); } /* If we have been returned a MIN value, ask for the MAX */ if(flags & IW_POWER_MIN) pm_mask = IW_POWER_MAX; /* If we have been returned a MAX value, ask for the MIN */ if(flags & IW_POWER_MAX) pm_mask = IW_POWER_MIN; /* If we have something to ask for... */ if(pm_mask) get_pm_value(skfd, ifname, &wrq, pm_mask, buffer);#if WIRELESS_EXT > 9 /* And if we have both a period and a timeout, ask the other */ pm_mask = (range.pm_capa & (~(wrq.u.power.flags) & IW_POWER_TYPE)); if(pm_mask) { int base_mask = pm_mask; flags = get_pm_value(skfd, ifname, &wrq, pm_mask, buffer); pm_mask = 0; /* If we have been returned a MIN value, ask for the MAX */ if(flags & IW_POWER_MIN) pm_mask = IW_POWER_MAX | base_mask; /* If we have been returned a MAX value, ask for the MIN */ if(flags & IW_POWER_MAX) pm_mask = IW_POWER_MIN | base_mask; /* If we have something to ask for... */ if(pm_mask) get_pm_value(skfd, ifname, &wrq, pm_mask, buffer); }#endif /* WIRELESS_EXT > 9 */ } } printf("\n"); } return(0);}/************************** TRANSMIT POWER **************************//*------------------------------------------------------------------*//* * Print the number of available transmit powers for the device */static intprint_txpower_info(int skfd, char * ifname, char * args[], /* Command line args */ int count) /* Args count */{ struct iwreq wrq; struct iw_range range; int dbm; int mwatt; int k; /* Avoid "Unused parameter" warning */ args = args; count = count;#if WIRELESS_EXT > 9 /* Extract range info */ if(iw_get_range_info(skfd, ifname, &range) < 0) fprintf(stderr, "%-8.8s no transmit-power information.\n\n", ifname); else { if((range.num_txpower <= 0) || (range.num_txpower > IW_MAX_TXPOWER)) printf("%-8.8s No transmit-powers ? Please update driver...\n\n", ifname); else { printf("%-8.8s %d available transmit-powers :\n", ifname, range.num_txpower); /* Print them all */ for(k = 0; k < range.num_txpower; k++) { if(range.txpower_capa & IW_TXPOW_MWATT) { dbm = iw_mwatt2dbm(range.txpower[k]); mwatt = range.txpower[k]; } else { dbm = range.txpower[k]; mwatt = iw_dbm2mwatt(range.txpower[k]); } printf("\t %d dBm \t(%d mW)\n", dbm, mwatt); } /* Get current Transmit Power */ if(iw_get_ext(skfd, ifname, SIOCGIWTXPOW, &wrq) >= 0) { printf(" Current Tx-Power"); /* Disabled ? */ if(wrq.u.txpower.disabled) printf(":off\n\n"); else { /* Fixed ? */ if(wrq.u.txpower.fixed) printf("="); else printf(":"); if(wrq.u.txpower.flags & IW_TXPOW_MWATT) { dbm = iw_mwatt2dbm(wrq.u.txpower.value); mwatt = wrq.u.txpower.value; } else { dbm = wrq.u.txpower.value; mwatt = iw_dbm2mwatt(wrq.u.txpower.value); } printf("%d dBm \t(%d mW)\n\n", dbm, mwatt); } } } }#endif /* WIRELESS_EXT > 9 */ return(0);}/*********************** RETRY LIMIT/LIFETIME ***********************/#if WIRELESS_EXT > 10/*------------------------------------------------------------------*//* * Print one retry value */static inline intget_retry_value(int skfd, char * ifname, struct iwreq * pwrq, int flags, char * buffer){ /* Get Another retry value */ pwrq->u.retry.flags = flags; if(iw_get_ext(skfd, ifname, SIOCGIWRETRY, pwrq) >= 0) { /* Let's check the value and its type */ if(pwrq->u.retry.flags & IW_RETRY_TYPE) { iw_print_retry_value(buffer, pwrq->u.retry.value, pwrq->u.retry.flags); printf("%s\n ", buffer); } } return(pwrq->u.retry.flags);}/*------------------------------------------------------------------*//* * Print Retry info for each device */static intprint_retry_info(int skfd, char * ifname, char * args[], /* Command line args */ int count) /* Args count */{ struct iwreq wrq; struct iw_range range; char buffer[128]; /* Avoid "Unused parameter" warning */ args = args; count = count; /* Extract range info */ if(iw_get_range_info(skfd, ifname, &range) < 0) fprintf(stderr, "%-8.8s no retry limit/lifetime information.\n\n", ifname); else { printf("%-8.8s ", ifname); /* Display min/max limit availables */ if(range.retry_flags & IW_RETRY_LIMIT) { int flags = (range.retry_flags & ~(IW_RETRY_MIN | IW_RETRY_MAX)); /* Display if auto or fixed */ if(range.retry_flags & IW_RETRY_MIN) printf("Auto limit ; "); else printf("Fixed limit ; "); /* Print the range */ iw_print_retry_value(buffer, range.min_retry, flags | IW_RETRY_MIN); printf("%s\n ", buffer); iw_print_retry_value(buffer, range.max_retry, flags | IW_RETRY_MAX); printf("%s\n ", buffer); } /* Display min/max lifetime availables */ if(range.r_time_flags & IW_RETRY_LIFETIME) { int flags = (range.r_time_flags & ~(IW_RETRY_MIN | IW_RETRY_MAX)); /* Display if auto or fixed */ if(range.r_time_flags & IW_RETRY_MIN) printf("Auto lifetime ; "); else printf("Fixed lifetime ; "); /* Print the range */ iw_print_retry_value(buffer, range.min_r_time, flags | IW_RETRY_MIN); printf("%s\n ", buffer); iw_print_retry_value(buffer, range.max_r_time, flags | IW_RETRY_MAX); printf("%s\n ", buffer); } /* Get current retry settings */ wrq.u.retry.flags = 0; if(iw_get_ext(skfd, ifname, SIOCGIWRETRY, &wrq) >= 0) { int flags = wrq.u.retry.flags; /* Is it disabled ? */ if(wrq.u.retry.disabled) printf("Current mode:off\n "); else { int retry_mask = 0; /* Let's check the mode */ printf("Current mode:on\n "); /* Let's check the value and its type */ if(wrq.u.retry.flags & IW_RETRY_TYPE) { iw_print_retry_value(buffer, wrq.u.retry.value, wrq.u.retry.flags); printf("%s", buffer); } /* If we have been returned a MIN value, ask for the MAX */ if(flags & IW_RETRY_MIN) retry_mask = IW_RETRY_MAX; /* If we have been returned a MAX value, ask for the MIN */ if(flags & IW_RETRY_MAX) retry_mask = IW_RETRY_MIN; /* If we have something to ask for... */ if(retry_mask) get_retry_value(skfd, ifname, &wrq, retry_mask, buffer); /* And if we have both a period and a timeout, ask the other */ retry_mask = (range.retry_capa & (~(wrq.u.retry.flags) & IW_RETRY_TYPE)); if(retry_mask) { int base_mask = retry_mask; flags = get_retry_value(skfd, ifname, &wrq, retry_mask, buffer); retry_mask = 0; /* If we have been returned a MIN value, ask for the MAX */ if(flags & IW_RETRY_MIN) retry_mask = IW_RETRY_MAX | base_mask; /* If we have been returned a MAX value, ask for the MIN */ if(flags & IW_RETRY_MAX) retry_mask = IW_RETRY_MIN | base_mask; /* If we have something to ask for... */ if(retry_mask) get_retry_value(skfd, ifname, &wrq, retry_mask, buffer); } } } printf("\n"); } return(0);}#endif /* WIRELESS_EXT > 10 *//***************************** SCANNING *****************************//* * This one behave quite differently from the others */#if WIRELESS_EXT > 13/*------------------------------------------------------------------*//* * Print one element from the scanning results */static inline intprint_scanning_token(struct iw_event * event, /* Extracted token */ int ap_num, /* AP number */ struct iw_range * iwrange, /* Range info */ int has_range){ char buffer[128]; /* Temporary buffer */ /* Now, let's decode the event */ switch(event->cmd) { case SIOCGIWAP: printf(" Cell %02d - Address: %s\n", ap_num, iw_pr_ether(buffer, event->u.ap_addr.sa_data)); ap_num++; break; case SIOCGIWNWID: if(event->u.nwid.disabled) printf(" NWID:off/any\n"); else printf(" NWID:%X\n", event->u.nwid.value); break; case SIOCGIWFREQ: { double freq; /* Frequency/channel */ freq = iw_freq2float(&(event->u.freq)); iw_print_freq(buffer, freq); printf(" %s\n", buffer); } break; case SIOCGIWMODE: printf(" Mode:%s\n", iw_operation_mode[event->u.mode]); break; case SIOCGIWNAME: printf(" Protocol:%-1.16s\n", event->u.name); break; case SIOCGIWESSID: { char essid[IW_ESSID_MAX_SIZE+1]; if((event->u.essid.pointer) && (event->u.essid.length)) memcpy(essid, event->u.essid.pointer, event->u.essid.length); essid[event->u.essid.length] = '\0'; if(event->u.essid.flags) { /* Does it have an ESSID index ? */ if((event->u.essid.flags & IW_ENCODE_INDEX) > 1) printf(" ESSID:\"%s\" [%d]\n", essid, (event->u.essid.flags & IW_ENCODE_INDEX)); else printf(" ESSID:\"%s\"\n", essid); } else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -