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);
}