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

📄 iwlist.c

📁 wireless tools是linux下的一套对无线网卡进行配置的工具
💻 C
📖 第 1 页 / 共 3 页
字号:
		pm_mask = IW_POWER_MIN;	      /* If we have something to ask for... */	      if(pm_mask)		get_pm_value(skfd, ifname, &wrq, pm_mask, buffer);	      /* 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);		}	    }	}      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;  /* Extract range info */  if((iw_get_range_info(skfd, ifname, &range) < 0) ||     (range.we_version_compiled < 10))      fprintf(stderr, "%-8.16s  no transmit-power information.\n\n",		      ifname);  else    {      if((range.num_txpower <= 0) || (range.num_txpower > IW_MAX_TXPOWER))	printf("%-8.16s  unknown transmit-power information.\n\n", ifname);      else	{	  printf("%-8.16s  %d available transmit-powers :\n",		 ifname, range.num_txpower);	  /* Print them all */	  for(k = 0; k < range.num_txpower; k++)	    {	      /* Check for relative values */	      if(range.txpower_capa & IW_TXPOW_RELATIVE)		{		  printf("\t  %d (no units)\n", range.txpower[k]);		}	      else		{		  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(":");	      /* Check for relative values */	      if(wrq.u.txpower.flags & IW_TXPOW_RELATIVE)		{		  /* I just hate relative value, because they are		   * driver specific, so not very meaningfull to apps.		   * But, we have to support that, because		   * this is the way hardware is... */		  printf("\t  %d (no units)\n", wrq.u.txpower.value);		}	      else		{		  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);		}	    }	}    }  return(0);}/*********************** RETRY LIMIT/LIFETIME ***********************//*------------------------------------------------------------------*//* * Print one retry value */static inline intget_retry_value(int		skfd,		char *		ifname,		struct iwreq *	pwrq,		int		flags,		char *		buffer,		int		buflen){  /* 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, buflen,			       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) ||     (range.we_version_compiled < 11))    fprintf(stderr, "%-8.16s  no retry limit/lifetime information.\n\n",	    ifname);  else    {      printf("%-8.16s  ", 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, sizeof(buffer),			       range.min_retry, flags | IW_RETRY_MIN);	  printf("%s\n                           ", buffer);	  iw_print_retry_value(buffer, sizeof(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, sizeof(buffer),			       range.min_r_time, flags | IW_RETRY_MIN);	  printf("%s\n                           ", buffer);	  iw_print_retry_value(buffer, sizeof(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, sizeof(buffer),				       wrq.u.retry.value, wrq.u.retry.flags);		  printf("%s\n                 ", 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, sizeof(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, sizeof(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, sizeof(buffer));		}	    }	}      printf("\n");    }  return(0);}/***************************** SCANNING *****************************//* * This one behave quite differently from the others * * Note that we don't use the scanning capability of iwlib (functions * iw_process_scan() and iw_scan()). The main reason is that * iw_process_scan() return only a subset of the scan data to the caller, * for example custom elements and bitrates are ommited. Here, we * do the complete job... *//*------------------------------------------------------------------*//* * 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 *	iw_range,	/* 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 */	int		channel = -1;		/* Converted to channel */	freq = iw_freq2float(&(event->u.freq));	/* Convert to channel if possible */	if(has_range)	  channel = iw_freq_to_channel(freq, iw_range);	iw_print_freq(buffer, sizeof(buffer),		      freq, channel, event->u.freq.flags);	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	  printf("                    ESSID:off/any\n");      }      break;    case SIOCGIWENCODE:      {	unsigned char	key[IW_ENCODING_TOKEN_MAX];	if(event->u.data.pointer)	  memcpy(key, event->u.essid.pointer, event->u.data.length);	else	  event->u.data.flags |= IW_ENCODE_NOKEY;	printf("                    Encryption key:");	if(event->u.data.flags & IW_ENCODE_DISABLED)	  printf("off\n");	else	  {	    /* Display the key */	    iw_print_key(buffer, sizeof(buffer), key, event->u.data.length,			 event->u.data.flags);	    printf("%s", buffer);	    /* Other info... */	    if((event->u.data.flags & IW_ENCODE_INDEX) > 1)	      printf(" [%d]", event->u.data.flags & IW_ENCODE_INDEX);	    if(event->u.data.flags & IW_ENCODE_RESTRICTED)	      printf("   Security mode:restricted");	    if(event->u.data.flags & IW_ENCODE_OPEN)	      printf("   Security mode:open");	    printf("\n");	  }      }      break;    case SIOCGIWRATE:      iw_print_bitrate(buffer, sizeof(buffer), event->u.bitrate.value);      printf("                    Bit Rate:%s\n", buffer);      break;    case IWEVQUAL:      {	iw_print_stats(buffer, sizeof(buffer),		       &event->u.qual, iw_range, has_range);	printf("                    %s\n", buffer);	break;      }    case IWEVCUSTOM:      {	char custom[IW_CUSTOM_MAX+1];	if((event->u.data.pointer) && (event->u.data.length))	  memcpy(custom, event->u.data.pointer, event->u.data.length);	custom[event->u.data.length] = '\0';	printf("                    Extra:%s\n", custom);      }      break;    default:      printf("                    (Unknown Wireless Token 0x%04X)\n",	     event->cmd);   }	/* switch(event->cmd) */  /* May have changed */  return(ap_num);}/*------------------------------------------------------------------*//* * Perform a scanning on one device */static intprint_scanning_info(int		skfd,		    char *	ifname,		    char *	args[],		/* Command line args */		    int		count)		/* Args count */{  struct iwreq		wrq;  unsigned char *	buffer = NULL;		/* Results */  int			buflen = IW_SCAN_MAX_DATA; /* Min for compat WE<17 */  struct iw_range	range;

⌨️ 快捷键说明

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