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

📄 kwifimanager_kcmodule.cpp

📁 Linux/Unix下无限网卡配置和管理程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
      /* ---------- Set network ID ---------- */      if ((!strcasecmp (args[i], "nwid")) || (!strcasecmp (args[i], "domain")))	{	  i++;	  if (i >= count)	    iw_usage ();	  if ((!strcasecmp (args[i], "off")) || (!strcasecmp (args[i], "any")))	    wrq.u.nwid.disabled = 1;	  else if (!strcasecmp (args[i], "on"))	    {	      /* Get old nwid */	      if (ioctl (skfd, SIOCGIWNWID, &wrq) < 0)		{		  fprintf (stderr, "SIOCGIWNWID: %s\n", strerror (errno));		  return (-1);		}	      strncpy (wrq.ifr_name, ifname, IFNAMSIZ);	      wrq.u.nwid.disabled = 0;	    }	  else if (sscanf (args[i], "%lX", (unsigned long *) &(wrq.u.nwid.value)) != 1)	    iw_usage ();	  else	    wrq.u.nwid.disabled = 0;	  wrq.u.nwid.fixed = 1;	  if (ioctl (skfd, SIOCSIWNWID, &wrq) < 0)	    {	      fprintf (stderr, "SIOCSIWNWID: %s\n", strerror (errno));	      return (-1);	    }	  continue;	}      /* ---------- Set frequency / channel ---------- */      if ((!strncmp (args[i], "freq", 4)) || (!strcmp (args[i], "channel")))	{	  double	    freq;	  if (++i >= count)	    iw_usage ();	  if (sscanf (args[i], "%lg", &(freq)) != 1)	    iw_usage ();	  if (index (args[i], 'G'))	    freq *= GIGA;	  if (index (args[i], 'M'))	    freq *= MEGA;	  if (index (args[i], 'k'))	    freq *= KILO;	  iw_float2freq (freq, &(wrq.u.freq));	  if (ioctl (skfd, SIOCSIWFREQ, &wrq) < 0)	    {	      fprintf (stderr, "SIOCSIWFREQ: %s\n", strerror (errno));	      return (-1);	    }	  continue;	}      /* ---------- Set sensitivity ---------- */      if (!strncmp (args[i], "sens", 4))	{	  if (++i >= count)	    iw_usage ();	  if (sscanf (args[i], "%d", &(wrq.u.sens.value)) != 1)	    iw_usage ();	  if (ioctl (skfd, SIOCSIWSENS, &wrq) < 0)	    {	      fprintf (stderr, "SIOCSIWSENS: %s\n", strerror (errno));	      return (-1);	    }	  continue;	}      /* ---------- Set encryption stuff ---------- */      if ((!strncmp (args[i], "enc", 3)) || (!strcmp (args[i], "key")))	{	  char	    key[IW_ENCODING_TOKEN_MAX];	  if (++i >= count)	    iw_usage ();	  if (!strcasecmp (args[i], "on"))	    {	      /* Get old encryption information */	      wrq.u.data.pointer = (caddr_t) key;	      wrq.u.data.length = 0;	      wrq.u.data.flags = 0;	      if (ioctl (skfd, SIOCGIWENCODE, &wrq) < 0)		{		  fprintf (stderr, "SIOCGIWENCODE: %s\n", strerror (errno));		  return (-1);		}	      strncpy (wrq.ifr_name, ifname, IFNAMSIZ);	      wrq.u.data.flags &= ~IW_ENCODE_DISABLED;	/* Enable */	    }	  else	    {	      char *		buff;	      char *		p;	      int		temp;	      int		k =		0;	      int		gotone =		1;	      wrq.u.data.pointer = (caddr_t) NULL;	      wrq.u.data.flags = 0;	      wrq.u.data.length = 0;	      /* -- Check for the key -- */	      if (!strncmp (args[i], "s:", 2))		{		  /* First case : as an ASCII string */		  wrq.u.data.length = strlen (args[i] + 2);		  if (wrq.u.data.length > IW_ENCODING_TOKEN_MAX)		    wrq.u.data.length = IW_ENCODING_TOKEN_MAX;		  strncpy (key, args[i] + 2, wrq.u.data.length);		  wrq.u.data.pointer = (caddr_t) key;		  ++i;		  gotone = 1;		}	      else		{		  /* Second case : as hexadecimal digits */		  int		    zwischen =		    strlen (args[i]) +		    1;		  (void *) buff = malloc (zwischen);		  if (buff == NULL)		    {		      fprintf (stderr, "Setting key : Malloc failed (string too long ?)\n");		      return (-1);		    }		  strcpy (buff, args[i]);		  p = strtok (buff, "-:;.,");		  while ((p != (char *) NULL) && (k < IW_ENCODING_TOKEN_MAX))		    {		      if (sscanf (p, "%2X", &temp) != 1)			{			  gotone = 0;			  break;			}		      key[k++] = (unsigned char) (temp & 0xFF);		      if (strlen (p) > 2)	/* Token not finished yet */			p += 2;		      else			p = strtok ((char *) NULL, "-:;.,");		    }		  free (buff);		  if (gotone)		    {		      ++i;		      wrq.u.data.length = k;		      wrq.u.data.pointer = (caddr_t) key;		    }		}	      /* -- Check for token index -- */	      if ((i < count) && (sscanf (args[i], "[%d]", &temp) == 1) && (temp > 0) && (temp < IW_ENCODE_INDEX))		{		  wrq.u.encoding.flags |= temp;		  ++i;		  gotone = 1;		}	      /* -- Check the various flags -- */	      if (i < count)		{		  if (!strcasecmp (args[i], "off"))		    wrq.u.data.flags |= IW_ENCODE_DISABLED;		  if (!strcasecmp (args[i], "open"))		    wrq.u.data.flags |= IW_ENCODE_OPEN;		  if (!strncasecmp (args[i], "restricted", 5))		    wrq.u.data.flags |= IW_ENCODE_RESTRICTED;		  if (wrq.u.data.flags & IW_ENCODE_FLAGS)		    {		      ++i;		      gotone = 1;		    }		}	      if (!gotone)		iw_usage ();	      --i;	    }	  if (ioctl (skfd, SIOCSIWENCODE, &wrq) < 0)	    {	      fprintf (stderr, "SIOCSIWENCODE(%d): %s\n", errno, strerror (errno));	      return (-1);	    }	  continue;	}      /* ---------- Set ESSID ---------- */      if (!strcasecmp (args[i], "essid"))	{	  char	    essid[IW_ESSID_MAX_SIZE + 1];	  i++;	  if (i >= count)	    iw_usage ();	  if ((!strcasecmp (args[i], "off")) || (!strcasecmp (args[i], "any")))	    {	      wrq.u.essid.flags = 0;	      essid[0] = '\0';	    }	  else if (!strcasecmp (args[i], "on"))	    {	      /* Get old essid */	      wrq.u.essid.pointer = (caddr_t) essid;	      wrq.u.essid.length = 0;	      wrq.u.essid.flags = 0;	      if (ioctl (skfd, SIOCGIWESSID, &wrq) < 0)		{		  fprintf (stderr, "SIOCGIWESSID: %s\n", strerror (errno));		  return (-1);		}	      strncpy (wrq.ifr_name, ifname, IFNAMSIZ);	      wrq.u.essid.flags = 1;	    }	  else	    /* Check the size of what the user passed us to avoid	     * buffer overflows */	  if (strlen (args[i]) > IW_ESSID_MAX_SIZE)	    {	      fprintf (stderr, "ESSID too long (max %d): ``%s''\n", IW_ESSID_MAX_SIZE, args[i]);	      iw_usage ();	    }	  else	    {	      int		temp;	      wrq.u.essid.flags = 1;	      strcpy (essid, args[i]);	/* Size checked, all clear */	      /* Check for ESSID index */	      if (((i + 1) < count) && (sscanf (args[i + 1], "[%d]", &temp) == 1) && (temp > 0) && (temp < IW_ENCODE_INDEX))		{		  wrq.u.essid.flags = temp;		  ++i;		}	    }	  wrq.u.essid.pointer = (caddr_t) essid;	  wrq.u.essid.length = strlen (essid) + 1;	  if (ioctl (skfd, SIOCSIWESSID, &wrq) < 0)	    {	      fprintf (stderr, "SIOCSIWESSID: %s\n", strerror (errno));	      return (-1);	    }	  continue;	}      /* ---------- Set AP address ---------- *//*      if(!strcasecmp(args[i], "ap"))	{	  if(++i >= count)	    iw_usage();	  if(check_addr_type(skfd, ifname) < 0)	    {	      fprintf(stderr, "%-8.8s  Interface doesn't support MAC & IP addresses\n", ifname);	      return(-1);	    }	  if(in_addr(skfd, ifname, args[i++], &(wrq.u.ap_addr)) < 0)	    iw_usage();	  if(ioctl(skfd, SIOCSIWAP, &wrq) < 0)	    {	      fprintf(stderr, "SIOCSIWAP: %s\n", strerror(errno));	      return(-1);	    }	  continue;	}*/      /* ---------- Set NickName ---------- */      if (!strncmp (args[i], "nick", 4))	{	  i++;	  if (i >= count)	    iw_usage ();	  if (strlen (args[i]) > IW_ESSID_MAX_SIZE)	    {	      fprintf (stderr, "Name too long (max %d) : ``%s''\n", IW_ESSID_MAX_SIZE, args[i]);	      iw_usage ();	    }	  wrq.u.essid.pointer = (caddr_t) args[i];	  wrq.u.essid.length = strlen (args[i]) + 1;	  if (ioctl (skfd, SIOCSIWNICKN, &wrq) < 0)	    {	      fprintf (stderr, "SIOCSIWNICKN: %s\n", strerror (errno));	      return (-1);	    }	  continue;	}      /* ---------- Set Bit-Rate ---------- */      if ((!strncmp (args[i], "bit", 3)) || (!strcmp (args[i], "rate")))	{	  if (++i >= count)	    iw_usage ();	  if (!strcasecmp (args[i], "auto"))	    {	      wrq.u.bitrate.value = -1;	      wrq.u.bitrate.fixed = 0;	    }	  else	    {	      if (!strcasecmp (args[i], "fixed"))		{		  /* Get old bitrate */		  if (ioctl (skfd, SIOCGIWRATE, &wrq) < 0)		    {		      fprintf (stderr, "SIOCGIWRATE: %s\n", strerror (errno));		      return (-1);		    }		  strncpy (wrq.ifr_name, ifname, IFNAMSIZ);		  wrq.u.bitrate.fixed = 1;		}	      else		/* Should be a numeric value */		{		  double		    brate;		  if (sscanf (args[i], "%lg", &(brate)) != 1)		    iw_usage ();		  if (index (args[i], 'G'))		    brate *= GIGA;		  if (index (args[i], 'M'))		    brate *= MEGA;		  if (index (args[i], 'k'))		    brate *= KILO;		  wrq.u.bitrate.value = (long) brate;		  wrq.u.bitrate.fixed = 1;		  /* Check for an additional argument */		  if (((i + 1) < count) && (!strcasecmp (args[i + 1], "auto")))		    {		      wrq.u.bitrate.fixed = 0;		      ++i;		    }		  if (((i + 1) < count) && (!strcasecmp (args[i + 1], "fixed")))		    {		      wrq.u.bitrate.fixed = 1;		      ++i;		    }		}	    }	  if (ioctl (skfd, SIOCSIWRATE, &wrq) < 0)	    {	      fprintf (stderr, "SIOCSIWRATE: %s\n", strerror (errno));	      return (-1);	    }	  continue;	}      /* ---------- Set RTS threshold ---------- */      if (!strncasecmp (args[i], "rts", 3))	{	  i++;	  if (i >= count)	    iw_usage ();	  wrq.u.rts.value = -1;	  wrq.u.rts.fixed = 1;	  wrq.u.rts.disabled = 0;	  if (!strcasecmp (args[i], "off"))	    wrq.u.rts.disabled = 1;	/* i.e. max size */	  else if (!strcasecmp (args[i], "auto"))	    wrq.u.rts.fixed = 0;	  else	    {	      if (!strcasecmp (args[i], "fixed"))		{		  /* Get old RTS threshold */		  if (ioctl (skfd, SIOCGIWRTS, &wrq) < 0)		    {		      fprintf (stderr, "SIOCGIWRTS: %s\n", strerror (errno));		      return (-1);		    }		  strncpy (wrq.ifr_name, ifname, IFNAMSIZ);		  wrq.u.rts.fixed = 1;		}	      else /* Should be a numeric value */ if (sscanf						       (args[i], "%ld", (unsigned long *) &(wrq.u.rts.value)) != 1)		iw_usage ();	    }	  if (ioctl (skfd, SIOCSIWRTS, &wrq) < 0)	    {	      fprintf (stderr, "SIOCSIWRTS: %s\n", strerror (errno));	      return (-1);	    }	  continue;	}      /* ---------- Set fragmentation threshold ---------- */      if (!strncmp (args[i], "frag", 4))	{	  i++;	  if (i >= count)	    iw_usage ();

⌨️ 快捷键说明

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