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

📄 datafile.cpp

📁 802.1x认证客户端
💻 CPP
字号:
//ThorClient 802.1x (using WinPcap 3.2 alpha1)
//Download: http://thorqq.ys168.com 
//E-mail:   thorqq@163.com 
//Author:   Thorqq
//
//公共接口函数:
//	CDataFile(PUSERDATA pUserData) 构造函数,传入用户数据指针
//	virtual ~CDataFile()           析构函数
//
//	bool Load()   从磁盘读数据
//	bool Save()   向磁盘写数据
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DataFile.h"
#include "iphlpapi.h" //IP_ADAPTER_INFO,GetAdaptersInfo()
#include "winsock2.h" //htons(),inet_addr()

typedef DWORD(CALLBACK * PGAINFO)(PIP_ADAPTER_INFO,PULONG);//GetAdaptersInfo

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDataFile::CDataFile(PUSERDATA pUserData): pData(pUserData)
{
	m_hFile= NULL;
}

CDataFile::~CDataFile()
{

}

bool CDataFile::Load()
{
	if(::GetFileAttributes(FILENAME) == -1)
	{//如果文件不存在,初始化并保存数据
		Init();
		Save();
		return true;
	}
	//如果没有关闭,就关闭
	if(m_hFile != INVALID_HANDLE_VALUE)
		::CloseHandle(m_hFile);
	//打开文件
	m_hFile = ::CreateFile(FILENAME, GENERIC_READ, FILE_SHARE_READ, 
		NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
		
	if( (m_hFile == INVALID_HANDLE_VALUE) ||
		::SetFilePointer(m_hFile, 0, NULL, FILE_BEGIN) == -1 )//定位文件头
		return false;

	DWORD dw = 0;
	::ReadFile(m_hFile, pData, sizeof(USERDATA), &dw, NULL);
	::CloseHandle(m_hFile);

	m_hFile = INVALID_HANDLE_VALUE;
	if( dw != sizeof(USERDATA) )
		return false;

	Decode();//解密密码

	if(pData->autologin)
		m_Login = true;
	else 
		m_Login = false;

	return true;
}

bool CDataFile::Save()
{
	DWORD dw;
	char tmp[30] = { 0 };
	if(m_hFile != INVALID_HANDLE_VALUE)
		::CloseHandle(m_hFile);

	m_hFile = ::CreateFile(FILENAME, GENERIC_WRITE, 0, 
		NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

	if(m_hFile != INVALID_HANDLE_VALUE)
	{
		strcpy(tmp, pData->password);//把密码保存在临时变量中
		if(pData->rempwd == 0)//如果不记住密码,则把密码清零
			memset(pData->password, 0, sizeof(pData->password));
		Encode();//加密密码
		::WriteFile(m_hFile, pData, sizeof(USERDATA), &dw, NULL);
		::CloseHandle(m_hFile);
		strcpy(pData->password, tmp);
		return true;
	}
	return false;
}

void CDataFile::Init()
{//初始化数据
	strcpy(pData->username, "");
	strcpy(pData->password, "");
	if(!GetGlobalData())
	{
		AfxMessageBox("NIC ERROR!");
	}

	pData->morb = 0;
	pData->dhcp = 1;
	pData->updateip = 1;
	pData->multisend = 0;
	pData->relogin = 0;

	pData->rempwd = 1;
	pData->autologin = 0;
}

void CDataFile::Encode()//华3客户端 将密码与0x55异或
{
	u_char pass = 0x37;
	for(int i = 0; i < sizeof(pData->password); i++)
	{
		pData->password[i] ^= pass;
		pass += 11;
	}
}

void CDataFile::Decode()
{
	Encode();
}

bool CDataFile::GetGlobalData()
{
	PGAINFO pGAInfo;
	//加载IP Helper API 所需的库文件
    HINSTANCE hInst;//实例句柄
    hInst=LoadLibrary("iphlpapi.dll");
    if(!hInst)
        AfxMessageBox("iphlpapi.dll not supported in this platform!\n");
    pGAInfo=(PGAINFO)GetProcAddress(hInst,"GetAdaptersInfo");

	DWORD dwLocalIP = 0;
	IP_ADAPTER_INFO  AdapterInfo;		// Allocate information
	PIP_ADAPTER_INFO pAdapterInfo = &AdapterInfo;										 // for up to 5 NICs
	DWORD dwBufLen = sizeof(AdapterInfo);  // Save memory size of buffer

	DWORD dwStatus = pGAInfo(// Call GetAdapterInfo
		pAdapterInfo,                 // [out] buffer to receive data
		&dwBufLen);   

	// 取得本地适配器结构信息
	if(dwStatus == ERROR_SUCCESS && pAdapterInfo != NULL)
	{
		dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String);
		memcpy(pData->ip,  (unsigned  char*)&dwLocalIP, 4);	//get IP
		memcpy(pData->mac, pAdapterInfo->Address, 6);		//get MAC
		strcpy(pData->nic, "\\Device\\NPF_");				//
		strcat(pData->nic, pAdapterInfo->AdapterName);		//NIC
		strcpy(pData->nicdes, pAdapterInfo->Description);	//NIC DESCRIPTION
		return true;
	}
//////////////////////////////////////////////////
/*
	DWORD dwLocalIP = 0;
	IP_ADAPTER_INFO  AdapterInfo;		// Allocate information
	PIP_ADAPTER_INFO pAdapterInfo = &AdapterInfo;										 // for up to 5 NICs
	DWORD dwBufLen = sizeof(AdapterInfo);  // Save memory size of buffer

	DWORD dwStatus = GetAdaptersInfo(// Call GetAdapterInfo
		pAdapterInfo,                 // [out] buffer to receive data
		&dwBufLen);   

	// 取得本地适配器结构信息
	if(dwStatus == ERROR_SUCCESS && pAdapterInfo != NULL)
	{
		dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String);
		memcpy(pData->ip,  (unsigned  char*)&dwLocalIP, 4);	//get IP
		memcpy(pData->mac, pAdapterInfo->Address, 6);		//get MAC
		strcpy(pData->nic, "\\Device\\NPF_");				//
		strcat(pData->nic, pAdapterInfo->AdapterName);		//NIC
		strcpy(pData->nicdes, pAdapterInfo->Description);	//NIC DESCRIPTION
		return true;
	}
*/
	return false;
}

⌨️ 快捷键说明

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