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

📄 iwredir.c

📁 iwconfig iwlist iwpriv
💻 C
字号:
/* *	Wireless Tools * *		Jean II - HPL 03 * * Main code for "iwredir". This is a hack to match multiple version * of the tools with multiple kernels on the same system... * * This file is released under the GPL license. *     Copyright (c) 2003 Jean Tourrilhes <jt@hpl.hp.com> *//***************************** INCLUDES *****************************/#include "iwlib.h"		/* Header *//*********************** VERSION SUBROUTINES ***********************//*------------------------------------------------------------------*//* * Extract WE version number from /proc/net/wireless * If we have WE-16 and later, the WE version is available at the * end of the header line of the file. * For version prior to that, we can only detect the change from * v11 to v12, so we do an approximate job. Fortunately, v12 to v15 * are highly binary compatible (on the struct level). */static intiw_get_kernel_we_version(void){  char		buff[1024];  FILE *	fh;  char *	p;  int		v;  /* Check if /proc/net/wireless is available */  fh = fopen(PROC_NET_WIRELESS, "r");  if(fh == NULL)    {      fprintf(stderr, "Cannot read " PROC_NET_WIRELESS "\n");      return(-1);    }  /* Read the first line of buffer */  fgets(buff, sizeof(buff), fh);  if(strstr(buff, "| WE") == NULL)    {      /* Prior to WE16, so explicit version not present */      /* Black magic */      if(strstr(buff, "| Missed") == NULL)	v = 11;      else	v = 15;      fclose(fh);      return(v);    }  /* Read the second line of buffer */  fgets(buff, sizeof(buff), fh);  /* Get to the last separator, to get the version */  p = strrchr(buff, '|');  if((p == NULL) || (sscanf(p + 1, "%d", &v) != 1))    {      fprintf(stderr, "Cannot parse " PROC_NET_WIRELESS "\n");      fclose(fh);      return(-1);    }  fclose(fh);  return(v);}/******************************* MAIN ********************************//*------------------------------------------------------------------*//* * The main ! */intmain(int	argc,     char **	argv){  int	version = 0;  int	goterr = 0;  char	file[512];  int	flen;  /* Get current version */  version = iw_get_kernel_we_version();  if(version <= 0)    version = 15;	/* We can only read only WE16 and higher */  /* Special case for Wireless Extension Version... */  /* This is mostly used in the Makefile, we use an "unlikely" option   * to maximise transparency to the tool we masquerade - Jean II */  if((argc > 1) && !strcmp(argv[1], "-wev"))    {      printf("%d\n", version);      return(version);    }  /* Mangle the command name */  flen = strlen(argv[0]);  if((flen + 3) >= 512)    {      fprintf(stderr, "Command name too long [%s]\n", argv[0]);      return(-1);    }  memcpy(file, argv[0], flen + 1);  sprintf(file + flen, "%d", version);  /* Execute (won't return) */  goterr = execvp(file, argv);  /* In case of error */  fprintf(stderr, "Can't execute command %s: %s\n", file, strerror(errno));  return(goterr);}

⌨️ 快捷键说明

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