📄 kwifimanager_kcmodule.cpp
字号:
/* ---------- 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 + -