www.pudn.com > SnmpToplog.rar > MyRoute.cpp


// MyRoute.cpp: implementation of the CMyRoute class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "MySnmp.h" 
#include "MyRoute.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
char SystemName[][20]={"sysDescr","sysObjectID","sysUpTime","sysContact","sysName","sysLocation","sysServices"}; 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CMyRoute::CMyRoute() 
{ 
	m_pDlg=NULL; 
	m_SystemInfo.RemoveAll(); 
	m_ipRouteDest.RemoveAll(); 
	m_ipRouteType.RemoveAll(); 
	m_ipRouteMask.RemoveAll(); 
	m_ipRouteTableName.RemoveAll(); 
	m_ipRouteTableValue.RemoveAll(); 
} 
 
CMyRoute::~CMyRoute() 
{ 
	int nCount=m_SubNets.GetSize(); 
	for(int i=0;iDeleteAllItems(); //删除所有元素 
	int nColumnCount=pList->GetHeaderCtrl()->GetItemCount(); 
	for(int i=0;iDeleteColumn(0); //删除所有列 
	pList->SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); 
	pList->InsertColumn(0,"系统变量名",LVCFMT_LEFT,150); 
	pList->InsertColumn(1,"系统变量值",LVCFMT_LEFT,400); 
	for(i=0;i<=6;i++) 
	{ 
		char buf[5]; 
		sprintf(buf,"%d",i); 
		int nItem=pList->InsertItem(i,buf); 
		pList->SetItemText(nItem,0,SystemName[i]); 
		pList->SetItemText(nItem,1,m_SystemInfo.GetAt(i)); 
	} 
 
} 
 
void CMyRoute::ShowSubNetInfo(CListCtrl *pList) 
{ 
	if(pList==NULL) 
		return; 
	pList->DeleteAllItems(); //删除所有元素 
	int nColumnCount=pList->GetHeaderCtrl()->GetItemCount(); 
	for(int i=0;iDeleteColumn(0); //删除所有列 
	pList->SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); 
	pList->InsertColumn(0,"子网地址",LVCFMT_LEFT,150); 
	pList->InsertColumn(1,"子网掩码",LVCFMT_LEFT,150); 
	pList->InsertColumn(2,"状态",LVCFMT_LEFT,150); 
	pList->InsertColumn(3,"活动主机数量",LVCFMT_LEFT,100); 
	////////////////////////////////////////////////////////////////////////// 
	//显示所有子网 
	if(m_SubNets.GetSize()<=0) 
	{ 
		GetSubNets(); //获取子网 
	} 
	for(i=0;iShowSubNetInfo(pList); 
/* 
		char buf[5]; 
		sprintf(buf,"%d",i); 
		int nItem=pList->InsertItem(i,buf); 
		//子网地址 
		pList->SetItemText(nItem,0,psubNet->m_Address); 
		//子网掩码 
		pList->SetItemText(nItem,1,psubNet->m_Mask); 
		//当前状态 
		if(psubNet->m_nState==0) 
			pList->SetItemText(nItem,2,"正在搜索活动主机..."); 
		else if(psubNet->m_nState==1) 
			pList->SetItemText(nItem,2,"活动主机搜索完毕!"); 
		//活动主机数量 
		char chNumber[10]; 
		itoa(psubNet->m_nActiveNumber,chNumber,10); 
		pList->SetItemText(nItem,3,chNumber); 
		*/ 
	} 
} 
//显示路由表 
void CMyRoute::ShowRouteTable(CListCtrl *pList) 
{ 
	if(pList==NULL) 
		return; 
	int nCount=m_ipRouteTableName.GetSize(); 
	if(nCount<=0) 
	{ 
		AfxMessageBox("没有路由表信息可以显示!"); 
		return; 
	} 
	pList->DeleteAllItems(); //删除所有元素 
	int nColumnCount=pList->GetHeaderCtrl()->GetItemCount(); 
	for(int i=0;iDeleteColumn(0); //删除所有列 
	pList->SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); 
	pList->InsertColumn(0,"路由表变量名",LVCFMT_LEFT,350); 
	pList->InsertColumn(1,"路由表变量值",LVCFMT_LEFT,150); 
	for(i=0;iInsertItem(i,buf); 
		pList->SetItemText(nItem,0,m_ipRouteTableName.GetAt(i)); 
		pList->SetItemText(nItem,1,m_ipRouteTableValue.GetAt(i)); 
	} 
} 
//获取所有子网地址,并保存为子网对象 
void CMyRoute::GetSubNets() 
{ 
	int nCount=m_ipRouteDest.GetSize(); 
	for(int i=0;im_Address=strSubNetNumber; 
				pSubNet->m_Mask=strMask; 
				m_SubNets.Add(pSubNet); 
			} 
		} 
	} 
	////////////////////////////////////////////////////////////////////////// 
//	CMySubNet* pTest=new CMySubNet; 
//	pTest->m_Address="192.168.0.0"; 
//	pTest->m_Mask="255.255.255.0"; 
//	m_SubNets.Add(pTest); 
//	CMySubNet* pTest2=new CMySubNet; 
//	pTest2->m_Address="202.117.98.5"; 
//	pTest2->m_Mask="255.255.255.0"; 
//	m_SubNets.Add(pTest2); 
//	CMySubNet* pTest3=new CMySubNet; 
//	pTest3->m_Address="202.117.96.0"; 
//	pTest3->m_Mask="255.255.255.0"; 
//	m_SubNets.Add(pTest3); 
//	CMySubNet* pTest4=new CMySubNet; 
//	pTest4->m_Address="127.0.0.121"; 
//	pTest4->m_Mask="255.0.0.0"; 
//	m_SubNets.Add(pTest4); 
	////////////////////////////////////////////////////////////////////////// 
	 
} 
/* 
A:0-127 
B:128-191 
C:192-223 
D:224-239 
E:240-255 
*/ 
BOOL CMyRoute::IsNomalIP(CString strIP) 
{ 
	int n1,n2,n3,n4; 
	ChangeIPToInts(strIP,n1,n2,n3,n4); 
	if(n1==0 && n2==0 && n3==0 && n4==0) //代表本机 
		return FALSE; 
	if(n1==255 && n2==255 && n3==255 && n4==255)//广播地址 
		return FALSE; 
	if(n1==127) 
		return FALSE; 
	if(n1>=0 && n1<=127) //A 
	{ 
		if(n2==255 && n3==255 && n4==255) //主机全1 广播地址 
			return FALSE; 
	} 
	else if(n1>=128 && n1<=191) //B 
	{ 
		if(n3==255 && n4==255) 
			return FALSE; 
	} 
	else if(n1>=192 && n1<=223) //C 
	{ 
		if(n4==255) 
			return FALSE; 
	} 
	else if(n1>=224 && n1<=239)//D 
		return FALSE; 
	else if(n1>=240 && n1<=254) //E 
		return FALSE; 
	return TRUE; 
} 
//将字符串的ip地址转换成四个整数形式 
void CMyRoute::ChangeIPToInts(CString strIP, int &nField1, int &nField2, int &nField3, int &nField4) 
{ 
	int nPos1,nPos2,nPos3; 
	int i; 
	char temp[5]; 
	nPos1=strIP.Find('.',0); 
	for(i=0;iSearchActiveHosts(); 
	}	 
} 
 
void CMyRoute::StopSearching() 
{ 
	int nCount=m_SubNets.GetSize(); 
	for(int i=0;iStopSearing(); 
	} 
} 
 
void CMyRoute::ShowTouPu() 
{ 
	////////////////////////////////////////////////////////////////////////// 
	//在这里绘制整个路由器极其子网的拓扑图	 
	if(m_pDlg!=NULL) 
	{ 
		delete m_pDlg; 
		m_pDlg=NULL; 
	} 
	m_pDlg=new CShowTuoPuDlg; 
	if(m_pDlg==NULL) 
		return; 
	m_pDlg->Create(IDD_DIALOGTUOPU); 
	m_pDlg->m_strRouteAddress=m_strAddress; 
	m_pDlg->m_pSubNets=&m_SubNets; 
	m_pDlg->CenterWindow(); 
	m_pDlg->ShowWindow(SW_SHOW);	 
}