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

📄 detect.cpp

📁 ARP test mode. According to the idea we design the arithmetic for the key part, first the system sen
💻 CPP
字号:
// Detect.cpp : implementation file
//

#include "stdafx.h"
#include "LANDetect.h"
#include "Detect.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BYTE n[4],n1[4],n2[4];
/////////////////////////////////////////////////////////////////////////////
// CDetect dialog


CDetect::CDetect(CWnd* pParent /*=NULL*/)
	: CDialog(CDetect::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDetect)
	m_bmac = _T("");
	m_sec = 0;
	m_check = FALSE;
	m_frequency = -1;
	m_type = -1;
	//}}AFX_DATA_INIT
}


void CDetect::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDetect)
	DDX_Control(pDX, IDC_IPADDRESS_GATEWAY, m_gateway);
	DDX_Control(pDX, IDC_IPADDRESS_SRC, m_src);
	DDX_Control(pDX, IDC_IPADDRESS_DST, m_dst);
	DDX_Text(pDX, IDC_EDIT_BOGUS_MAC, m_bmac);
	DDV_MaxChars(pDX, m_bmac, 17);
	DDX_Text(pDX, IDC_EDIT_SEC, m_sec);
	DDX_Check(pDX, IDC_CHECK, m_check);
	DDX_Radio(pDX, IDC_RADIO_NOW, m_frequency);
	DDX_Radio(pDX, IDC_RADIO_ARP, m_type);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDetect, CDialog)
	//{{AFX_MSG_MAP(CDetect)
	ON_BN_CLICKED(IDC_CHECK, OnCheck)
	ON_BN_CLICKED(IDC_RADIO_TIME, OnRadioTime)
	ON_BN_CLICKED(IDC_RADIO_NOW, OnRadioNow)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDetect message handlers

void CDetect::OnOK() 
{
	UpdateData();
	m_src.GetAddress(n1[0],n1[1],n1[2],n1[3]);           //获得IP地址
	m_src_str.Format("%d.%d.%d.%d",int(n1[0]),int(n1[1]),int(n1[2]),int(n1[3]));       //测试IP控件
	m_dst.GetAddress(n2[0],n2[1],n2[2],n2[3]);
	m_dst_str.Format("%d.%d.%d.%d",int(n2[0]),int(n2[1]),int(n2[2]),int(n2[3])); 
	if(m_check==1)               //判断IP段的合法性
	{
		if(n2[2]<n1[2])
		{
			MessageBox("终止地址应大于起始地址!");
			return;
		}
		else if(n2[2]==n1[2]&&n2[3]<n1[3])
		{
			MessageBox("终止地址应大于起始地址!");
			return;
		}
		if(n1[0]!=n2[0]||n1[1]!=n2[1])
		{
			MessageBox("不支持A类或B类网!");
			return;
		}
	}
	//判断MAC地址的合法性
	if(m_bmac.GetLength()!=17)
	{
		MessageBox("MAC地址输入错误,请重新输入!");
		return;
	}
	char p;
	for(int i=0;i<17;i++)
	{
		p=m_bmac.GetAt(i);
		if((i+1)%3!=0)
		{
			if(p>'F'||p<'0')
			{
				MessageBox("MAC地址输入错误,请重新输入!");
				return;
			}
		}
		else
		{
			if(p!=':')
			{
				MessageBox("MAC地址输入错误,请重新输入!");
				return;
			}
		}
	}
	if(m_type==1)
	{
		MessageBox("ICMP测试对Windows 98以上版本的操作系统不支持!");
		return;
	}
	//判断监测周期设置的合法性
	if(m_frequency==1&&m_sec<30)
	{
		MessageBox("监测周期至少为30秒!");
		return;
	}
	//记录设置的参数
	bmac=m_bmac;
	check=m_check;
	frequency=m_frequency;
	type=m_type;
	sec=m_sec;
	for(i=0;i<4;i++)
	{
		m1[i]=n1[i];
		m2[i]=n2[i];
	}
	CDialog::OnOK();
}

BOOL CDetect::OnInitDialog() 
{
	CDialog::OnInitDialog();
	//初始化
	if(check==false)
		GetDlgItem(IDC_IPADDRESS_DST)->EnableWindow(false);
	else
	{
		GetDlgItem(IDC_IPADDRESS_DST)->EnableWindow(true);
		m_dst.SetAddress(m2[0],m2[1],m2[2],m2[3]);
	}
	if(frequency==0)
		GetDlgItem(IDC_EDIT_SEC)->EnableWindow(false);
	else
		GetDlgItem(IDC_EDIT_SEC)->EnableWindow(true);
	m_check=check;
	m_src.SetAddress(m1[0],m1[1],m1[2],m1[3]);
	m_gateway.SetAddress(m1[0],m1[1],m1[2],1);
	//m_OwnIp.SetAddress()
	m_bmac=bmac;              //假MAC地址
	m_type=type;
	m_frequency=frequency;
	m_sec=sec;
	UpdateData(false);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDetect::OnCheck() 
{
	// TODO: Add your control notification handler code here
	CButton *pBtn=(CButton*)GetDlgItem(IDC_CHECK);
	if(pBtn->GetCheck())                           //选中复选框,设置IP控件中的值
	{
		GetDlgItem(IDC_IPADDRESS_DST)->EnableWindow(true);
		UpdateData();
		m_src.GetAddress(n[0],n[1],n[2],n[3]);
		m_dst.SetAddress(n[0],n[1],n[2],255);
	}
	else
		GetDlgItem(IDC_IPADDRESS_DST)->EnableWindow(false);
}

void CDetect::OnRadioTime() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_EDIT_SEC)->EnableWindow(true);
}

void CDetect::OnRadioNow() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_EDIT_SEC)->EnableWindow(false);
	m_sec=30;
	UpdateData(false);
}

⌨️ 快捷键说明

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