| 上位机MFC网络抓包源程序源代码   
 如上图,点击开始可以进网络数据抓包。
 调用的按钮函数为
 
 线程函数为复制代码void CIPPackageDlg::OnBstart() 
{
        // TODO: Add your control notification handler code here
        GetDlgItem(IDC_BSTART)->EnableWindow(false);
        GetDlgItem(IDC_BPAUSE)->EnableWindow(true);
        pThread=AfxBeginThread(&WorkThread,0);        
}
 更多可以下载源代码学习。复制代码UINT WorkThread(LPVOID lpParam)
{
        
        CIPPackageDlg *dlg = (CIPPackageDlg*)AfxGetApp()->GetMainWnd();
        CString str;
        int nCount;
        
        while (TRUE) 
        {         
                //接收原始数据包信息 
                int ret = recv(dlg->Socket, dlg->RecvBuf, 65535, 0);                
                nCount = dlg->m_ctrList.GetItemCount();
        
                if (ret > 0) 
                { 
                        dlg->ip = *(IP*)dlg->RecvBuf; 
                        dlg->tcp = *(TCP*)(dlg->RecvBuf + dlg->ip.HdrLen); 
                        str.Format("%s",dlg->GetProtocolTxt(dlg->ip.Protocol)); 
                        dlg->m_ctrList.InsertItem(0, str);                
                        str.Format(" %-15s",inet_ntoa(*(in_addr*)&dlg->ip.SrcAddr)); 
                        dlg->m_ctrList.SetItemText(0, 1, str);
                        str.Format(" %-15s",inet_ntoa(*(in_addr*)&dlg->ip.DstAddr)); 
                        dlg->m_ctrList.SetItemText(0, 2, str);
                        str.Format(" %-5d",dlg->tcp.SrcPort); 
                        dlg->m_ctrList.SetItemText(0, 3, str);
                        str.Format("%-5d",dlg->tcp.DstPort); 
                        dlg->m_ctrList.SetItemText(0, 4, str);
                        str.Format(" %-4d",ntohs(dlg->ip.TotalLen)); 
                        dlg->m_ctrList.SetItemText(0, 5, str);
                } 
        } 
        return 1;
}
 
 |