InterfaceDlg.cpp
上传用户:xakehao
上传日期:2013-08-28
资源大小:100k
文件大小:3k
源码类别:

CA认证

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "MyCap.h"
  3. #include "InterfaceDlg.h"
  4. #include "pcap.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. CInterfaceDlg::CInterfaceDlg(CWnd* pParent /*=NULL*/)
  11. : CDialog(CInterfaceDlg::IDD, pParent)
  12. {
  13.   strcpy(m_szName ,"");
  14.   strcpy(m_szNetmask, "");
  15. }
  16. void CInterfaceDlg::DoDataExchange(CDataExchange* pDX)
  17. {
  18. CDialog::DoDataExchange(pDX);
  19. DDX_Control(pDX, IDC_INTERFACE_LIST, m_lstInterface);
  20. }
  21. BEGIN_MESSAGE_MAP(CInterfaceDlg, CDialog)
  22. END_MESSAGE_MAP()
  23. BOOL CInterfaceDlg::OnInitDialog() 
  24. {
  25. CDialog::OnInitDialog();
  26.   pcap_if_t *alldevs;
  27.   pcap_if_t *d;
  28.   u_int netmask;
  29.   int inum = 0;
  30.   int i=0;
  31.   char errbuf[PCAP_ERRBUF_SIZE];
  32.   CString strMsg;
  33. if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
  34. {
  35. strMsg.Format("Error in pcap_findalldevs: %s", errbuf);
  36.     MessageBox(strMsg);
  37.     return FALSE;
  38. }
  39.   CString strText;
  40.   CRect rect;
  41.   m_lstInterface.SetExtendedStyle(m_lstInterface.GetExtendedStyle()|LVS_EX_FULLROWSELECT );
  42. m_lstInterface.GetWindowRect(&rect);
  43. m_lstInterface.InsertColumn(0, "NO.", LVCFMT_LEFT,
  44. rect.Width()*1/10 , 0);
  45. m_lstInterface.InsertColumn(1, "说明", LVCFMT_LEFT,
  46. rect.Width()*9/10 , 0);
  47. m_lstInterface.InsertColumn(2, "Name", LVCFMT_LEFT,
  48. 0, 1);
  49. m_lstInterface.InsertColumn(3, "netmask", LVCFMT_LEFT,
  50. 0, 1);
  51.   
  52. for(d=alldevs; d; d=d->next)
  53. {
  54.     strText.Format("%d", i);
  55.     m_lstInterface.InsertItem(i,strText.GetBuffer(16));
  56. m_lstInterface.SetItemText(i, 1, d->description);
  57. m_lstInterface.SetItemText(i, 2, d->name);
  58.   if(d->addresses != NULL)   
  59.   netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
  60.   else  
  61.   netmask=0xffffff; 
  62. m_lstInterface.SetItemText(i, 3, itoa(netmask,m_szNetmask, 10));
  63.     if (strcmp(d->name, m_szName) == 0)
  64.     {
  65.       m_lstInterface.SetFocus();
  66.       m_lstInterface.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
  67.       m_lstInterface.SetHotItem(i);    
  68.     }
  69.     i++;
  70. }
  71.   pcap_freealldevs(alldevs);
  72. return TRUE; 
  73. }
  74. void CInterfaceDlg::OnOK() 
  75. {
  76.   if (!m_lstInterface.GetItemCount( ))
  77.   {    
  78.     return;  
  79.   }
  80.   POSITION pos = m_lstInterface.GetFirstSelectedItemPosition();
  81.   if (pos == NULL)
  82.   {
  83.     MessageBox("No items were selected!");
  84.     return;
  85.   }
  86.   else
  87.   {
  88.      if (pos)
  89.      {
  90.         int nItem = m_lstInterface.GetNextSelectedItem(pos);
  91.         TRACE1("Item %d was selected!n", nItem);
  92.         m_lstInterface.GetItemText(nItem, 1, m_szDescription, 255);
  93.         m_lstInterface.GetItemText(nItem, 2, m_szName, 255);       
  94.      }
  95.   }
  96. CDialog::OnOK();
  97. }