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