www.pudn.com > NetScan.rar > SnmpManagerDlg.cpp


// SnmpManagerDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "NetScan.h" 
#include "SnmpManagerDlg.h" 
#include "MainFrm.h" 
#include "NetScanView.h" 
#include "ProcessDlg.h" 
#include "SoftDlg.h" 
#include "SysDlg.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
#include "Snmp.h" 
///////////////////////////////////////////////////////////////////////////// 
// CSnmpManagerDlg dialog 
#define wMsg WM_USER+5 
 
///////////////////////////////////////////////////////////////////////////// 
// CSnmpManagerDlg dialog 
 
 
CSnmpManagerDlg::CSnmpManagerDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CSnmpManagerDlg::IDD, pParent) 
{ 
	CMainFrame* m_pParent; 
	m_pParent=(CMainFrame *)pParent; 
	m_pView=(CNetScanView *)m_pParent->GetActiveView(); 
	//{{AFX_DATA_INIT(CSnmpManagerDlg) 
	m_edit = _T(""); 
	//}}AFX_DATA_INIT 
} 
 
 
void CSnmpManagerDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CSnmpManagerDlg) 
	DDX_Control(pDX, IDC_LIST1, m_ctrlListBox); 
	DDX_Text(pDX, IDC_EDIT1, m_edit); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CSnmpManagerDlg, CDialog) 
	//{{AFX_MSG_MAP(CSnmpManagerDlg) 
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1) 
	ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1) 
	ON_LBN_DBLCLK(IDC_LIST1, OnDblclkList1) 
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2) 
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3) 
	ON_MESSAGE(wMsg,OnRecv) 
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CSnmpManagerDlg message handlers 
 
BOOL CSnmpManagerDlg::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	 
	// TODO: Add extra initialization here 
 
	addList(); 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CSnmpManagerDlg::addList() 
{ 
	POSITION pos; 
	unsigned int currentIp; 
	CString strIp; 
	unsigned char* tt; 
	pos=m_pView->m_listHost.GetHeadPosition(); 
	//currentIp=m_pView->m_listHost.GetAt(pos).destIP; 
	for(int i=1;i<=m_pView->m_listHost.GetCount();i++) 
	{//变地址为“*.*.*.*”型 
		currentIp=m_pView->m_listHost.GetNext(pos).destIP; 
		tt=(unsigned char *)¤tIp; 
		strIp.Format("%d.%d.%d.%d",tt[0],tt[1],tt[2],tt[3]); 
		TRACE(strIp); 
		//插入ListBox 
		m_ctrlListBox.AddString(strIp); 
		//得到下一个IP 
		 
	} 
	//UpdateData(false); 
 
} 
 
void CSnmpManagerDlg::OnButton1()  
{ 
	// TODO: Add your control notification handler code here 
		getProcessInfo(); 
} 
 
void CSnmpManagerDlg::OnSelchangeList1()  
{ 
	// TODO: Add your control notification handler code here 
	CString str; 
	int i; 
	i=m_ctrlListBox.GetCurSel(); 
	m_ctrlListBox.GetText(i,str); 
	m_sAgent=str; 
} 
 
void CSnmpManagerDlg::getProcessInfo() 
{ 
	m_flag=1; 
//  m_sAgent="192.168.2.147"; 
    m_oldOid="1.3.6.1.2.1.25.4.2.1"; 
	m_proNameCount=0; 
	m_proTypeCount=0; 
	m_proIndexCount=0; 
 
	InitOid(); 
	if(pSnmp.sessionID==FALSE)	 
	{ 
		pSnmp.CreateSession(CSnmpManagerDlg::m_hWnd,wMsg); 
		pSnmp.sessionID=TRUE; 
	} 
	pSnmp.CreateVbl(m_oldOid,NULL); 
	m_bNext=TRUE; 
	pSnmp.CreatePdu(SNMP_PDU_GETNEXT,NULL,NULL,NULL); 
	pSnmp.Send(m_sAgent,"public"); 
 
} 
 
void CSnmpManagerDlg::InitOid() 
{ 
	for(int i=0;i<=9;i++) 
	{ 
		m_initOid[i]=new char[100]; 
	} 
     
		for(i=0;i<=9;i++ ) 
		{ 
		m_value[i]=new smiVALUE[100]; 
		m_sOid[i]=new char[100]; 
		str[i]=new char[100]; 
		str2[i]=new char[100]; 
//		strdes[i]=new char[100]; 
		} 
 
 
} 
 
void CSnmpManagerDlg::OnRecv() 
{ 
	pSnmp.Receive(m_sOid,m_value); 
 
    getValuetoStr(); 
	if(m_flag==0) 
	{ 
	done=true; 
	if(done) 
	{ 
	   displaySysInfo(); 
	} 
	} 
	else 
	{ 
	if(m_bNext==TRUE) 
 
	Next(m_sOid[1]); 
	} 
 
} 
 
void CSnmpManagerDlg::getValuetoStr() 
{ 
	int nIpin; 
	CString strIp; 
	CString strTemp; 
	for(int i=1;i<=pSnmp.nCount;i++) 
		{ 
	switch(m_value[i]->syntax) 
	{ 
	case SNMP_SYNTAX_INT:  
    //case SNMP_SYNTAX_INT32: 
		smiINT sNumber; 
		sNumber=m_value[i]->value.sNumber; 
		nIpin=sNumber; 
		wsprintf(str[i],"%d",sNumber); 
//		AfxMessageBox(str[i]); 
		break; 
	case SNMP_SYNTAX_UINT32: 
    case SNMP_SYNTAX_CNTR32: 
    case SNMP_SYNTAX_GAUGE32:  
    case SNMP_SYNTAX_TIMETICKS: 
		smiUINT32 uNumber; 
		uNumber=m_value[i]->value.uNumber; 
		nIpin=uNumber; 
		wsprintf(str[i],"%d",uNumber); 
//		AfxMessageBox(str[i]); 
		break; 
	case SNMP_SYNTAX_CNTR64: 
		smiCNTR64 hNumber; 
		hNumber=m_value[i]->value.hNumber; 
//		AfxMessageBox(str[i]); 
		break; 
	case SNMP_SYNTAX_OCTETS:  
    case SNMP_SYNTAX_OPAQUE:  
    case SNMP_SYNTAX_NSAPADDR: 
	case SNMP_SYNTAX_BITS: 
		if(m_flag==0) 
			str[i]=(char *)m_value[i]->value.string.ptr; 
		else 
		    str2[i]=(char *)m_value[i]->value.string.ptr; 
//		AfxMessageBox(str[i]); 
		break; 
	case SNMP_SYNTAX_IPADDR: 
		strIp.Format("%d",*m_value[i]->value.string.ptr); 
		strIp+="."; 
		strTemp.Format("%d",*(m_value[i]->value.string.ptr+1)); 
		strIp+=strTemp; 
		strIp+="."; 
		strTemp.Format("%d",*(m_value[i]->value.string.ptr+2)); 
		strIp+=strTemp; 
		strIp+="."; 
		strTemp.Format("%d",*(m_value[i]->value.string.ptr+3)); 
		strIp+=strTemp; 
		strcpy(str[i],strIp); 
//	    AfxMessageBox(str[i]); 
		break; 
	case SNMP_SYNTAX_OID: 
		smiOID oid; 
		oid=m_value[i]->value.oid; 
 
	    SnmpOidToStr(&oid,30,str[i]); 
//		AfxMessageBox(str[i]); 
		//SnmpFreeDescriptor (SNMP_SYNTAX_OID, (smiLPOPAQUE)&oid); 
		break; 
	case SNMP_SYNTAX_NULL:  
	case SNMP_SYNTAX_NOSUCHOBJECT: 
    case SNMP_SYNTAX_NOSUCHINSTANCE:  
    case SNMP_SYNTAX_ENDOFMIBVIEW: 
		smiBYTE empty; 
		empty=m_value[i]->value.empty; 
		str[i]="No Value Returned"; 
//		AfxMessageBox(str[i]); 
		break; 
	default: 
		break; 
	} 
	 
 
	} 
	 
 
} 
 
void CSnmpManagerDlg::Next(LPTSTR Oid) 
{ 
		CString strn(Oid); 
   LPTSTR my=new char[50]; 
  my="1.3.6.1.2.1.25.4.2.1"; 
  LPTSTR you=new char[50]; 
  you="1.3.6.1.2.1.25.6.3.1"; 
  //"1.3.6.1.2.1.25.4.2.1"; 
  int len=strlen(my); 
  LPTSTR newoid=new char[len+1]; 
  strncpy(newoid,Oid,len); 
  newoid[len]='\0'; 
 
 	if(strcmp(newoid,my)==0) 
	getNextProcInfo(Oid); 
	else  
	{ 
		if(strcmp(newoid,you)==0) 
			getNextSoftInfo(Oid); 
		else 
		{ 
			m_bNext=false; 
			if(m_flag==1) 
			    displayProcessInfo(); 
			if(m_flag==2) 
				displaySoftInfo(); 
		} 
	} 
 
		my=NULL; 
		newoid=NULL; 
        delete []my; 
		delete []newoid; 
 
 
} 
 
void CSnmpManagerDlg::getNextProcInfo(LPTSTR Oid) 
{ 
	CString strn(Oid); 
   LPTSTR my=new char[50]; 
  my="1.3.6.1.2.1.25.4.2.1";//"1.3.6.1.2.1.25.4.2.1"; 
  int len=strlen(my); 
	LPTSTR newsuboid=new char[len+3]; 
        strncpy(newsuboid,Oid,len+2); 
		newsuboid[len+2]='\0'; 
	if(strcmp(newsuboid,"1.3.6.1.2.1.25.4.2.1.2")==0) 
		 {    
			m_ProcessName[m_proNameCount]=new char[100]; 
		    memset(m_ProcessName[m_proNameCount],'\0',100); 
		    strcpy(m_ProcessName[m_proNameCount],str2[1]); 
//          AfxMessageBox(m_ProcessName[m_proNameCount]); 
			pSnmp.CreateVbl(Oid,NULL); 
		    pSnmp.CreatePdu(SNMP_PDU_GETNEXT,NULL,NULL,NULL); 
	        pSnmp.Send(m_sAgent,"public"); 
		    newsuboid=NULL; 
			m_proNameCount++; 
		    delete []newsuboid; 
		} 
	else  
	{ 
		 
		if(strcmp(newsuboid,"1.3.6.1.2.1.25.4.2.1.6")==0) 
		{  
			 
 
		  m_ProcessType[m_proTypeCount]=new char[100]; 
		  memset(m_ProcessType[m_proTypeCount],'\0',100); 
		 strcpy(m_ProcessType[m_proTypeCount],str[1]); 
 
//		  AfxMessageBox(m_ProcessType[m_proTypeCount]); 
		  m_proTypeCount++; 
		  pSnmp.CreateVbl(Oid,NULL); 
		  pSnmp.CreatePdu(SNMP_PDU_GETNEXT,NULL,NULL,NULL); 
	      pSnmp.Send(m_sAgent,"public"); 
		  newsuboid=NULL; 
		  delete []newsuboid; 
			} 
		 
		 
		 
		 else  
		 {   
			if(strcmp(newsuboid,"1.3.6.1.2.1.25.4.2.1.1")==0) 
			{  
    	      m_ProcessIndex[m_proIndexCount]=new char[100]; 
		      memset(m_ProcessIndex[m_proIndexCount],'\0',100); 
		      strcpy(m_ProcessIndex[m_proIndexCount],str[1]); 
 
//		      AfxMessageBox(m_ProcessIndex[m_proIndexCount]); 
		      m_proIndexCount++; 
			  pSnmp.CreateVbl(Oid,NULL); 
		      pSnmp.CreatePdu(SNMP_PDU_GETNEXT,NULL,NULL,NULL); 
	          pSnmp.Send(m_sAgent,"public"); 
		      newsuboid=NULL; 
		      delete []newsuboid; 
			} 
			else 
			{ 
			pSnmp.CreateVbl(Oid,NULL); 
		    pSnmp.CreatePdu(SNMP_PDU_GETNEXT,NULL,NULL,NULL); 
	        pSnmp.Send(m_sAgent,"public"); 
            newsuboid=NULL; 
		    delete []newsuboid; 
			} 
	 
		} 
	} 
 
 
} 
 
void CSnmpManagerDlg::displayProcessInfo() 
{ 
		CString str; 
	str.Format ("%d",m_proNameCount); 
//	AfxMessageBox(str); 
   CProcessDlg *dlg=new CProcessDlg; 
   dlg->m_ProcessIndex=this->m_ProcessIndex; 
   
   dlg->m_ProcessName=this->m_ProcessName; 
   dlg->m_ProcessType=this->m_ProcessType; 
   dlg->m_proIndexCount=this->m_proIndexCount; 
   dlg->m_proNameCount=this->m_proNameCount; 
   dlg->m_proTypeCount=this->m_proTypeCount; 
   dlg->DoModal(); 
    
 
} 
 
void CSnmpManagerDlg::OnDblclkList1()  
{ 
	// TODO: Add your control notification handler code here 
		LPTSTR str(""); 
	int i; 
	i=m_ctrlListBox.GetCurSel(); 
	str=(LPTSTR)(m_ctrlListBox.GetItemDataPtr(i));//GetWindowText(str,i); 
	//(CString)str; 
	m_sAgent=(CString)str; 
	 
} 
 
void CSnmpManagerDlg::displaySoftInfo() 
{ 
	CSoftDlg *dlg=new CSoftDlg; 
   dlg->m_SoftIndex=this->m_SoftIndex; 
   dlg->m_SoftName=this->m_SoftName; 
   dlg->m_SoftType=this->m_SoftType; 
   dlg->m_softIndexCount=this->m_softIndexCount; 
   dlg->m_softNameCount=this->m_softNameCount; 
   dlg->m_softTypeCount=this->m_softTypeCount; 
   dlg->DoModal(); 
 
} 
 
void CSnmpManagerDlg::OnButton2()  
{ 
	// TODO: Add your control notification handler code here 
	getSoftInfo(); 
} 
 
void CSnmpManagerDlg::getSoftInfo() 
{ 
	m_flag=2; 
//	m_sAgent="192.168.2.147"; 
    m_oldOid="1.3.6.1.2.1.25.6.3.1"; 
//	i_tNum=0; 
	m_softIndexCount=0; 
	m_softNameCount=0; 
	m_softTypeCount=0; 
//	m_proTypeCount=0; 
//	m_proIndexCount=0; 
 
	InitOid(); 
	if(pSnmp.sessionID==FALSE)	 
	{ 
		pSnmp.CreateSession(CSnmpManagerDlg::m_hWnd,wMsg); 
		pSnmp.sessionID=TRUE; 
	} 
	pSnmp.CreateVbl(m_oldOid,NULL); 
	m_bNext=TRUE; 
	pSnmp.CreatePdu(SNMP_PDU_GETNEXT,NULL,NULL,NULL); 
	pSnmp.Send(m_sAgent,"public"); 
 
 
} 
 
 
 
void CSnmpManagerDlg::getNextSoftInfo(LPTSTR Oid) 
{ 
	CString strn(Oid); 
   LPTSTR my=new char[50]; 
  my="1.3.6.1.2.1.25.6.3.1";//"1.3.6.1.2.1.25.4.2.1"; 
  int len=strlen(my); 
	LPTSTR newsuboid=new char[len+3]; 
        strncpy(newsuboid,Oid,len+2); 
		newsuboid[len+2]='\0'; 
	if(strcmp(newsuboid,"1.3.6.1.2.1.25.6.3.1.2")==0) 
		 {    
			m_SoftName[m_softNameCount]=new char[100]; 
		    memset(m_SoftName[m_softNameCount],'\0',100); 
		    strcpy(m_SoftName[m_softNameCount],str2[1]); 
//            AfxMessageBox(m_SoftName[m_softNameCount]); 
			pSnmp.CreateVbl(Oid,NULL); 
		    pSnmp.CreatePdu(SNMP_PDU_GETNEXT,NULL,NULL,NULL); 
	        pSnmp.Send(m_sAgent,"public"); 
			m_softNameCount++; 
			newsuboid=NULL; 
		    delete []newsuboid; 
		} 
	else  
	{ 
		if(strcmp(newsuboid,"1.3.6.1.2.1.25.6.3.1.1")==0) 
		{    
		  m_SoftIndex[m_softIndexCount]=new char[100]; 
		  memset(m_SoftIndex[m_softIndexCount],'\0',100); 
		  strcpy(m_SoftIndex[m_softIndexCount],str[1]); 
 
//		  AfxMessageBox(m_SoftIndex[m_softIndexCount]); 
		  m_softIndexCount++; 
		  pSnmp.CreateVbl(Oid,NULL); 
		  pSnmp.CreatePdu(SNMP_PDU_GETNEXT,NULL,NULL,NULL); 
	      pSnmp.Send(m_sAgent,"public"); 
		  newsuboid=NULL; 
		  delete []newsuboid; 
			} 
		 
		 
		 
		 else  
		 {   
			 if(strcmp(newsuboid,"1.3.6.1.2.1.25.6.3.1.4")==0) 
			 { 
				 m_SoftType[m_softTypeCount]=new char[100]; 
		      memset(m_SoftType[m_softTypeCount],'\0',100); 
		      strcpy(m_SoftType[m_softTypeCount],str[1]); 
 
//		      AfxMessageBox(m_SoftType[m_softTypeCount]); 
		      m_softTypeCount++; 
			  pSnmp.CreateVbl(Oid,NULL); 
		      pSnmp.CreatePdu(SNMP_PDU_GETNEXT,NULL,NULL,NULL); 
	          pSnmp.Send(m_sAgent,"public"); 
		      newsuboid=NULL; 
		      delete []newsuboid; 
			 } 
			 else 
			 { 
				 pSnmp.CreateVbl(Oid,NULL); 
		    pSnmp.CreatePdu(SNMP_PDU_GETNEXT,NULL,NULL,NULL); 
	        pSnmp.Send(m_sAgent,"public"); 
            newsuboid=NULL; 
		    delete []newsuboid; 
			 } 
 
			 
		 } 
	} 
 
 
} 
 
void CSnmpManagerDlg::OnButton3()  
{ 
	// TODO: Add your control notification handler code here 
	getSysInfo(); 
} 
 
void CSnmpManagerDlg::getSysInfo() 
{ 
	m_flag=0; 
	InitOid(); 
	done=false; 
//	m_sAgent="192.168.2.147"; 
	for(int i=0;i<=9;i++) 
	{ 
		m_initOid[i]=new char[100]; 
	} 
	m_initOid[1]="1.3.6.1.2.1.1.1.0"; 
	m_initOid[2]="1.3.6.1.2.1.1.2.0"; 
	m_initOid[3]="1.3.6.1.2.1.1.3.0"; 
	m_initOid[4]="1.3.6.1.2.1.1.4.0"; 
	m_initOid[5]="1.3.6.1.2.1.1.5.0"; 
	m_initOid[6]="1.3.6.1.2.1.1.6.0"; 
	pSnmp.sessionID=false; 
	if(pSnmp.sessionID==FALSE)	 
	{ 
		pSnmp.CreateSession(CSnmpManagerDlg::m_hWnd,wMsg); 
		pSnmp.sessionID=TRUE; 
	} 
	//pSnmp.Register(); 
	pSnmp.CreateVbl(m_initOid[1],NULL); 
	for(int j=2;j<=6;j++) 
		{ 
			pSnmp.SetVbl(m_initOid[j]); 
		} 
	pSnmp.CreatePdu(SNMP_PDU_GET,NULL,NULL,NULL); 
	pSnmp.Send(m_sAgent,"public"); 
	m_bNext=false; 
 
} 
 
void CSnmpManagerDlg::displaySysInfo() 
{ 
		CSysDlg dlg; 
//	CString str1=str[1];//.Mid(1,20); 
//	str1=str1.Left (20)+"\n"+str1.Mid (21,20); 
//	str1+="/n"; 
//		char*	str2=str[1].Mid(21,20); 
 //str2+="/n"; 
//	dlg.m_sysDescr=str1; 
//	dlg.m_sysDescr+=str2; 
 
	    
 
	dlg.m_SysDescr=str[1]; 
//	dlg.m_sysDescr +="\n"; 
    dlg.m_SysObjectID=str[2]; 
	dlg.m_SysUpTime=str[3]; 
	dlg.m_SysContact=str[4]; 
	dlg.m_SysName=str[5]; 
	dlg.m_SysLocation=str[6]; 
 
	dlg.DoModal(); 
 
} 
 
void CSnmpManagerDlg::OnButton4()  
{ 
	// TODO: Add your control notification handler code here 
    UpdateData(true); 
	m_ctrlListBox.AddString(m_edit); 
	 
}