您的位置:首页 > 理论基础 > 计算机网络

调用wpa_supplicant的代码及测试网络是否连通

2011-11-16 10:58 357 查看
直接贴代码:

void AnalysisCommand::setSSID()
{
     printf("----------SetSSID----------\n");
	char ssid[64] = {0};
	char passworld[64] = {0};
	int retval = g_configuretable.GetSSID(ssid);
	int retval2 = g_configuretable.GetPassword(passworld);
	if(!retval&&!retval2)
	{
		char creat_conf[128]={0};
		char add_network[128]={0};
	        char cmd_ssid[128] = {0};
		char cmd_pwd[128] = {0};
		char shut_wpa[128] = {0};
		char start_wpa[128] = {0};
		char select_network[128]={0};

		
		sprintf(creat_conf,"echo \"ctrl_interface=/var/run/wpa_supplicant\" > /wpa.conf");	
		sprintf(add_network,"wpa_cli add_network");	
		sprintf(cmd_ssid,"wpa_cli set_network 0 ssid \\\"%s\\\"",ssid);	

		if( strlen(passworld)!=0)
		{
			sprintf(cmd_pwd,"wpa_cli set_network 0 psk \\\"%s\\\"",passworld);
		}
		else
		{
			sprintf(cmd_pwd,"wpa_cli set_network 0 key_mgmt NONE");
		}
		sprintf(shut_wpa,"wpa_cli terminate");	
 		sprintf(start_wpa,"wpa_supplicant -B -Dwext -iwlan0 -c  /wpa.conf");	
		sprintf(select_network,"wpa_cli select_network 0");	
		
		system(shut_wpa);
		system(creat_conf);
		system(start_wpa);
		system(add_network);
		system(cmd_ssid);
		system(cmd_pwd);
		system(select_network);
		
		printf("Set SSID :%s",ssid);
	}

}

测试网络是否连通的代码,直接调用的ping命令,不断的ping指定的ip地址:

int status = -1;
	for(int i=0;i<10;i++)
	{
	    printf("print for the %d time...\n",i+1);
		if(getNetStatus()==0)
		{
			status = 0;
			usleep(50000);
			break;
		}

	}
int  AnalysisCommand::getNetStatus()
{
	char gw[64] = {0};
	char ping_cmd[64] = {0};
	int getgw = g_configuretable.GetGateWay(gw);
	if(!getgw)
	{
		sprintf(ping_cmd,"ping -c 1 -w 1 %s",gw);
	}
	else
	{
		sprintf(ping_cmd,"ping -c 1 -w 1 192.168.1.1");
		printf("default gw 192.168.1.1\n");
	}
	
	char buf[512];
	int retval =-1;
	
	FILE *pp;
	if( (pp = popen(ping_cmd, "r")) == NULL )
	{
		printf("popen() error!\n");
	}
	else
	{
		while(fgets(buf, sizeof buf, pp))
		{
			printf("------------------------line\n");
			printf("%s", buf);
			if((strstr(buf,(char *)"packet loss")!=NULL)&&(strstr(buf,(char *)"100% packet loss")==NULL))
			{
				printf("can find packet loss but cannot fint 100 packet loss\n");
				retval=0;
				break;
			}
			
		}
		pclose(pp);
	}
	return retval;

}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: