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

📄 mento supplicantdlg.cpp

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

#include "stdafx.h"
#include "Mento Supplicant.h"
#include "Mento SupplicantDlg.h"
#include <Winsock2.h>
#include "pcap.h" 
#include "md5.h"
#include "global.h"
#include "Shellapi.h"
#include <stdio.h>
#include "Ping.h"
#include "Iphlpapi.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define IPTOSBUFFERS		12
#define PCAP_SUCCESS		0
#define MAX_ERROR_REPEAT	3

#define DEFAULT_RETRY_INTERVAL	5000

#define DEBUG_SECTION_NAME	"DebugInfo"
#define PING_INTERVAL		2000
#define MAX_PING_ERRORS		5

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
#pragma comment(lib,"ws2_32")
#pragma comment(lib,"wpcap")

typedef unsigned long   IPAddr;     // An IP address.

char *iptos(u_long in, byte BIP[4]);
void beginrz();
byte * ComputeHash(byte * src,int i);
UINT MainCertThread(LPVOID pParam);
UINT JudgeNetState(LPVOID pParam);
byte Alog(byte DWForAlog);
static byte ackShida[] = {				//实达专有响应附加包,格式未了解   soar@2005-12-30 
		0xFF,0xFF,0x37,0x77,0xFF,0x00,	//Destination
		0x00,0x00,0x00,0x00,0x00,0x00,	//Source
		0x00,0x00,						//Ethertype = 0x888E (8021X)
		0x00,							//Version = 1
		0x00,							//Packet Type  0x00 ;0x01,EAPOL-Start ;0x02 ;0x03 ;0x04
		0x00,0x00,						//Packet Body Length
		0x00,0x00,0x00,0x08,0x15,
		0x00,0x00,0x13,0x11,0x38,0x30,0x32,0x31,0x78,0x2E,0x65,0x78,0x65,0x00,0x00,0x00,
		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
		0x00,0x00,0x00,0x00,
		0x02,0x33,0x00,0x00,0x01,		// 为版本号2.51
		0x00,0x00,0x13,0x11,0x00,0x28,0x1A,0x28,0x00,0x00,0x13,0x11,0x17,0x22,				// 此段总不变

		0x93,0x91,0x65,0x65,0x62,0x60,0x66,0x96,0x93,0x68,0x91,0x62,0x91,0x67,0x66,0x61,	// 随机生成
		0x96,0x91,0x64,0x68,0x93,0x62,0x69,0x64,0x61,0x69,0xc9,0xD3,0x62,0x65,0x67,0x68,	// 随机生成

		0x00,0x00,0x13,0x11,0x18,0x06}; //此段总不变
	  //0x00,0x00,0x13,0x11,0x18,0x06,0x00,0x00,0x00 //总不变

static byte StandardAddr[]	= {0x01,0x80,0xC2,0x00,0x00,0x03};
static byte StarAddr[]		= {0x01,0xD0,0xF8,0x00,0x00,0x03};
class CAboutDlg : public CDialog
{
public:
	CAboutDlg();
	CFont m_fBrandFont;

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	CStatic	m_LabelBrand;
	CStatic	m_LabelDeclare;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	DDX_Control(pDX, IDC_LABEL_BRAND, m_LabelBrand);
	DDX_Control(pDX, IDC_LABEL_DECLARE, m_LabelDeclare);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMentoSupplicantDlg dialog

CMentoSupplicantDlg::CMentoSupplicantDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMentoSupplicantDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMentoSupplicantDlg)
	m_sPassword = _T("");
	m_sName = _T("");
	m_iSelectedMode = -1;
	m_bAutoConnectCheck = FALSE;
	m_bConnectMinimize = FALSE;
	m_iCallWay = -1;
	m_bStartupConnect = FALSE;
	m_bSelfIntervalCheck = FALSE;
	m_iSelfInterval = 5000;
	m_bIntelligentReconnect = FALSE;
	m_bArtificalAddressEnable = FALSE;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_pNICs = NULL;
	m_bTimerValidSign = false;
	sStartupConnectKeyName = "Mento Supplicant";
	m_DebugMode_set = 0;
	m_NIC_Selected = false;
	m_iState = IDT_DISCONNECT;
	m_bInitProcessing = true;
	m_bIntelligentReconnect = false;
	m_bNICInitSign = false;
	m_pCurrentNIC = NULL;
	m_bMinimizeModeSign = false;
	bLargeSign = true;
	m_bIsStartupConnect = false;
	m_bFreshSign = true;
	m_ServerMsgSign = false;
}

void CMentoSupplicantDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMentoSupplicantDlg)
	DDX_Control(pDX, IDC_BRAND, m_BrandLabel);
	DDX_Control(pDX, IDC_HOTKEY_SHOW, m_HotKey);
	DDX_Control(pDX, IDC_OPTION, m_OptionTab);
	DDX_Control(pDX, IDC_OUTPUT_LIST, m_OutputCtl);
	DDX_Control(pDX, IDC_NIC_SELECTED, m_NIC_Select);
	DDX_Text(pDX, IDC_PASSWORD, m_sPassword);
	DDV_MaxChars(pDX, m_sPassword, 30);
	DDX_Text(pDX, IDC_USERNAME, m_sName);
	DDV_MaxChars(pDX, m_sName, 30);
	DDX_Radio(pDX, IDC_MODE_STANDARD, m_iSelectedMode);
	DDX_Check(pDX, IDC_AUTO_CONNECT, m_bAutoConnectCheck);
	DDX_Check(pDX, IDC_CONNECT_MINIMIZE, m_bConnectMinimize);
	DDX_Radio(pDX, IDC_CALL_SHELLICON, m_iCallWay);
	DDX_Check(pDX, IDC_STARTUP_RUN, m_bStartupConnect);
	DDX_Check(pDX, IDC_SELF_ECHO_INTERVAL_CHECK, m_bSelfIntervalCheck);
	DDX_Text(pDX, IDC_ECHOINTERVAL, m_iSelfInterval);
	DDX_Text(pDX, IDC_IPADDRESS,m_IP_set);
	DDX_Check(pDX, IDC_INTELLIGENCE_RECONNECT, m_bIntelligentReconnect);
	DDX_Check(pDX, IDC_ARTIFICALADDRESS_ENABLE, m_bArtificalAddressEnable);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMentoSupplicantDlg, CDialog)
	//{{AFX_MSG_MAP(CMentoSupplicantDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_EXIT, OnExit)
	ON_BN_CLICKED(IDC_START_CERT, OnStartCert)
	ON_BN_CLICKED(IDC_END_CERT, OnEndCert)
	ON_BN_CLICKED(IDC_MINIMIZE, OnMinimize)
	ON_WM_TIMER()
	ON_MESSAGE(WM_HOTKEY,OnHotKey)
	ON_BN_CLICKED(IDC_ABOUT, OnAbout)
	ON_BN_CLICKED(IDC_EXPAND, OnExpand)
	ON_BN_CLICKED(IDC_AUTO_CONNECT, OnAutoConnect)
	ON_NOTIFY(TCN_SELCHANGING, IDC_OPTION, OnSelchangingOption)
	ON_NOTIFY(TCN_SELCHANGE, IDC_OPTION, OnSelchangeOption)
	ON_BN_CLICKED(IDC_CONNECT_MINIMIZE, OnConnectMinimize)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_CALL_HOTKEY, OnCallHotkey)
	ON_BN_CLICKED(IDC_CALL_SHELLICON, OnCallShellIcon)
	ON_CBN_SELCHANGE(IDC_NIC_SELECTED, OnSelchangeNicSelected)
	ON_BN_CLICKED(IDC_STARTUP_RUN, OnStartupConnect)
	ON_BN_CLICKED(IDC_SELF_ECHO_INTERVAL_CHECK, OnEchoInterval)
	ON_BN_CLICKED(IDC_INTELLIGENCE_RECONNECT, OnInteligenceReconnect)
	ON_BN_CLICKED(IDC_ARTIFICALADDRESS_ENABLE, OnArtificalAddressEnable)
	ON_LBN_ERRSPACE(IDC_OUTPUT_LIST, OnErrspaceOutputList)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMentoSupplicantDlg message handlers

BOOL CMentoSupplicantDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	m_bInitProcessing = true;

	//m_fBrandFont.CreatePointFont(160,"Times New Roman");
	m_fBrandFont.CreateFont(24, 0, 0, 0, 700, 0, 0, 0, 1, 0, 0, 0, 0, _T("Times New Roman") );
	m_BrandLabel.SetFont( &m_fBrandFont, TRUE );
	m_BrandLabel.EnableWindow(false);

	SetForegroundWindow();
	CheckAndSetButtonStatus();
	
	if ( !InitNICs() )
	{
		PrintOutput( "初始化网卡错误请,设为Debug模式以查找原因",
			" ** 初始化网卡错误!!", true );
		return false;
	}

	if ( !InitCertParamater() )
	{
		PrintOutput( "初始化认证设置错误,请设为Debug模式以查找原因",
			" ** 初始化认证设置错误!!", true );
		return false;
	}

	if ( !InitInterface() )
	{
		PrintOutput( "初始化界面选项错误,请设为Debug模式以查找原因!!", 
			" ** 初始化界面选项错误", true );
		return false;
	}

	

	UpdateData(false);

	m_bInitProcessing = false;
	if ( m_bAutoConnectCheck || m_bIsStartupConnect )
	{
		OnStartCert();
		m_bAutoConnectCheck = false;
	}
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMentoSupplicantDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		switch( nID )
		{
		case SC_MINIMIZE:
			OnMinimize();
			break;
		case IDT_FIND_SERVER:
			SwitchSystemState( nID );
			break;
		case IDT_ACK_NAME:
			SwitchSystemState( nID );
			break;
		case IDT_ACK_PSWD:
			SwitchSystemState( nID );
			break;
		case IDT_ACK_ECHO:
			SwitchSystemState( nID );
			break;
		case IDT_DISCONNECT:
			SwitchSystemState( nID );
			break;
		case IDSHELL_FAILED:
			SwitchSystemState( nID );
		default:
			CDialog::OnSysCommand(nID, lParam);
		}
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMentoSupplicantDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMentoSupplicantDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMentoSupplicantDlg::OnExit() 
{
	CMentoSupplicantApp *pApp = (CMentoSupplicantApp*)AfxGetApp();

	OnEndCert();
	SaveSettings();
	pApp->bExitSign = true;
	PostQuitMessage(0);
}

void CMentoSupplicantDlg::OnStartCert() 
{
	CMentoSupplicantApp *pApp = (CMentoSupplicantApp*)AfxGetApp();

	WriteDebugInfo("StartCert"," >> Step 0");
	if ( !InitNICParamater() )
		return;

	pApp->bExitSign = false ;

	WriteDebugInfo("StartCert"," >> Step 1");
	UpdateData();
	SaveSettings();
	Blog();
	DoStartCert();
	WriteDebugInfo("StartCert"," >> Step 2");
}

void CMentoSupplicantDlg::OnEndCert() 
{
	CMentoSupplicantApp *pApp = (CMentoSupplicantApp*)AfxGetApp();

	WriteDebugInfo("EndCert"," >> Step 0");
	SaveSettings();

	pApp->bExitSign = true;
	m_bIsStartupConnect = false;

	WriteDebugInfo("EndCert"," >> Step 1");
	DisableTimer();
	SwitchSystemState( IDT_DISCONNECT );
	SendEndCertPacket();

	PrintOutput(" :: 认证成功退出!!");
	WriteDebugInfo("EndCert"," >> Step 2");
}

void CMentoSupplicantDlg::OnTimer(UINT nIDEvent) 
{
	WriteDebugInfo("TimerFun"," >> Step 0");
	if ( nIDEvent == CERT_CYCLE_TIMER )
		SendPackage();
	WriteDebugInfo("TimerFun"," >> Step 1");

	CDialog::OnTimer(nIDEvent);
}

void CMentoSupplicantDlg::OnAbout() 
{
	CAboutDlg dlgAbout;
	dlgAbout.DoModal();
}

void CMentoSupplicantDlg::OnRestore() 
{
	m_bMinimizeModeSign = false;
	m_Notify.uFlags=NULL;
	UnregisterHotKey ( GetSafeHwnd(), ICK_HOTKEY );
	Shell_NotifyIcon(NIM_DELETE,&m_Notify);

⌨️ 快捷键说明

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