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

📄 mento supplicantdlg.cpp

📁 一个非常漂亮的802.1x客户端源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:

	if ( iHotKeyLen != 0 )
	{
		m_wVirtualKey  = ((UINT)(dwHotKey[1])<<8) + dwHotKey[0];
		m_wKeyModifier = ((UINT)(dwHotKey[3])<<8) + dwHotKey[2];
		m_HotKey.SetHotKey( m_wVirtualKey, m_wKeyModifier );
	}
	else
	{
		m_wKeyModifier = 0;
		m_wVirtualKey = 0;
	}
	if ( m_iCallWay == 0 )
		m_HotKey.EnableWindow( false );
	else
		m_HotKey.EnableWindow( true );


	WriteDebugInfo("InitCertP"," >> Step 4");
	UpdateData(false);
	WriteDebugInfo("InitCertP"," >> Step 5");

	//处理智能选项
	m_bIntelligentReconnect = AfxGetApp()->GetProfileInt( ssIntelligentSection,
		ssIntelligentReconnect, 1 );

	//处理隐藏选项
	CheckAndSetButtonStatus();
	if(m_bArtificalAddressEnable)
	{
		UpdateData();
	m_IP_set      = AfxGetApp()->GetProfileString( ssHidenSection, ssIP_set, "" );
	m_NetGate_set = AfxGetApp()->GetProfileString( ssHidenSection, ssNetGage_set, "" );
	m_NetMask_set = AfxGetApp()->GetProfileString( ssHidenSection, ssNetMask_set, "" );
	m_DNS1_set    = AfxGetApp()->GetProfileString( ssHidenSection, ssDNS_set, "" );
	}


	//是否开机自动运行?如果是,则不生效热键和系统栏图标
	if ( stricmp( pApp->m_lpCmdLine, "-StartupConnect" ) == 0 )
		m_bIsStartupConnect = true;

	WriteDebugInfo("InitCertP"," >> Step 6");
	return true;
}

bool CMentoSupplicantDlg::InitNICs()
{
	pcap_if_t *pAllDevs=NULL;
	pcap_if_t *pcapTemp;
	pcap_t *pHandle;
	NIC_Device *pNICTemp;	//新添加网卡

	CString sNICName;
	CString sNICDescription;
	CString sNICIP;
	byte bNICIP[4];

	char sErrorBuf[PCAP_ERRBUF_SIZE];
	CString sMsg;
	int iRtn;
	int iErrorNo=0;	//记录错误启动的网卡数

	WriteDebugInfo("InitNICs"," >> Step 0");
	if ( m_bNICInitSign )	//已经初始化过了
		return true;

	WriteDebugInfo("InitNICs"," >> Step 1");
	/* Retrieve the device list */
	if ( pcap_findalldevs(&pAllDevs, sErrorBuf) == -1 || pAllDevs == NULL )
	{
		sMsg.Format(" ** 找不到网卡错误: %s", sErrorBuf);
		PrintOutput ( sMsg, " ** 初始化网卡错误", true);
		return false;
	}
	WriteDebugInfo("InitNICs"," >> Step 2");
	
	/* 遍历初始化网卡 */
	for(pcapTemp=pAllDevs ; pcapTemp ; pcapTemp=pcapTemp->next)
	{
		/* 装入每个网卡 */
		if ( pcapTemp->name == NULL )
		{
			WriteDebugInfo(" InitNICError", " ** 您有网卡未命名!!");
			iErrorNo ++;
			continue;
		}
		sNICName = pcapTemp->name;
		sNICName.TrimRight();
		if ( ( pHandle = pcap_open_live(pcapTemp->name,
			65536, 1, 1000, sErrorBuf ) ) == 0)
		{
			pcap_freealldevs(pAllDevs);
			sMsg.Format(" ** 不能初始化网卡: %s!!", sNICName);
			WriteDebugInfo(" InitNICError", " ** 初始化网卡错误!!");
			PrintOutput( sMsg, " ** 初始化网卡错误", true );
			iErrorNo ++;
			continue;
		}
		sNICDescription = pcapTemp->description;
		sNICDescription.TrimRight();
		
		struct pcap_addr *ip_Description;
		ip_Description = pcapTemp->addresses;

		while ( ip_Description != NULL && ip_Description->addr != NULL )
		{
			sNICIP=iptos(((SOCKADDR_IN *)ip_Description->addr)->sin_addr.S_un.S_addr, bNICIP);
			pNICTemp = new NIC_Device( sNICName, pHandle, sNICDescription, sNICIP, bNICIP );

			iRtn=m_NIC_Select.AddString( "IP: " + sNICIP + " 所在的网卡" );
			if ( m_pNICs == NULL )
				m_pNICs = pNICTemp;
			else
				m_pNICs->AddNext( pNICTemp );

			if ( sNICIP.Compare("192.168.1")<0 || sNICIP.Compare("192.168.3")>0 )
			{
				m_NIC_Select.SetCurSel(iRtn);
				m_pCurrentNIC = pNICTemp;
				m_sNICIP = sNICIP;
			}

			if ( ip_Description->next != NULL )
				ip_Description = ip_Description->next;
			else
				break;
		}

	}

	if ( iErrorNo != 0 )
	{
		sMsg.Format( " ** 网卡初始化共有 %d 个错误!!", iErrorNo);
		PrintOutput(sMsg);
	}

	WriteDebugInfo("InitNICs"," >> Step 3");
	pcap_freealldevs(pAllDevs);

	m_bNICInitSign = true;
	WriteDebugInfo("InitNICs"," >> Step 4");
	return true;
}

bool CMentoSupplicantDlg::InitInterface()
{
	m_OptionTab.InsertItem( 0, "查看输出" );
	m_OptionTab.InsertItem( 1, "认证选项" );
	m_OptionTab.InsertItem( 2, "运行选项" );
	m_OptionTab.InsertItem( 3, "激活选项" );
	m_OptionTab.InsertItem( 4, "智能选项" );
    m_OptionTab.InsertItem( 5, "伪造选项" );
	RECT myRect;
	RECT listRect;
	GetWindowRect(&myRect);
	m_OptionTab.GetWindowRect(&listRect);
	m_hLarge = myRect.bottom - myRect.top;
	m_hSmall = listRect.top - myRect.top;
	MoveWindow( myRect.left, myRect.top, 
		myRect.right - myRect.left , m_hLarge , true );
	bLargeSign = true;

	return true;
}

bool CMentoSupplicantDlg::InitNICParamater()
{
	OSVERSIONINFOEX osvi;
	BOOL bOsVersionInfoEx;
	
	ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
	
	if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
	{
		osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
		if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
		{
			PrintOutput("不能取得操作系统的版本号!!", " ** 你这是什么操作系统啊?", true);
			return FALSE;
		}
	}
	
	switch (osvi.dwPlatformId)
	{
	case VER_PLATFORM_WIN32_NT:	
		InitNICParamaterNT();
		break;
	case VER_PLATFORM_WIN32_WINDOWS:
		InitNICParamater98();
		break;
	case VER_PLATFORM_WIN32s:
		MessageBox("你还用这么老的操作系统???");
		PostQuitMessage(0);
		break;
	}
	
	WriteDebugInfo("InitNICP"," >> Step 5");
	//初始化MAC地址
	if ( GetMacByIP( m_pCurrentNIC->m_sIP, bLocalMAC ) == false )
	{
		PrintOutput( "不能初始化硬件地址,可能是网线没连好或IP冲突!" , " ** 网络地址初始化错误", true);
		return false;
	}

	WriteDebugInfo("InitNICP"," >> Step 7");
	ProcessHidenArgs();

	WriteDebugInfo("InitNICP"," >> Step 8");
	return true;
}

boolean CMentoSupplicantDlg::GetMacByIP(CString sIP,  byte mac[])
{
	PIP_ADAPTER_INFO pinfo=NULL;
	unsigned long len=0;
	unsigned  long nError;

	nError = GetAdaptersInfo(pinfo,&len);
	if (nError==ERROR_NO_DATA)
	{
		PrintOutput(" ** 找不到网卡!!", " ** 取得MAC地址出错!!", true);
		return false;
	}
	if (nError==ERROR_NOT_SUPPORTED)
	{
		PrintOutput("当前操作系统不支持获得MAC地址!!", 
			" ** 取得MAC地址出错!!", true);
		return false;
	}
	if (nError==ERROR_BUFFER_OVERFLOW)
	{
		pinfo= (PIP_ADAPTER_INFO)malloc(len);
		nError	=	GetAdaptersInfo(pinfo,&len);
		if ( nError != 0 )
		{
			PrintOutput("当前操作系统不支持获得MAC地址!!", 
				" ** 取得MAC地址出错!!", true);
			return false;
		}
	}

	while ( pinfo != NULL )
	{
//		m_macaddress.Format("%02X:%02X:%02X:%02X:%02X:%02X",pinfo->Address[0],pinfo->Address[1],pinfo->Address[2],pinfo->Address[3],pinfo->Address[4],pinfo->Address[5]);
//		m_description	=	pinfo->Description;
//		m_description.TrimRight();
//		m_type.Format("%d",pinfo->Type);

		PIP_ADDR_STRING pAddressList = &(pinfo->IpAddressList);
		while( pAddressList != NULL )
		{
			if ( sIP.Compare(pAddressList->IpAddress.String) == 0 )
			{
				for ( int i=0 ; i<6 ; i++ )
					bLocalMAC[i] = pinfo->Address[i];
				return true;
			}
			else
				pAddressList = pAddressList->Next;
		}
		pinfo = pinfo->Next;
	}
	return false;
}

bool CMentoSupplicantDlg::InitNICParamaterNT()
{
	LONG kResult;
	DWORD dwType;
	DWORD cbData;
	LPDWORD lpcbData = &cbData;
	
	BYTE bData[50];
	LPBYTE lpData = bData;

	HKEY kLocalMachine;
	LPCTSTR	lpNetworkSubKey = 
		"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces";
	CString sNetworkSubKey;
	CString sForNetGate = "DefaultGateway";
	CString sForDNS = "NameServer";
	CString sForNetMask = "SubnetMask";
	CString sClassIDofNIC;

	WriteDebugInfo("InitNICP"," >> Step 1");
	//注册表主键打开
	sClassIDofNIC = m_pCurrentNIC->m_sName.Right(38);
	sNetworkSubKey.Format("%s\\%s", lpNetworkSubKey, sClassIDofNIC );

	WriteDebugInfo("InitNICP"," >> Step 0");
	//获得初始化系统设置 IP Mask NetGate DNS
	if ( m_pCurrentNIC == NULL )
	{
		PrintOutput( "请确认你装有具有外网网址的网卡"," ** 没有合适的网卡",true);
		return false;
	}

	m_IP[0] = m_pCurrentNIC->m_bIP[0];
	m_IP[1] = m_pCurrentNIC->m_bIP[1];
	m_IP[2] = m_pCurrentNIC->m_bIP[2];
	m_IP[3] = m_pCurrentNIC->m_bIP[3];

	kResult = ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, sNetworkSubKey, NULL,
		KEY_EXECUTE, &kLocalMachine);
	if( kResult != ERROR_SUCCESS )
	{
		DWORD dwTemp = GetLastError();
		LPVOID lpMsgBuf;
		FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
			NULL, dwTemp, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
			(LPTSTR) &lpMsgBuf, 0, NULL );
		PrintOutput( (const char*)lpMsgBuf ," ** 初始化网络配置参数错误!!", true );
		return false;
	}

	WriteDebugInfo("InitNICP"," >> Step 2");
	//初始化网关参数
	dwType = REG_MULTI_SZ;
	cbData = 50;
	kResult = ::RegQueryValueEx( kLocalMachine, sForNetGate, NULL, &dwType, 
		lpData, lpcbData);
	if(kResult != ERROR_SUCCESS)
	{
		DWORD dwTemp = GetLastError();
		m_bStartupConnect = false;
		LPVOID lpMsgBuf;
		FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
			NULL, dwTemp, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
			(LPTSTR) &lpMsgBuf, 0, NULL );
		PrintOutput( (const char*)lpMsgBuf ," ** 获取网关参数错误!!", true );
		return false;
	}
	{
		unsigned short int i1,i2,i3,i4;
		m_sNetGate = lpData;
		sscanf( (const char*)lpData, "%d.%d.%d.%d", &i1, &i2, &i3, &i4);
		m_NetGate[0] = (byte) i1;
		m_NetGate[1] = (byte) i2;
		m_NetGate[2] = (byte) i3;
		m_NetGate[3] = (byte) i4;
	}

	WriteDebugInfo("InitNICP"," >> Step 3");
	//初始化网络掩码参数
	dwType = REG_MULTI_SZ;
	cbData = 50;
	kResult = ::RegQueryValueEx( kLocalMachine, sForNetMask, NULL, &dwType, 
		lpData, lpcbData);
	if(kResult != ERROR_SUCCESS)
	{
		DWORD dwTemp = GetLastError();
		m_bStartupConnect = false;
		LPVOID lpMsgBuf;
		FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
			NULL, dwTemp, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
			(LPTSTR) &lpMsgBuf, 0, NULL );
		PrintOutput( (const char*)lpMsgBuf ," ** 获取网络掩码错误!!", true );
		return false;
	}
	{
		unsigned short int i1,i2,i3,i4;
		sscanf( (const char*)lpData, "%d.%d.%d.%d", &i1, &i2, &i3, &i4);
		m_NetMask[0] = (byte) i1;
		m_NetMask[1] = (byte) i2;
		m_NetMask[2] = (byte) i3;
		m_NetMask[3] = (byte) i4;
	}

	WriteDebugInfo("InitNICP"," >> Step 4");
	//初始化DNS参数
	dwType = REG_SZ;
	cbData = 50;
	kResult = ::RegQueryValueEx( kLocalMachine, sForDNS, NULL, &dwType, 
		lpData, lpcbData);
	if(kResult != ERROR_SUCCESS)
	{
		DWORD dwTemp = GetLastError();
		m_bStartupConnect = false;
		LPVOID lpMsgBuf;
		FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
			NULL, dwTemp, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
			(LPTSTR) &lpMsgBuf, 0, NULL );
		PrintOutput( (const char*)lpMsgBuf ," ** 获取DNS错误!!", true );
		return false;
	}
	::RegCloseKey(kLocalMachine);
	
	for ( int i=0 ; i<50 ; i++ )
	{
		if ( lpData[i] == ',' )
		{
			lpData[i] = '\0';
			break;
		}
		else if ( lpData[i] == '\0' )
			break;
	}
	{
		unsigned short int i1,i2,i3,i4;
		sscanf( (const char*)lpData, "%d.%d.%d.%d", &i1, &i2, &i3, &i4);
		m_DNS1[0] = (byte) i1;
		m_DNS1[1] = (byte) i2;
		m_DNS1[2] = (byte) i3;
		m_DNS1[3] = (byte) i4;
	}

	return true;
}

bool CMentoSupplicantDlg::InitNICParamater98()
{
	LONG kResult;
	DWORD dwType;
	BYTE bData[50];
	LPBYTE lpData = bData;
	DWORD cbData;

	HKEY kLocalMachine;
	LPCTSTR lpDNSSubKey =
		"System\\CurrentControlSet\\Services\\VxD\\MSTCP";
	LPCTSTR	lpNGSubKey = 

⌨️ 快捷键说明

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