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

📄 wpa_cli.c

📁 WLAN无线网络管理的最新程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	if (ret < 0 || ret >= end - pos) {		printf("Too long PIN command.\n");		return -1;	}	pos += ret;	for (i = 2; i < argc; i++) {		ret = os_snprintf(pos, end - pos, " %s", argv[i]);		if (ret < 0 || ret >= end - pos) {			printf("Too long PIN command.\n");			return -1;		}		pos += ret;	}	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, ret;	if (argc < 2) {		printf("Invalid OTP command: needs two arguments (network "		       "id and password)\n");		return -1;	}	end = cmd + sizeof(cmd);	pos = cmd;	ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "OTP-%s:%s",			  argv[0], argv[1]);	if (ret < 0 || ret >= end - pos) {		printf("Too long OTP command.\n");		return -1;	}	pos += ret;	for (i = 2; i < argc; i++) {		ret = os_snprintf(pos, end - pos, " %s", argv[i]);		if (ret < 0 || ret >= end - pos) {			printf("Too long OTP command.\n");			return -1;		}		pos += ret;	}	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, ret;	if (argc < 2) {		printf("Invalid PASSPHRASE command: needs two arguments "		       "(network id and passphrase)\n");		return -1;	}	end = cmd + sizeof(cmd);	pos = cmd;	ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "PASSPHRASE-%s:%s",			  argv[0], argv[1]);	if (ret < 0 || ret >= end - pos) {		printf("Too long PASSPHRASE command.\n");		return -1;	}	pos += ret;	for (i = 2; i < argc; i++) {		ret = os_snprintf(pos, end - pos, " %s", argv[i]);		if (ret < 0 || ret >= end - pos) {			printf("Too long PASSPHRASE command.\n");			return -1;		}		pos += ret;	}	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, ret;	if (argc < 2) {		printf("Invalid BSSID command: needs two arguments (network "		       "id and BSSID)\n");		return -1;	}	end = cmd + sizeof(cmd);	pos = cmd;	ret = os_snprintf(pos, end - pos, "BSSID");	if (ret < 0 || ret >= end - pos) {		printf("Too long BSSID command.\n");		return -1;	}	pos += ret;	for (i = 0; i < argc; i++) {		ret = os_snprintf(pos, end - pos, " %s", argv[i]);		if (ret < 0 || ret >= end - pos) {			printf("Too long BSSID command.\n");			return -1;		}		pos += ret;	}	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 -1;	}	os_snprintf(cmd, sizeof(cmd), "SELECT_NETWORK %s", argv[0]);	cmd[sizeof(cmd) - 1] = '\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 -1;	}	os_snprintf(cmd, sizeof(cmd), "ENABLE_NETWORK %s", argv[0]);	cmd[sizeof(cmd) - 1] = '\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 -1;	}	os_snprintf(cmd, sizeof(cmd), "DISABLE_NETWORK %s", argv[0]);	cmd[sizeof(cmd) - 1] = '\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 -1;	}	os_snprintf(cmd, sizeof(cmd), "REMOVE_NETWORK %s", argv[0]);	cmd[sizeof(cmd) - 1] = '\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];	int res;	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 -1;	}	res = os_snprintf(cmd, sizeof(cmd), "SET_NETWORK %s %s %s",			  argv[0], argv[1], argv[2]);	if (res < 0 || (size_t) res >= sizeof(cmd) - 1) {		printf("Too long SET_NETWORK command.\n");		return -1;	}	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_cmd_get_network(struct wpa_ctrl *ctrl, int argc,				   char *argv[]){	char cmd[256];	int res;	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 -1;	}	res = os_snprintf(cmd, sizeof(cmd), "GET_NETWORK %s %s",			  argv[0], argv[1]);	if (res < 0 || (size_t) res >= sizeof(cmd) - 1) {		printf("Too long GET_NETWORK command.\n");		return -1;	}	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_reconnect(struct wpa_ctrl *ctrl, int argc,				  char *argv[]){	return wpa_ctrl_command(ctrl, "RECONNECT");}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 || argc > 2) {		printf("Invalid GET_CAPABILITY command: need either one or "		       "two arguments\n");		return -1;	}	if ((argc == 2) && os_strcmp(argv[1], "strict") != 0) {		printf("Invalid GET_CAPABILITY command: second argument, "		       "if any, must be 'strict'\n");		return -1;	}	os_snprintf(cmd, sizeof(cmd), "GET_CAPABILITY %s%s", argv[0],		    (argc == 2) ? " strict" : "");	cmd[sizeof(cmd) - 1] = '\0';	return wpa_ctrl_command(ctrl, cmd);}static int wpa_cli_list_interfaces(struct wpa_ctrl *ctrl){	printf("Available interfaces:\n");	return wpa_ctrl_command(ctrl, "INTERFACES");}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();	os_free(ctrl_ifname);	ctrl_ifname = os_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 bridge_name\n");		return -1;	}	/*	 * INTERFACE_ADD <ifname>TAB<confname>TAB<driver>TAB<ctrl_interface>TAB	 * <driver_param>TAB<bridge_name>	 */	os_snprintf(cmd, sizeof(cmd), "INTERFACE_ADD %s\t%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] : "",		    argc > 5 ? argv[5] : "");	cmd[sizeof(cmd) - 1] = '\0';	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 -1;	}	os_snprintf(cmd, sizeof(cmd), "INTERFACE_REMOVE %s", argv[0]);	cmd[sizeof(cmd) - 1] = '\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 },	{ "reconnect", wpa_cli_cmd_reconnect },	{ "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 },	{ "ap_scan", wpa_cli_cmd_ap_scan },	{ "stkstart", wpa_cli_cmd_stkstart },	{ NULL, NULL }};static int wpa_request(struct wpa_ctrl *ctrl, int argc, char *argv[]){	struct wpa_cli_cmd *cmd, *match = NULL;	int count;	int ret = 0;	count = 0;	cmd = wpa_cli_commands;	while (cmd->cmd) {		if (os_strncasecmp(cmd->cmd, argv[0], os_strlen(argv[0])) == 0)		{			match = cmd;			if (os_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 (os_strncasecmp(cmd->cmd, argv[0],					   os_strlen(argv[0])) == 0) {				printf(" %s", cmd->cmd);			}			cmd++;		}		printf("\n");		ret = 1;	} else if (count == 0) {		printf("Unknown command '%s'\n", argv[0]);		ret = 1;	} else {		ret = match->handler(ctrl, argc - 1, &argv[1]);	}	return ret;}static int str_match(const char *a, const char *b){	return os_strncmp(a, b, os_strlen(b)) == 0;}static int wpa_cli_exec(const char *program, const char *arg1,			const char *arg2){	char *cmd;	size_t len;	len = os_strlen(program) + os_strlen(arg1) + os_strlen(arg2) + 3;	cmd = os_malloc(len);	if (cmd == NULL)		return -1;	os_snprintf(cmd, len, "%s %s %s", program, arg1, arg2);	cmd[len - 1] = '\0';#ifndef _WIN32_WCE	system(cmd);#endif /* _WIN32_WCE */	os_free(cmd);	return 0;

⌨️ 快捷键说明

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