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

📄 iwconfig.c

📁 This package contains the Wireless tools, used to manipulate the Wireless Extensions. The Wireless
💻 C
📖 第 1 页 / 共 3 页
字号:
/* *	Wireless Tools * *		Jean II - HPLB 97->99 - HPL 99->04 * * Main code for "iwconfig". This is the generic tool for most * manipulations... * You need to link this code against "iwlib.c" and "-lm". * * This file is released under the GPL license. *     Copyright (c) 1997-2004 Jean Tourrilhes <jt@hpl.hp.com> */#include "iwlib.h"		/* Header *//************************* MISC SUBROUTINES **************************//*------------------------------------------------------------------*//* * Print usage string */static voidiw_usage(void){  fprintf(stderr,	"Usage: iwconfig interface [essid {NN|on|off}]\n"	"                          [nwid {NN|on|off}]\n"	"                          [mode {managed|ad-hoc|...}\n"	"                          [freq N.NNNN[k|M|G]]\n"	"                          [channel N]\n"	"                          [ap {N|off|auto}]\n"	"                          [sens N]\n"	"                          [nick N]\n"	"                          [rate {N|auto|fixed}]\n"	"                          [rts {N|auto|fixed|off}]\n"	"                          [frag {N|auto|fixed|off}]\n"	"                          [enc {NNNN-NNNN|off}]\n"	"                          [power {period N|timeout N}]\n"	"                          [retry {limit N|lifetime N}]\n"	"                          [txpower N {mW|dBm}]\n"	"                          [commit]\n"	"       Check man pages for more details.\n\n"  );}/************************* DISPLAY ROUTINES **************************//*------------------------------------------------------------------*//* * Get wireless informations & config from the device driver * We will call all the classical wireless ioctl on the driver through * the socket to know what is supported and to get the settings... */static intget_info(int			skfd,	 char *			ifname,	 struct wireless_info *	info){  struct iwreq		wrq;  memset((char *) info, 0, sizeof(struct wireless_info));  /* Get basic information */  if(iw_get_basic_config(skfd, ifname, &(info->b)) < 0)    {      /* If no wireless name : no wireless extensions */      /* But let's check if the interface exists at all */      struct ifreq ifr;      strncpy(ifr.ifr_name, ifname, IFNAMSIZ);      if(ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)	return(-ENODEV);      else	return(-ENOTSUP);    }  /* Get ranges */  if(iw_get_range_info(skfd, ifname, &(info->range)) >= 0)    info->has_range = 1;  /* Get sensitivity */  if(iw_get_ext(skfd, ifname, SIOCGIWSENS, &wrq) >= 0)    {      info->has_sens = 1;      memcpy(&(info->sens), &(wrq.u.sens), sizeof(iwparam));    }  /* Get AP address */  if(iw_get_ext(skfd, ifname, SIOCGIWAP, &wrq) >= 0)    {      info->has_ap_addr = 1;      memcpy(&(info->ap_addr), &(wrq.u.ap_addr), sizeof (sockaddr));    }  /* Get NickName */  wrq.u.essid.pointer = (caddr_t) info->nickname;  wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;  wrq.u.essid.flags = 0;  if(iw_get_ext(skfd, ifname, SIOCGIWNICKN, &wrq) >= 0)    if(wrq.u.data.length > 1)      info->has_nickname = 1;  /* Get bit rate */  if(iw_get_ext(skfd, ifname, SIOCGIWRATE, &wrq) >= 0)    {      info->has_bitrate = 1;      memcpy(&(info->bitrate), &(wrq.u.bitrate), sizeof(iwparam));    }  /* Get RTS threshold */  if(iw_get_ext(skfd, ifname, SIOCGIWRTS, &wrq) >= 0)    {      info->has_rts = 1;      memcpy(&(info->rts), &(wrq.u.rts), sizeof(iwparam));    }  /* Get fragmentation threshold */  if(iw_get_ext(skfd, ifname, SIOCGIWFRAG, &wrq) >= 0)    {      info->has_frag = 1;      memcpy(&(info->frag), &(wrq.u.frag), sizeof(iwparam));    }  /* Get Power Management settings */  wrq.u.power.flags = 0;  if(iw_get_ext(skfd, ifname, SIOCGIWPOWER, &wrq) >= 0)    {      info->has_power = 1;      memcpy(&(info->power), &(wrq.u.power), sizeof(iwparam));    }  if((info->has_range) && (info->range.we_version_compiled > 9))    {      /* Get Transmit Power */      if(iw_get_ext(skfd, ifname, SIOCGIWTXPOW, &wrq) >= 0)	{	  info->has_txpower = 1;	  memcpy(&(info->txpower), &(wrq.u.txpower), sizeof(iwparam));	}    }  if((info->has_range) && (info->range.we_version_compiled > 10))    {      /* Get retry limit/lifetime */      if(iw_get_ext(skfd, ifname, SIOCGIWRETRY, &wrq) >= 0)	{	  info->has_retry = 1;	  memcpy(&(info->retry), &(wrq.u.retry), sizeof(iwparam));	}    }  /* Get stats */  if(iw_get_stats(skfd, ifname, &(info->stats),		  &info->range, info->has_range) >= 0)    {      info->has_stats = 1;    }#ifdef DISPLAY_WPA  /* Note : currently disabled to not bloat iwconfig output. Also,   * if does not make total sense to display parameters that we   * don't allow (yet) to configure.   * For now, use iwlist instead... Jean II */  /* Get WPA/802.1x/802.11i security parameters */  if((info->has_range) && (info->range.we_version_compiled > 17))    {      wrq.u.param.flags = IW_AUTH_KEY_MGMT;      if(iw_get_ext(skfd, ifname, SIOCGIWAUTH, &wrq) >= 0)	{	  info->has_auth_key_mgmt = 1;	  info->auth_key_mgmt = wrq.u.param.value;	}      wrq.u.param.flags = IW_AUTH_CIPHER_PAIRWISE;      if(iw_get_ext(skfd, ifname, SIOCGIWAUTH, &wrq) >= 0)	{	  info->has_auth_cipher_pairwise = 1;	  info->auth_cipher_pairwise = wrq.u.param.value;	}      wrq.u.param.flags = IW_AUTH_CIPHER_GROUP;      if(iw_get_ext(skfd, ifname, SIOCGIWAUTH, &wrq) >= 0)	{	  info->has_auth_cipher_group = 1;	  info->auth_cipher_group = wrq.u.param.value;	}    }#endif  return(0);}/*------------------------------------------------------------------*//* * Print on the screen in a neat fashion all the info we have collected * on a device. */static voiddisplay_info(struct wireless_info *	info,	     char *			ifname){  char		buffer[128];	/* Temporary buffer */  /* One token is more of less 5 characters, 14 tokens per line */  int	tokens = 3;	/* For name */  /* Display device name and wireless name (name of the protocol used) */  printf("%-8.16s  %s  ", ifname, info->b.name);  /* Display ESSID (extended network), if any */  if(info->b.has_essid)    {      if(info->b.essid_on)	{	  /* Does it have an ESSID index ? */	  if((info->b.essid_on & IW_ENCODE_INDEX) > 1)	    printf("ESSID:\"%s\" [%d]  ", info->b.essid,		   (info->b.essid_on & IW_ENCODE_INDEX));	  else	    printf("ESSID:\"%s\"  ", info->b.essid);	}      else	printf("ESSID:off/any  ");    }  /* Display NickName (station name), if any */  if(info->has_nickname)    printf("Nickname:\"%s\"", info->nickname);  /* Formatting */  if(info->b.has_essid || info->has_nickname)    {      printf("\n          ");      tokens = 0;    }  /* Display Network ID */  if(info->b.has_nwid)    {      /* Note : should display proper number of digits according to info       * in range structure */      if(info->b.nwid.disabled)	printf("NWID:off/any  ");      else	printf("NWID:%X  ", info->b.nwid.value);      tokens +=2;    }  /* Display the current mode of operation */  if(info->b.has_mode)    {      printf("Mode:%s  ", iw_operation_mode[info->b.mode]);      tokens +=3;    }  /* Display frequency / channel */  if(info->b.has_freq)    {      double		freq = info->b.freq;	/* Frequency/channel */      int		channel = -1;		/* Converted to channel */      /* Some drivers insist of returning channel instead of frequency.       * This fixes them up. Note that, driver should still return       * frequency, because other tools depend on it. */      if(info->has_range && (freq < KILO))	channel = iw_channel_to_freq((int) freq, &freq, &info->range);      /* Display */      iw_print_freq(buffer, sizeof(buffer), freq, -1, info->b.freq_flags);      printf("%s  ", buffer);      tokens +=4;    }  /* Display the address of the current Access Point */  if(info->has_ap_addr)    {      /* A bit of clever formatting */      if(tokens > 8)	{	  printf("\n          ");	  tokens = 0;	}      tokens +=6;      /* Oups ! No Access Point in Ad-Hoc mode */      if((info->b.has_mode) && (info->b.mode == IW_MODE_ADHOC))	printf("Cell:");      else	printf("Access Point:");      printf(" %s   ", iw_sawap_ntop(&info->ap_addr, buffer));    }  /* Display the currently used/set bit-rate */  if(info->has_bitrate)    {      /* A bit of clever formatting */      if(tokens > 11)	{	  printf("\n          ");	  tokens = 0;	}      tokens +=3;      /* Display it */      iw_print_bitrate(buffer, sizeof(buffer), info->bitrate.value);      printf("Bit Rate%c%s   ", (info->bitrate.fixed ? '=' : ':'), buffer);    }  /* Display the Transmit Power */  if(info->has_txpower)    {      /* A bit of clever formatting */      if(tokens > 11)	{	  printf("\n          ");	  tokens = 0;	}      tokens +=3;      /* Display it */      iw_print_txpower(buffer, sizeof(buffer), &info->txpower);      printf("Tx-Power%c%s   ", (info->txpower.fixed ? '=' : ':'), buffer);    }  /* Display sensitivity */  if(info->has_sens)    {      /* A bit of clever formatting */      if(tokens > 10)	{	  printf("\n          ");	  tokens = 0;	}      tokens +=4;      /* Fixed ? */      if(info->sens.fixed)	printf("Sensitivity=");      else	printf("Sensitivity:");      if(info->has_range)	/* Display in dBm ? */	if(info->sens.value < 0)	  printf("%d dBm  ", info->sens.value);	else	  printf("%d/%d  ", info->sens.value, info->range.sensitivity);      else	printf("%d  ", info->sens.value);    }  printf("\n          ");  tokens = 0;  /* Display retry limit/lifetime information */  if(info->has_retry)    {       printf("Retry");      /* Disabled ? */      if(info->retry.disabled)	printf(":off");      else	{	  /* Let's check the value and its type */	  if(info->retry.flags & IW_RETRY_TYPE)	    {	      iw_print_retry_value(buffer, sizeof(buffer),				   info->retry.value, info->retry.flags);	      printf("%s", buffer);	    }	  /* Let's check if nothing (simply on) */	  if(info->retry.flags == IW_RETRY_ON)	    printf(":on"); 	}      printf("   ");      tokens += 5;	/* Between 3 and 5, depend on flags */    }  /* Display the RTS threshold */  if(info->has_rts)    {      /* Disabled ? */      if(info->rts.disabled)	printf("RTS thr:off   ");      else	{	  /* Fixed ? */	  if(info->rts.fixed)	    printf("RTS thr=");	  else	    printf("RTS thr:");	  printf("%d B   ", info->rts.value);	}      tokens += 3;    }  /* Display the fragmentation threshold */  if(info->has_frag)    {      /* A bit of clever formatting */      if(tokens > 10)	{	  printf("\n          ");	  tokens = 0;	}      tokens +=4;      /* Disabled ? */      if(info->frag.disabled)	printf("Fragment thr:off");      else	{	  /* Fixed ? */	  if(info->frag.fixed)	    printf("Fragment thr=");	  else	    printf("Fragment thr:");	  printf("%d B   ", info->frag.value);	}    }  /* Formating */  if(tokens > 0)    printf("\n          ");  /* Display encryption information */  /* Note : we display only the "current" key, use iwlist to list all keys */  if(info->b.has_key)    {      printf("Encryption key:");      if((info->b.key_flags & IW_ENCODE_DISABLED) || (info->b.key_size == 0))	printf("off");      else	{	  /* Display the key */	  iw_print_key(buffer, sizeof(buffer),		       info->b.key, info->b.key_size, info->b.key_flags);	  printf("%s", buffer);	  /* Other info... */	  if((info->b.key_flags & IW_ENCODE_INDEX) > 1)	    printf(" [%d]", info->b.key_flags & IW_ENCODE_INDEX);	  if(info->b.key_flags & IW_ENCODE_RESTRICTED)	    printf("   Security mode:restricted");	  if(info->b.key_flags & IW_ENCODE_OPEN)	    printf("   Security mode:open"); 	}      printf("\n          ");    }#ifdef DISPLAY_WPA  /* Display WPA/802.1x/802.11i security parameters */  if(info->has_auth_key_mgmt || info->has_auth_cipher_pairwise ||     info->has_auth_cipher_group)    {      printf("Auth params:");      if(info->has_auth_key_mgmt)	printf(" key_mgmt:0x%X ", info->auth_key_mgmt);      if(info->has_auth_cipher_pairwise)	printf(" cipher_pairwise:0x%X ", info->auth_cipher_pairwise);      if(info->has_auth_cipher_group)	printf(" cipher_group:0x%X ", info->auth_cipher_group);      printf("\n          ");    }#endif  /* Display Power Management information */  /* Note : we display only one parameter, period or timeout. If a device   * (such as HiperLan) has both, the user need to use iwlist... */  if(info->has_power)	/* I hope the device has power ;-) */    {       printf("Power Management");      /* Disabled ? */      if(info->power.disabled)	printf(":off");      else	{	  /* Let's check the value and its type */	  if(info->power.flags & IW_POWER_TYPE)	    {	      iw_print_pm_value(buffer, sizeof(buffer),				info->power.value, info->power.flags);	      printf("%s  ", buffer);	    }	  /* Let's check the mode */	  iw_print_pm_mode(buffer, sizeof(buffer), info->power.flags);	  printf("%s", buffer);

⌨️ 快捷键说明

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