现在的位置: 首页 > 综合 > 正文

自动连接VPN

2018年02月08日 ⁄ 综合 ⁄ 共 1987字 ⁄ 字号 评论关闭

工作需要,要弄一个自动登录VPN的小程序,网上找了一些方法,这里记录一下。
参数说明:
wzIP VPN服务器的IP
wzEntryName 客户端指定的一个目标名,用户自己随意指定
wzUserName  VPN登录用户名
wzPassWord  VPN登录密码

DWORD ConnectVPN(const wchar_t *wzIP,const wchar_t *wzEntryName,const wchar_t *wzUserName,const wchar_t *wzPassWord)
{
	DWORD dwRet = NO_ERROR;
	RASENTRYW theRasEntry = {0};
	
	下面这一堆参数基本都是写死的,照抄即可
	theRasEntry.dwType = 2;
	theRasEntry.dwDialMode = 1;
	theRasEntry.dwChannels = 0;
	theRasEntry.dwFrameSize	= 0;
	theRasEntry.dwReserved1 = 0;
	theRasEntry.dwReserved2 = 0;
	theRasEntry.dwCountryID = 86;
	theRasEntry.dwVpnStrategy = 0;
	theRasEntry.dwRedialCount = 3;
	theRasEntry.dwfOptions2 = 367;
	theRasEntry.dwRedialPause = 60;
	theRasEntry.dwCountryCode = 86;
	theRasEntry.dwfNetProtocols = 4;
	theRasEntry.dwEncryptionType = 3;
	theRasEntry.dwFramingProtocol = 1;
	theRasEntry.dwfOptions = 1024262928;
	theRasEntry.dwDialExtraPercent = 75;		
	theRasEntry.dwHangUpExtraPercent = 10;
	theRasEntry.dwDialExtraSampleSeconds = 120;
	theRasEntry.dwHangUpExtraSampleSeconds = 120;

	theRasEntry.dwfNetProtocols	= RASNP_Ip;		
	theRasEntry.dwFramingProtocol = RASFP_Ppp;
	theRasEntry.dwSize = sizeof(theRasEntry);

	lstrcpyW(theRasEntry.szDeviceName,L"WAN 微型端口 (L2TP)");
	lstrcpyW(theRasEntry.szDeviceType,L"Vpn");
	lstrcpyW(theRasEntry.szLocalPhoneNumber,wzIP);

	//创建目标名
	dwRet = RasSetEntryPropertiesW(NULL,wzEntryName,&theRasEntry,theRasEntry.dwSize,0,0);
	if (ERROR_SUCCESS != dwRet)
	{
		return dwRet;
	}
	 
	
	RASCREDENTIALSW theRascredentials = {0};	
	theRascredentials.dwMask = 11;
	lstrcpyW(theRascredentials.szUserName,wzUserName);
	lstrcpyW(theRascredentials.szPassword,wzPassWord);
	theRascredentials.dwSize = sizeof(theRascredentials);

	//用户密码保存
	dwRet = RasSetCredentialsW(NULL,wzEntryName,&theRascredentials,FALSE);
	if (ERROR_SUCCESS != dwRet)
	{
		return dwRet;
	}

		
	RASDIALPARAMSW theRasDialParams = {0};
	lstrcpyW(theRasDialParams.szUserName,wzUserName);
	lstrcpyW(theRasDialParams.szPassword,wzPassWord);
	lstrcpyW(theRasDialParams.szEntryName,wzEntryName);
	theRasDialParams.dwSize = sizeof(theRasDialParams);

	//开始连接vpn
	HRASCONN hRasConn = NULL;
	dwRet = RasDialW(NULL,NULL,&theRasDialParams,0,NULL,&hRasConn);
	if (ERROR_SUCCESS != dwRet)
	{
		return dwRet;
	}

	return NO_ERROR;
}

抱歉!评论已关闭.