www.pudn.com > SnifferPro.rar > DlgDet.cpp


// DlgDet.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "SnifferPro.h" 
#include "DlgDet.h" 
#include  
#include "ARPPacket.h" 
#include "MainFrm.h" 
#include       
#include     
#include "pcap.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
extern pcap_if_t *alldevs; 
extern pcap_if_t *dev; 
extern char errbuf[PCAP_ERRBUF_SIZE]; 
extern CString a; 
HWND result_hnd; 
int num;  
BYTE n[4],n1[4],n2[4]; 
bool bexit; 
CString m_targetip; 
//CTime from,to; 
///////////////////////////////////////////////////////////////////////////// 
// CDlgDet dialog 
 
CDlgDet::CDlgDet(CWnd* pParent /*=NULL*/) 
	: CDialog(CDlgDet::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CDlgDet) 
	m_check = FALSE; 
	m_bmac = _T(""); 
	m_message = _T(""); 
	m_sec = 0; 
	m_2 = _T(""); 
	m_3 = _T(""); 
	m_4 = _T(""); 
	m_time = 0; 
	m_1 = _T(""); 
	//}}AFX_DATA_INIT 
} 
 
 
void CDlgDet::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CDlgDet) 
	DDX_Control(pDX, IDC_LIST_RESULT, m_result); 
	DDX_Control(pDX, IDC_IPADDRESS_SRC, m_src); 
	DDX_Control(pDX, IDC_IPADDRESS_DST, m_dst); 
	DDX_Check(pDX, IDC_CHECK1, m_check); 
	DDX_Text(pDX, IDC_EDITMAC, m_bmac); 
	DDX_Text(pDX, IDC_MESSAGE, m_message); 
	DDX_Text(pDX, IDC_EDITSEC, m_sec); 
	DDX_Text(pDX, IDC_EDIT3, m_2); 
	DDX_Text(pDX, IDC_EDIT4, m_3); 
	DDX_Text(pDX, IDC_EDIT5, m_4); 
	DDX_Radio(pDX, IDC_RADIO_NOW, m_time); 
	DDX_Text(pDX, IDC_EDIT2, m_1); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CDlgDet, CDialog) 
	//{{AFX_MSG_MAP(CDlgDet) 
	ON_BN_CLICKED(IDC_CHECK1, OnCheck1) 
	ON_BN_CLICKED(IDC_RADIO_NOW, OnRadioNow) 
	ON_BN_CLICKED(IDC_RADIO_TIME, OnRadioTime) 
	ON_BN_CLICKED(IDC_STARTANTI, OnStartanti) 
	ON_BN_CLICKED(IDC_STOPANTI, OnStopanti) 
	ON_BN_CLICKED(IDC_CLEAR, OnClear) 
	ON_BN_CLICKED(IDC_SEND, OnSend) 
	ON_NOTIFY(NM_CLICK, IDC_LIST_RESULT, OnClickListResult) 
	ON_BN_CLICKED(IDC_BAND, OnBand) 
	ON_BN_CLICKED(IDC_SAVE, OnSave) 
	ON_WM_TIMER() 
	ON_BN_CLICKED(IDC_RADIO4, OnRadioTimer) 
	ON_BN_CLICKED(IDC_RADIO_TIMER, OnRadioTimer) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDlgDet message handlers 
 
 
BOOL CDlgDet::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	 
	// TODO: Add extra initialization here 
	DWORD dwStyle=GetWindowLong(m_result.GetSafeHwnd(),GWL_STYLE); 
	dwStyle&=~LVS_TYPEMASK; 
	dwStyle|=LVS_REPORT; 
	SetWindowLong(m_result.GetSafeHwnd(),GWL_STYLE,dwStyle); 
 //   ShowWindow(SW_SHOWMAXIMIZED);//窗口最大化 
    m_result.InsertColumn(0,"IP Address",LVCFMT_LEFT,120); 
	m_result.InsertColumn(1,"Time",LVCFMT_LEFT,200); 
	m_result.InsertColumn(2,"MAC",LVCFMT_LEFT,280); 
	m_result.SetExtendedStyle(LVS_EX_GRIDLINES); 
    ::SendMessage(m_result.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 
      LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);	 
	result_hnd=GetDlgItem(IDC_LIST_RESULT)->m_hWnd;    //获得控件的句柄 
	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]); 
	} 
    CheckRadioButton(IDC_RADIO_NOW,IDC_RADIO_TIME,IDC_RADIO_TIMER); 
	m_check=check; 
	m_src.SetAddress(m1[0],m1[1],m1[2],m1[3]); 
	m_bmac=bmac;              //假MAC地址 
    frequency=0; 
	m_sec=sec; 
	GetDlgItem(IDC_EDITSEC)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT2)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT3)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT4)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT5)->EnableWindow(false); 
	GetDlgItem(IDC_BAND)->EnableWindow(true); 
    GetDlgItem(IDC_IPADDRESS_SRC)->EnableWindow(true); 
	GetDlgItem(IDC_IPADDRESS_DST)->EnableWindow(false); 
	GetDlgItem(IDC_STARTANTI)->EnableWindow(false); 
	GetDlgItem(IDC_CHECK1)->EnableWindow(true); 
	GetDlgItem(IDC_EDITMAC)->EnableWindow(true); 
	GetDlgItem(IDC_STOPANTI)->EnableWindow(false); 
	UpdateData(false); 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CDlgDet::OnCheck1()  
{ 
	// TODO: Add your control notification handler code here 
	CButton *pBtn=(CButton*)GetDlgItem(IDC_CHECK1); 
	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 CDlgDet::OnRadioNow()  
{ 
	// TODO: Add your control not_ification handler code here 
	 m_time=0; 
	GetDlgItem(IDC_EDITSEC)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT2)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT3)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT4)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT5)->EnableWindow(false); 
	m_sec=30; 
		UpdateData(false); 
} 
 
void CDlgDet::OnRadioTime()  
{ 
	// TODO: Add your control notification handler code here 
	m_time=1; 
	GetDlgItem(IDC_EDITSEC)->EnableWindow(true); 
	GetDlgItem(IDC_EDIT2)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT3)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT4)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT5)->EnableWindow(false); 
		UpdateData(false); 
} 
void CDlgDet::OnRadioTimer()  
{ 
	// TODO: Add your control notification handler code here 
	m_time=2; 
	GetDlgItem(IDC_EDITSEC)->EnableWindow(false); 
	GetDlgItem(IDC_EDIT2)->EnableWindow(true); 
	GetDlgItem(IDC_EDIT3)->EnableWindow(true); 
	GetDlgItem(IDC_EDIT4)->EnableWindow(true); 
	GetDlgItem(IDC_EDIT5)->EnableWindow(true); 
	SYSTEMTIME st = {0};  
	GetLocalTime(&st);//获得当前本地时间  
	m_1.Format("%d",st.wHour); 
	m_2.Format("%d",st.wMinute); 
	m_3.Format("%d",st.wHour); 
	m_4.Format("%d",st.wMinute); 
	GetDlgItem(IDC_EDIT2)->SetFocus(); 
    UpdateData(false); 
//	CString aaa=m_1+m_2; 
} 
/* 
======================================================================================================================= 
下面是实现ARP协议分析的函数,函数类型与回调函数相同 
======================================================================================================================= 
 */ 
//void pcap_handle(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data) 
void pcap_callback(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data) 
{ 
    struct arp_header *arp_protocol; 
    u_short operation_code; 
    struct in_addr source_ip_address; 
//	struct in_addr source_mac_address; 
    arp_protocol = (struct arp_header*)(pkt_data + 14); 
    operation_code = ntohs(arp_protocol->arp_operation_code);	 
 
 
	CString filter_ip; 
	filter_ip.Format("%d.%d.%d.%d",m1[0],m1[1],m1[2],1); 
	memcpy((void*) &source_ip_address, (void*) &arp_protocol->arp_source_ip_address, sizeof(struct in_addr)); 
  //  memcpy((void*) &source_mac_address, (void*) &arp_protocol->arp_source_ethernet_address, sizeof(struct in_addr)); 
    CString ip,time,host,mac; 
	ip=inet_ntoa(source_ip_address); 
//	const   char   *mac;     
 //   mac   =   (const   char   *)(&arp_protocol->arp_source_ethernet_address); 
	mac=(char *)(LPCSTR)(&arp_protocol->arp_source_ethernet_address); 
	if(operation_code == 2&&filter_ip!=ip) 
	{ 
		SYSTEMTIME st = {0};  
		GetLocalTime(&st);//获得当前本地时间  
		time.Format("%d-%d-%d %2d:%2d:%2d",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); 
		CDlgDet p; 
		p.m_result.m_hWnd=result_hnd; 
		p.m_result.InsertItem(0,ip,0); 
		p.m_result.SetItemText(0,1,time); 
		p.m_result.SetItemText(0,2,mac); 
		Sleep(500); 
	} 
 
} 
//////////////////////////////////////////// 
UINT ReceiveARPPacket(LPVOID param) 
{ 
	pcap_t *p; 
    /* Winpcap句柄 */ 
    char errbuf[PCAP_ERRBUF_SIZE]; 
    /* 存储错误信息 */ 
    struct bpf_program bpf_filter;	 
    /* BPF过滤规则 */ 
    char *bpf_filter_string = "dst host dev->addresses->addr and arp"; 
    /* 过滤规则字符串 */ 
   // bpf_u_int32 net_mask; 
    /* 掩码 */ 
    bpf_u_int32 net_ip; 
    /* 网路地址 */ 
 
	if((p=pcap_open_live(dev->name,65536,1,1000,errbuf))==NULL){//若网卡无法绑定 
	 	AfxMessageBox("Open the adapter failed!"); 
		return -1; 
	} 
    /* 打开网路接口,设成混杂模式*/ 
    pcap_compile(p, &bpf_filter, bpf_filter_string, 0, net_ip); 
    /* 编译BPF过滤规则 */ 
    pcap_setfilter(p, &bpf_filter); 
    /* 设置过滤规则 */ 
    if (pcap_datalink(p) != DLT_EN10MB) 
        return 0; 
    do{ 
	pcap_loop(p,1, pcap_callback, NULL); 
	}while(!bexit); 
 
	pcap_close(p); 
    /* 关闭Winpcap操作 */ 
	return 0; 
} 
/////////////// 
 
UINT SendARPPacket(LPVOID param) 
{ 
    libnet_t *l; 
	libnet_ptag_t protocol_tag; 
	char *device=NULL; 
	char error_information[LIBNET_ERRBUF_SIZE]; 
	char *destination_ip_str;           //目的IP地址 
    char *source_ip_str=(char *)(LPCSTR)a; 
	u_char hardware_source[6]={0x00,0x1E,0x37,0x33,0x15,0x4A}; 
	u_char hardware_destination[6]; 
	u_long destination_ip; 
	u_long source_ip; 
	CString ip_src,ip_dst; 
	ip_src.Format("%d.%d.%d.%d",int(m1[0]),int(m1[1]),int(m1[2]),int(m1[3])); 
	ip_dst.Format("%d.%d.%d.%d",int(m2[0]),int(m2[1]),int(m2[2]),int(m2[3])); 
	for(int j=1;j<=6;j++)      //获取MAC地址 
	{ 
		hardware_destination[j-1]=GetMAC(j,bmac); 
	} 
	//判断需要发的包 
	    if(check==0) 
		{ 
		   destination_ip_str=(char *)(LPCSTR)ip_src; 
		   destination_ip=libnet_name2addr4(l,destination_ip_str,LIBNET_RESOLVE); 
	       source_ip=libnet_name2addr4(l,source_ip_str,LIBNET_RESOLVE); 
	       l=libnet_init( 
					LIBNET_LINK_ADV, 
					device, 
					error_information); 
        	protocol_tag=libnet_build_arp( 
										ARPHRD_ETHER, 
										ETHERTYPE_IP, 
										6, 
										4, 
										ARPOP_REQUEST, 
										hardware_source, 
										(u_int8_t *)&source_ip, 
										hardware_destination, 
										(u_int8_t *)&destination_ip, 
										NULL, 
										0, 
										l, 
										0 
										); 
			protocol_tag=libnet_autobuild_ethernet( 
										hardware_destination, 
										ETHERTYPE_ARP, 
										l 
										); 
			libnet_write(l); 
			libnet_destroy(l); 
		} 
		else 
		{ 
			BYTE TEMP1[4],TEMP2[4]; 
			for(int i=0;i<4;i++) 
			{ 
				TEMP1[i]=m1[i]; 
				TEMP2[i]=m2[i]; 
			} 
			do 
			{ 
			 
				destination_ip_str=(char *)(LPCSTR)ip_src; 
				destination_ip=libnet_name2addr4(l,destination_ip_str,LIBNET_RESOLVE); 
				source_ip=libnet_name2addr4(l,source_ip_str,LIBNET_RESOLVE); 
				l=libnet_init( 
							LIBNET_LINK_ADV, 
							device, 
							error_information); 
				protocol_tag=libnet_build_arp( 
											ARPHRD_ETHER, 
											ETHERTYPE_IP, 
											6, 
											4, 
											ARPOP_REQUEST, 
											hardware_source, 
											(u_int8_t *)&source_ip, 
											hardware_destination, 
											(u_int8_t *)&destination_ip, 
											NULL, 
											0, 
											l, 
											0 
											); 
				protocol_tag=libnet_autobuild_ethernet( 
											hardware_destination, 
											ETHERTYPE_ARP, 
											l 
											); 
				libnet_write(l); 
				libnet_destroy(l); 
	 
				if(TEMP1[2]<=TEMP2[2]) 
				{ 
					if(TEMP1[3]=TEMP2[3]&&TEMP1[2]>=TEMP2[2]) 
					break; 
			}while(TEMP1[2]<=255&&TEMP1[3]<=255); 
		} 
	return 0; 
} 
 
////////////////////////////////// 
 
void CDlgDet::OnStartanti()  
{ 
	// TODO: Add your control notification handler code here 
	bexit=false; 
	UpdateData(false); 
	m_result.DeleteAllItems(); 
    GetDlgItem(IDC_BAND)->EnableWindow(false); 
	GetDlgItem(IDC_IPADDRESS_SRC)->EnableWindow(false); 
	GetDlgItem(IDC_IPADDRESS_DST)->EnableWindow(false); 
	GetDlgItem(IDC_STARTANTI)->EnableWindow(false); 
	GetDlgItem(IDC_CHECK1)->EnableWindow(false); 
	GetDlgItem(IDC_EDITMAC)->EnableWindow(false); 
	GetDlgItem(IDC_STOPANTI)->EnableWindow(true); 
	AfxBeginThread(AFX_THREADPROC(ReceiveARPPacket),(LPVOID)this);//启动收包线程 
	if(frequency==0) 
	{ 
		AfxBeginThread(AFX_THREADPROC(SendARPPacket),(LPVOID)this); 
	}//启动发包线程 
	else if(frequency==1) 
	{ 
		if(!bexit) 
		{ 
			AfxBeginThread(AFX_THREADPROC(SendARPPacket),(LPVOID)this); 
	        SetTimer(1,m_sec*1000,NULL); 
		} 
		else return; 
	} 
	else  
	{ 
		SetTimer(2,1000,NULL); 
	} 
} 
 
void CDlgDet::OnStopanti()  
{ 
	// TODO: Add your control notification handler code here 
	bexit=true; 
	if(frequency==1) 
		KillTimer(1); 
	else if(frequency==2) 
	{ 
		KillTimer(1); 
		KillTimer(2); 
	} 
	GetDlgItem(IDC_BAND)->EnableWindow(true); 
    GetDlgItem(IDC_IPADDRESS_SRC)->EnableWindow(true); 
	GetDlgItem(IDC_IPADDRESS_DST)->EnableWindow(false); 
	GetDlgItem(IDC_STARTANTI)->EnableWindow(false); 
	GetDlgItem(IDC_CHECK1)->EnableWindow(true); 
	GetDlgItem(IDC_EDITMAC)->EnableWindow(true); 
	GetDlgItem(IDC_STOPANTI)->EnableWindow(false); 
} 
 
void CDlgDet::OnClear()  
{ 
	// TODO: Add your control notification handler code here 
		m_result.DeleteAllItems(); 
} 
 
void CDlgDet::OnSend()  
{ 
	// TODO: Add your control notification handler code here 
	POSITION pos=m_result.GetFirstSelectedItemPosition(); 
	if(pos==NULL) 
	{ 
		AfxMessageBox("Please choose the target computer:"); 
		return; 
	} 
    wchar_t   wszbuf[100];     
    wchar_t   wsztarget[20];  
	m_message="发现你正在进行监听,请立即关闭监听程序!";    
    int   len=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,m_targetip,-1,NULL,0);    
    MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,m_targetip,-1,wsztarget,len);    
     len=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,m_message,-1,NULL,0);    
    MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,m_message,-1,wszbuf,len);    
    NetMessageBufferSend(NULL,wsztarget,NULL,(LPBYTE)wszbuf,DWORD(2*m_message.GetLength()));    
} 
 
void CDlgDet::OnClickListResult(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	POSITION pos=m_result.GetFirstSelectedItemPosition(); 
    int SelIndex = m_result.GetNextSelectedItem(pos); 
	m_targetip=m_result.GetItemText(SelIndex,0); 
	*pResult = 0; 
} 
 
void CDlgDet::OnBand()  
{ 
	// TODO: Add your control notification handler code here 
	UpdateData(true); 
	frequency=m_time; 
	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]'F'||p<'0') 
			{ 
				MessageBox("MAC地址输入错误,请重新输入!"); 
				return; 
			} 
		} 
		else 
		{ 
			if(p!=':') 
			{ 
				MessageBox("MAC地址输入错误,请重新输入!"); 
				return; 
			} 
		} 
	} 
	//判断监测周期设置的合法性 
	if(frequency==1&&m_sec<30) 
	{ 
		MessageBox("监测周期至少为30秒!"); 
		return; 
	} 
	if(frequency==2) 
	{ 
		CString hnow,mnow; 
		SYSTEMTIME st = {0};  
		GetLocalTime(&st);//获得当前本地时间  
		hnow.Format("%d",st.wHour); 
		mnow.Format("%d",st.wMinute); 
		int hournow=atoi(hnow); 
		int minnow=atoi(mnow); 
		int hourfrom=atoi(m_1); 
		int minutefrom=atoi(m_2); 
		int hourto=atoi(m_3); 
		int minuteto=atoi(m_4); 
		if(hournow>hourfrom) 
		{ 
			 MessageBox("起始时间小于系统当前时间,请重新输入!"); 
			  return; 
		} 
		else 
		{ 
			if(minnow>minutefrom) 
			{ 
				MessageBox("起始时间小于系统当前时间,请重新输入!"); 
				 return;	 
			} 
		} 
		if(hourfrom>hourto) 
		{ 
		    MessageBox("起始时间大于终止时间,请重新输入!"); 
		     return;	 
		} 
		else 
		{ 
			if(minutefrom>minuteto) 
			{ 
				MessageBox("起始时间大于终止时间,请重新输入!"); 
		        return; 
			} 
		/*	else 
			{ 
				CString from=m_1+":"+m_2+":"+"00"; 
				CString to=m_3+":"+m_4+":"+"00"; 
					 COleDateTime   tm1;   
					SYSTEMTIME   st1; 
				  tm1.ParseDateTime(from);         
					 tm1.GetAsSystemTime(st1);    
					CTime   ctfrom(st1);  
					 COleDateTime   tm2;   
					SYSTEMTIME   st2; 
					tm2.ParseDateTime(to);         
				  tm2.GetAsSystemTime(st2);    
				   CTime   ctto(st2); 
      
 
					CTimeSpan t=ctto-ctfrom; 
					LONGLONG longsum=t.GetTotalSeconds();  
					if(longsum <600) 
					{ 
					    MessageBox("监测时间段至少为10分钟,请重新输入!"); 
					     return; 
					} 
			}*/ 
 
		} 
		 
 
	} 
	//记录设置的参数 
	bmac=m_bmac; 
	check=m_check; 
//	frequency=m_frequency; 
	sec=m_sec; 
	for(i=0;i<4;i++) 
	{ 
		m1[i]=n1[i]; 
		m2[i]=n2[i]; 
	} 
 
	GetDlgItem(IDC_BAND)->EnableWindow(false); 
	GetDlgItem(IDC_IPADDRESS_SRC)->EnableWindow(false); 
	GetDlgItem(IDC_IPADDRESS_DST)->EnableWindow(false); 
	GetDlgItem(IDC_STARTANTI)->EnableWindow(true); 
	GetDlgItem(IDC_CHECK1)->EnableWindow(false); 
	GetDlgItem(IDC_EDITMAC)->EnableWindow(false); 
	GetDlgItem(IDC_STOPANTI)->EnableWindow(false); 
} 
 
void CDlgDet::OnSave()  
{ 
	// TODO: Add your control notification handler code here 
	int Count=m_result.GetItemCount(); 
	CFile f; 
	CFileException e; 
	CString strFileName; 
 
	CTime t=CTime::GetCurrentTime(); 
	CString strTime = t.Format( "%d-%H-%M-%S" ); 
	strTime="ANTI_LOG-"+strTime; 
 
	CFileDialog fileDlg(FALSE,"txt",strTime,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"txt",NULL); //TRUE 为打开对话框 
	if(fileDlg.DoModal()==IDOK) 
	{ 
		UpdateData(true); 
		strFileName=fileDlg.GetFileName(); 
		UpdateData(false); 
		 
		if( f.Open(strFileName, CFile::modeCreate | CFile::modeWrite, &e ) ) 
		{ 
		 
			CString str; 
			str="IPAddress            Time                 Host               MAC\r\n\r\n"; 
			f.Write( str, str.GetLength() ); 
 
			for(int i=0;iEnableWindow(true); 
				GetDlgItem(IDC_IPADDRESS_SRC)->EnableWindow(true); 
				GetDlgItem(IDC_IPADDRESS_DST)->EnableWindow(false); 
				GetDlgItem(IDC_STARTANTI)->EnableWindow(false); 
				GetDlgItem(IDC_CHECK1)->EnableWindow(true); 
				GetDlgItem(IDC_EDITMAC)->EnableWindow(true); 
				GetDlgItem(IDC_STOPANTI)->EnableWindow(false); 
			} 
		 break;    
	  }   
	CDialog::OnTimer(nIDEvent);  
}