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


// DlgAdp.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "SnifferPro.h" 
#include "DlgAdp.h" 
#include "MainFrm.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
pcap_if_t *alldevs; 
pcap_if_t *dev; 
char errbuf[PCAP_ERRBUF_SIZE]; 
CString a; 
///////////////////////////////////////////////////////////////////////////// 
// CDlgAdp dialog 
 
 
CDlgAdp::CDlgAdp(CWnd* pParent /*=NULL*/) 
	: CDialog(CDlgAdp::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CDlgAdp) 
		// NOTE: the ClassWizard will add member initialization here 
	//}}AFX_DATA_INIT 
} 
 
void CDlgAdp::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CDlgAdp) 
	DDX_Control(pDX, IDC_ADP_LIST, m_listCtrl); 
	DDX_Control(pDX, IDC_ADP_TREE, m_treeCtrl); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CDlgAdp, CDialog) 
	//{{AFX_MSG_MAP(CDlgAdp) 
	ON_NOTIFY(NM_DBLCLK, IDC_ADP_TREE, OnDbClkTreeAdp) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDlgAdp message handlers 
 
void CDlgAdp::OnOK()  
{ 
	// TODO: Add extra validation here 
 
	if(dev==NULL){ 
		MessageBox("请双击选择网卡!"); 
		return; 
	} 
	if(dev->addresses==NULL){ 
		MessageBox("不能选择虚拟网卡!"); 
		return; 
	} 
	MessageBox("网卡绑定成功!"); 
	CDialog::OnOK(); 
} 
 
void CDlgAdp::OnCancel()  
{ 
	// TODO: Add extra cleanup here 
	 
	CDialog::OnCancel(); 
} 
 
void CDlgAdp::OnDbClkTreeAdp(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	HTREEITEM h=m_treeCtrl.GetSelectedItem(); 
	if (m_treeCtrl.GetParentItem(h)==NULL) 
		return; 
	dev=alldevs; 
 
	while(strcmp(dev->name,m_treeCtrl.GetItemText(h))!=0)//找到被选中网卡 
		dev=dev->next; 
	m_listCtrl.DeleteAllItems(); 
	m_listCtrl.InsertItem(0,"Name",0); 
	m_listCtrl.InsertItem(1,"Description",0); 
	m_listCtrl.InsertItem(2,"IP Address",0); 
	m_listCtrl.InsertItem(3,"Broad Address",0); 
	m_listCtrl.InsertItem(4,"SubNet Mask",0); 
	m_listCtrl.InsertItem(5,"MAC Address",0); 
	 
	 
	if(dev!=NULL){//显示选中网卡内容 
		char temp[12]; 
		if(dev->name!=NULL){ 
			m_listCtrl.SetItemText(0,1,dev->name); 
		} 
		else{ 
			m_listCtrl.SetItemText(0,1,"Not Found"); 
		} 
		if(dev->description!=NULL){ 
			m_listCtrl.SetItemText(1,1,dev->description); 
		} 
		else{ 
			m_listCtrl.SetItemText(1,1,"Not Found"); 
		} 
		if(dev->addresses!=NULL && dev->addresses->addr!=NULL){ 
			iptos(((struct sockaddr_in *)dev->addresses->addr)->sin_addr.s_addr,temp); 
			m_listCtrl.SetItemText(2,1,temp); 
			a=m_listCtrl.GetItemText(2,1); 
		} 
		else{ 
			m_listCtrl.SetItemText(2,1,"Not Found"); 
		} 
		if(dev->addresses!=NULL && dev->addresses->broadaddr!=NULL){ 
			iptos(((struct sockaddr_in *)dev->addresses->broadaddr)->sin_addr.s_addr,temp); 
			m_listCtrl.SetItemText(3,1,temp); 
		} 
		else{ 
			m_listCtrl.SetItemText(3,1,"Not Found"); 
		} 
		if(dev->addresses!=NULL && dev->addresses->netmask!=NULL){ 
			iptos(((struct sockaddr_in *)dev->addresses->netmask)->sin_addr.s_addr,temp); 
			m_listCtrl.SetItemText(4,1,temp); 
		}	 
		else{ 
			m_listCtrl.SetItemText(4,1,"Not Found"); 
		} 
		if(dev->addresses!=NULL && dev->addresses->dstaddr!=NULL){ 
			iptos(((struct sockaddr_in *)dev->addresses->dstaddr)->sin_addr.s_addr,temp); 
			m_listCtrl.SetItemText(5,1,temp); 
		} 
		else{ 
			m_listCtrl.SetItemText(5,1,"Not Found"); 
		} 
	} 
	//MessageBox("Output OK"); 
	*pResult = 0; 
} 
 
BOOL CDlgAdp::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
 
	HICON	hIcon[2]; 
	hIcon[0]=AfxGetApp()->LoadIcon(IDI_ICON_NO); 
	hIcon[1]=AfxGetApp()->LoadIcon(IDI_ICON_YES); 
 
	m_imageList.Create(12,12,0,3,3); 
	m_imageList.Add(hIcon[0]); 
	m_imageList.Add(hIcon[1]); 
 
	HTREEITEM root = m_treeCtrl.InsertItem(_T("Network Adpater")); 
 
	if(alldevs==NULL){//查找所有网卡 
		if (pcap_findalldevs(&alldevs, errbuf) == -1) 
			return FALSE; 
	} 
 
	pcap_if_t *tempdev=dev; 
	for(dev=alldevs;dev!=NULL;dev=dev->next){ 
		char *temp; 
		temp=dev->name; 
		HTREEITEM h=m_treeCtrl.InsertItem(_T(temp),root); 
		//m_treeCtrl.SetItemImage(h,0,1); 
	} 
	dev=tempdev; 
 
	DWORD log = GetWindowLong(m_listCtrl.GetSafeHwnd(),GWL_STYLE); 
	log |= LVS_REPORT; 
	SetWindowLong(m_listCtrl.GetSafeHwnd(),GWL_STYLE,log); 
	m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT); 
	m_listCtrl.InsertColumn(0,"Field",LVCFMT_LEFT,150); 
	m_listCtrl.InsertColumn(1,"Value",LVCFMT_LEFT,300); 
	m_treeCtrl.Expand(root,TVE_EXPAND); 
	 
	if(dev!=NULL){//当前已有网卡被绑定,责显示该网卡信息 
		char temp[12]; 
 
		m_listCtrl.DeleteAllItems(); 
		m_listCtrl.InsertItem(0,"Name",0); 
		m_listCtrl.InsertItem(1,"Description",0); 
		m_listCtrl.InsertItem(2,"IP Address",0); 
		m_listCtrl.InsertItem(3,"Broad Address",0); 
		m_listCtrl.InsertItem(4,"SubNet Mask",0); 
		m_listCtrl.InsertItem(5,"MAC Address",0); 
		if(dev->name!=NULL){ 
			m_listCtrl.SetItemText(0,1,dev->name); 
		} 
		else{ 
			m_listCtrl.SetItemText(0,1,"Not Found"); 
		} 
		if(dev->description!=NULL){ 
			m_listCtrl.SetItemText(1,1,dev->description); 
		} 
		else{ 
			m_listCtrl.SetItemText(1,1,"Not Found"); 
		} 
		if(dev->addresses!=NULL && dev->addresses->addr!=NULL){ 
			iptos(((struct sockaddr_in *)dev->addresses->addr)->sin_addr.s_addr,temp); 
			m_listCtrl.SetItemText(2,1,temp); 
		} 
		else{ 
			m_listCtrl.SetItemText(2,1,"Not Found"); 
		} 
		if(dev->addresses!=NULL && dev->addresses->broadaddr!=NULL){ 
			iptos(((struct sockaddr_in *)dev->addresses->broadaddr)->sin_addr.s_addr,temp); 
			m_listCtrl.SetItemText(3,1,temp); 
		} 
		else{ 
			m_listCtrl.SetItemText(3,1,"Not Found"); 
		} 
		if(dev->addresses!=NULL && dev->addresses->netmask!=NULL){ 
			iptos(((struct sockaddr_in *)dev->addresses->netmask)->sin_addr.s_addr,temp); 
			m_listCtrl.SetItemText(4,1,temp); 
		}	 
		else{ 
			m_listCtrl.SetItemText(4,1,"Not Found"); 
		} 
		if(dev->addresses!=NULL && dev->addresses->dstaddr!=NULL){ 
			iptos(((struct sockaddr_in *)dev->addresses->dstaddr)->sin_addr.s_addr,temp); 
			m_listCtrl.SetItemText(5,1,temp); 
		} 
		else{ 
			m_listCtrl.SetItemText(5,1,"Not Found"); 
		} 
	}//当前已有网卡被绑定,责显示该网卡信息 
 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
}