?? mento supplicantdlg.cpp
字號:
// 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[] = { //實達(dá)專有響應(yīng)附加包,格式未了解 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, // 隨機(jī)生成
0x96,0x91,0x64,0x68,0x93,0x62,0x69,0x64,0x61,0x69,0xc9,0xD3,0x62,0x65,0x67,0x68, // 隨機(jī)生成
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( "初始化網(wǎng)卡錯誤請,設(shè)為Debug模式以查找原因",
" ** 初始化網(wǎng)卡錯誤!!", true );
return false;
}
if ( !InitCertParamater() )
{
PrintOutput( "初始化認(rèn)證設(shè)置錯誤,請設(shè)為Debug模式以查找原因",
" ** 初始化認(rèn)證設(shè)置錯誤!!", true );
return false;
}
if ( !InitInterface() )
{
PrintOutput( "初始化界面選項錯誤,請設(shè)為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(" :: 認(rèn)證成功退出!!");
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);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -