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

📄 wpa_cli.c

📁 一个Linux下无线网卡的设置工具
💻 C
📖 第 1 页 / 共 3 页
字号:
	for (i = 2; i < argc; i++)		pos += snprintf(pos, end - pos, " %s", argv[i]);	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_otp(struct wpa_ctrl *ctrl, int argc, char *argv[]){	char cmd[256], *pos, *end;	int i;	if (argc < 2) {		printf("Invalid OTP command: needs two arguments (network "		       "id and password)\n");		return 0;	}	end = cmd + sizeof(cmd);	pos = cmd;	pos += snprintf(pos, end - pos, WPA_CTRL_RSP "OTP-%s:%s",		       argv[0], argv[1]);	for (i = 2; i < argc; i++)		pos += snprintf(pos, end - pos, " %s", argv[i]);	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_passphrase(struct wpa_ctrl *ctrl, int argc,				  char *argv[]){	char cmd[256], *pos, *end;	int i;	if (argc < 2) {		printf("Invalid PASSPHRASE command: needs two arguments "		       "(network id and passphrase)\n");		return 0;	}	end = cmd + sizeof(cmd);	pos = cmd;	pos += snprintf(pos, end - pos, WPA_CTRL_RSP "PASSPHRASE-%s:%s",		       argv[0], argv[1]);	for (i = 2; i < argc; i++)		pos += snprintf(pos, end - pos, " %s", argv[i]);	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_bssid(struct wpa_ctrl *ctrl, int argc, char *argv[]){	char cmd[256], *pos, *end;	int i;	if (argc < 2) {		printf("Invalid BSSID command: needs two arguments (network "		       "id and BSSID)\n");		return 0;	}	end = cmd + sizeof(cmd);	pos = cmd;	pos += snprintf(pos, end - pos, "BSSID");	for (i = 0; i < argc; i++)		pos += snprintf(pos, end - pos, " %s", argv[i]);	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_list_networks(struct wpa_ctrl *ctrl, int argc,				     char *argv[]){	return wpa_ctrl_command(ctrl, "LIST_NETWORKS");}static int wpa_cli_cmd_select_network(struct wpa_ctrl *ctrl, int argc,				      char *argv[]){	char cmd[32];	if (argc < 1) {		printf("Invalid SELECT_NETWORK command: needs one argument "		       "(network id)\n");		return 0;	}	snprintf(cmd, sizeof(cmd), "SELECT_NETWORK %s", argv[0]);	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_enable_network(struct wpa_ctrl *ctrl, int argc,				      char *argv[]){	char cmd[32];	if (argc < 1) {		printf("Invalid ENABLE_NETWORK command: needs one argument "		       "(network id)\n");		return 0;	}	snprintf(cmd, sizeof(cmd), "ENABLE_NETWORK %s", argv[0]);	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_disable_network(struct wpa_ctrl *ctrl, int argc,				       char *argv[]){	char cmd[32];	if (argc < 1) {		printf("Invalid DISABLE_NETWORK command: needs one argument "		       "(network id)\n");		return 0;	}	snprintf(cmd, sizeof(cmd), "DISABLE_NETWORK %s", argv[0]);	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_add_network(struct wpa_ctrl *ctrl, int argc,				   char *argv[]){	return wpa_ctrl_command(ctrl, "ADD_NETWORK");}static int wpa_cli_cmd_remove_network(struct wpa_ctrl *ctrl, int argc,				      char *argv[]){	char cmd[32];	if (argc < 1) {		printf("Invalid REMOVE_NETWORK command: needs one argument "		       "(network id)\n");		return 0;	}	snprintf(cmd, sizeof(cmd), "REMOVE_NETWORK %s", argv[0]);	return wpa_ctrl_command(ctrl, cmd);}static void wpa_cli_show_network_variables(void){	printf("set_network variables:\n"	       "  ssid (network name, SSID)\n"	       "  psk (WPA passphrase or pre-shared key)\n"	       "  key_mgmt (key management protocol)\n"	       "  identity (EAP identity)\n"	       "  password (EAP password)\n"	       "  ...\n"	       "\n"	       "Note: Values are entered in the same format as the "	       "configuration file is using,\n"	       "i.e., strings values need to be inside double quotation "	       "marks.\n"	       "For example: set_network 1 ssid \"network name\"\n"	       "\n"	       "Please see wpa_supplicant.conf documentation for full list "	       "of\navailable variables.\n");}static int wpa_cli_cmd_set_network(struct wpa_ctrl *ctrl, int argc,				   char *argv[]){	char cmd[256];	if (argc == 0) {		wpa_cli_show_network_variables();		return 0;	}	if (argc != 3) {		printf("Invalid SET_NETWORK command: needs three arguments\n"		       "(network id, variable name, and value)\n");		return 0;	}	if (snprintf(cmd, sizeof(cmd), "SET_NETWORK %s %s %s",		     argv[0], argv[1], argv[2]) >= sizeof(cmd) - 1) {		printf("Too long SET_NETWORK command.\n");		return 0;	}	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_get_network(struct wpa_ctrl *ctrl, int argc,				   char *argv[]){	char cmd[256];	if (argc == 0) {		wpa_cli_show_network_variables();		return 0;	}	if (argc != 2) {		printf("Invalid GET_NETWORK command: needs two arguments\n"		       "(network id and variable name)\n");		return 0;	}	if (snprintf(cmd, sizeof(cmd), "GET_NETWORK %s %s",		     argv[0], argv[1]) >= sizeof(cmd) - 1) {		printf("Too long GET_NETWORK command.\n");		return 0;	}	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_disconnect(struct wpa_ctrl *ctrl, int argc,				  char *argv[]){	return wpa_ctrl_command(ctrl, "DISCONNECT");}static int wpa_cli_cmd_save_config(struct wpa_ctrl *ctrl, int argc,				   char *argv[]){	return wpa_ctrl_command(ctrl, "SAVE_CONFIG");}static int wpa_cli_cmd_scan(struct wpa_ctrl *ctrl, int argc, char *argv[]){	return wpa_ctrl_command(ctrl, "SCAN");}static int wpa_cli_cmd_scan_results(struct wpa_ctrl *ctrl, int argc,				    char *argv[]){	return wpa_ctrl_command(ctrl, "SCAN_RESULTS");}static int wpa_cli_cmd_get_capability(struct wpa_ctrl *ctrl, int argc,				      char *argv[]){	char cmd[64];	if (argc != 1) {		printf("Invalid GET_CAPABILITY command: needs one argument\n");		return 0;	}	snprintf(cmd, sizeof(cmd), "GET_CAPABILITY %s", argv[0]);	return wpa_ctrl_command(ctrl, cmd);}static void wpa_cli_list_interfaces(struct wpa_ctrl *ctrl){	struct dirent *dent;	DIR *dir;	dir = opendir(ctrl_iface_dir);	if (dir == NULL) {		printf("Control interface directory '%s' could not be "		       "openned.\n", ctrl_iface_dir);		return;	}	printf("Available interfaces:\n");	while ((dent = readdir(dir))) {		if (strcmp(dent->d_name, ".") == 0 ||		    strcmp(dent->d_name, "..") == 0)			continue;		printf("%s\n", dent->d_name);	}	closedir(dir);}static int wpa_cli_cmd_interface(struct wpa_ctrl *ctrl, int argc, char *argv[]){	if (argc < 1) {		wpa_cli_list_interfaces(ctrl);		return 0;	}	wpa_cli_close_connection();	free(ctrl_ifname);	ctrl_ifname = strdup(argv[0]);	if (wpa_cli_open_connection(ctrl_ifname)) {		printf("Connected to interface '%s.\n", ctrl_ifname);		if (wpa_ctrl_attach(ctrl_conn) == 0) {			wpa_cli_attached = 1;		} else {			printf("Warning: Failed to attach to "			       "wpa_supplicant.\n");		}	} else {		printf("Could not connect to interface '%s' - re-trying\n",			ctrl_ifname);	}	return 0;}static int wpa_cli_cmd_reconfigure(struct wpa_ctrl *ctrl, int argc,				   char *argv[]){	return wpa_ctrl_command(ctrl, "RECONFIGURE");}static int wpa_cli_cmd_terminate(struct wpa_ctrl *ctrl, int argc,				 char *argv[]){	return wpa_ctrl_command(ctrl, "TERMINATE");}static int wpa_cli_cmd_interface_add(struct wpa_ctrl *ctrl, int argc,				     char *argv[]){	char cmd[256];	if (argc < 1) {		printf("Invalid INTERFACE_ADD command: needs at least one "		       "argument (interface name)\n"			"All arguments: ifname confname driver ctrl_interface "			"driver_param\n");		return 0;	}	/*	 * INTERFACE_ADD <ifname>TAB<confname>TAB<driver>TAB<ctrl_interface>TAB	 * <driver_param>	 */	snprintf(cmd, sizeof(cmd), "INTERFACE_ADD %s\t%s\t%s\t%s\t%s", argv[0],		 argc > 1 ? argv[1] : "", argc > 2 ? argv[2] : "",		 argc > 3 ? argv[3] : "", argc > 4 ? argv[4] : "");	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_interface_remove(struct wpa_ctrl *ctrl, int argc,					char *argv[]){	char cmd[128];	if (argc != 1) {		printf("Invalid INTERFACE_REMOVE command: needs one argument "		       "(interface name)\n");		return 0;	}	snprintf(cmd, sizeof(cmd), "INTERFACE_REMOVE %s", argv[0]);	return wpa_ctrl_command(ctrl, cmd);}struct wpa_cli_cmd {	const char *cmd;	int (*handler)(struct wpa_ctrl *ctrl, int argc, char *argv[]);};static struct wpa_cli_cmd wpa_cli_commands[] = {	{ "status", wpa_cli_cmd_status },	{ "ping", wpa_cli_cmd_ping },	{ "mib", wpa_cli_cmd_mib },	{ "help", wpa_cli_cmd_help },	{ "interface", wpa_cli_cmd_interface },	{ "level", wpa_cli_cmd_level },	{ "license", wpa_cli_cmd_license },	{ "quit", wpa_cli_cmd_quit },	{ "set", wpa_cli_cmd_set },	{ "logon", wpa_cli_cmd_logon },	{ "logoff", wpa_cli_cmd_logoff },	{ "pmksa", wpa_cli_cmd_pmksa },	{ "reassociate", wpa_cli_cmd_reassociate },	{ "preauthenticate", wpa_cli_cmd_preauthenticate },	{ "identity", wpa_cli_cmd_identity },	{ "password", wpa_cli_cmd_password },	{ "new_password", wpa_cli_cmd_new_password },	{ "pin", wpa_cli_cmd_pin },	{ "otp", wpa_cli_cmd_otp },	{ "passphrase", wpa_cli_cmd_passphrase },	{ "bssid", wpa_cli_cmd_bssid },	{ "list_networks", wpa_cli_cmd_list_networks },	{ "select_network", wpa_cli_cmd_select_network },	{ "enable_network", wpa_cli_cmd_enable_network },	{ "disable_network", wpa_cli_cmd_disable_network },	{ "add_network", wpa_cli_cmd_add_network },	{ "remove_network", wpa_cli_cmd_remove_network },	{ "set_network", wpa_cli_cmd_set_network },	{ "get_network", wpa_cli_cmd_get_network },	{ "save_config", wpa_cli_cmd_save_config },	{ "disconnect", wpa_cli_cmd_disconnect },	{ "scan", wpa_cli_cmd_scan },	{ "scan_results", wpa_cli_cmd_scan_results },	{ "get_capability", wpa_cli_cmd_get_capability },	{ "reconfigure", wpa_cli_cmd_reconfigure },	{ "terminate", wpa_cli_cmd_terminate },	{ "interface_add", wpa_cli_cmd_interface_add },	{ "interface_remove", wpa_cli_cmd_interface_remove },	{ NULL, NULL }};static void wpa_request(struct wpa_ctrl *ctrl, int argc, char *argv[]){	struct wpa_cli_cmd *cmd, *match = NULL;	int count;	count = 0;	cmd = wpa_cli_commands;	while (cmd->cmd) {		if (strncasecmp(cmd->cmd, argv[0], strlen(argv[0])) == 0) {			match = cmd;			if (strcasecmp(cmd->cmd, argv[0]) == 0) {				/* we have an exact match */				count = 1;				break;			}			count++;		}		cmd++;	}	if (count > 1) {		printf("Ambiguous command '%s'; possible commands:", argv[0]);		cmd = wpa_cli_commands;		while (cmd->cmd) {			if (strncasecmp(cmd->cmd, argv[0], strlen(argv[0])) ==			    0) {				printf(" %s", cmd->cmd);			}			cmd++;		}		printf("\n");	} else if (count == 0) {		printf("Unknown command '%s'\n", argv[0]);	} else {		match->handler(ctrl, argc - 1, &argv[1]);	}}static int str_match(const char *a, const char *b){	return strncmp(a, b, strlen(b)) == 0;}

⌨️ 快捷键说明

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