MFC+WinPcap編寫一個嗅探器之四(獲取模塊)


這一節主要介紹如何獲取設備列表,比較簡單

獲取設備列表主要是在CAdpDlg中完成,也就是對應之前創建的選擇適配器模塊,如圖:

當打開選擇適配器對話框后,在列表視圖控件中顯示當前主機所有適配器及適配器的描述,當選中一個適配器時,在下方的編輯框中會顯示當前選中的適配器,單擊綁定會提示網卡綁定成功。

本節中代碼都在AdpDlg.cpp中完成,當然變量的聲明要在其對應的頭文件中去做,這里就不再敘述。

首先要獲取設備列表,在OnInitDialog函數中加入如下代碼:

1 if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
2         return FALSE;

這樣主機上的所有設備就放入alldevs這個鏈表中,我們將鏈表中的每個設備依次輸出到列表視圖控件中去:

1 for(d=alldevs; d; d=d->next)
2     {
3         m_list1.InsertItem(0,(CString)d->name);        //d->name的類型是char *,需要強制轉換為CString才能在InsertItem中顯示
4         m_list1.SetItemText(0,1,(CString)d->description);
5     }
6     d = NULL; //清空以便其他函數使用

注意在MFC中不接受char類型的字符串變量,所有字符串變量應該是用CString類型,類似與C++中的string類型。接下來我們想要在列表視圖控件中選擇一個設備,然后在下面的編輯框中顯示,這時需要列表視圖控件的一個觸發函數。在屬性也中選擇對應列表視圖空間的屬性,選擇控制事件(閃電),然后找到NM_CLICK,點擊一下就會生成函數,在函數中添加如下代碼:

 1 void CAdpDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
 2 {
 3     LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
 4     // TODO: 在此添加控件通知處理程序代碼
 5     *pResult = 0;
 6 
 7        
 8     NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR;   
 9 
10     if (-1 != pNMListView->iItem)        // 如果iItem不是-1,就說明有列表項被選擇   
11     {   
12         // 獲取被選擇列表項第一個子項的文本   
13         adpname = m_list1.GetItemText(pNMListView->iItem, 0);   
14         // 將選擇的語言顯示與編輯框中   
15         SetDlgItemText(IDC_EDIT1, adpname);   
16     }   
17 }

之后根據用戶的選擇返回獲取的設備:

 1 //返回已選中設備
 2 pcap_if_t* CAdpDlg::GetDevice()
 3 {
 4     if(adpname)
 5     {
 6         for(d=alldevs; d; d=d->next)
 7             if(d->name == adpname)
 8                 return d;
 9     }
10     return NULL;
11 }

單擊綁定時檢查是否合法:

 1 void CAdpDlg::OnBnClickedOk()
 2 {
 3     // TODO: 在此添加控件通知處理程序代碼
 4     d = GetDevice();
 5     if(d)
 6     {
 7         MessageBox(_T("網卡綁定成功!"));
 8         CDialogEx::OnOK();
 9     }
10     else
11         MessageBox(_T("請選擇要綁定的網卡"));
12 }

 這樣獲取模塊就完成的差不多了

 

下一節 MFC+WinPcap編寫一個嗅探器之五(過濾模塊)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM