LanFlowDlg.cpp
上传用户:hbytqc8
上传日期:2014-07-31
资源大小:527k
文件大小:9k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. // LanFlowDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "LanFlow.h"
  5. #include "LanFlowDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAboutDlg dialog used for App About
  13. class CAboutDlg : public CDialog
  14. {
  15. public:
  16. CAboutDlg();
  17. // Dialog Data
  18. //{{AFX_DATA(CAboutDlg)
  19. enum { IDD = IDD_ABOUTBOX };
  20. //}}AFX_DATA
  21. // ClassWizard generated virtual function overrides
  22. //{{AFX_VIRTUAL(CAboutDlg)
  23. protected:
  24. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  25. //}}AFX_VIRTUAL
  26. // Implementation
  27. protected:
  28. //{{AFX_MSG(CAboutDlg)
  29. //}}AFX_MSG
  30. DECLARE_MESSAGE_MAP()
  31. };
  32. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  33. {
  34. //{{AFX_DATA_INIT(CAboutDlg)
  35. //}}AFX_DATA_INIT
  36. }
  37. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. //{{AFX_DATA_MAP(CAboutDlg)
  41. //}}AFX_DATA_MAP
  42. }
  43. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  44. //{{AFX_MSG_MAP(CAboutDlg)
  45. // No message handlers
  46. //}}AFX_MSG_MAP
  47. END_MESSAGE_MAP()
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CLanFlowDlg dialog
  50. CLanFlowDlg::CLanFlowDlg(CWnd* pParent /*=NULL*/)
  51. : CDialog(CLanFlowDlg::IDD, pParent)
  52. {
  53. //{{AFX_DATA_INIT(CLanFlowDlg)
  54. //}}AFX_DATA_INIT
  55. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  56. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  57. }
  58. void CLanFlowDlg::DoDataExchange(CDataExchange* pDX)
  59. {
  60. CDialog::DoDataExchange(pDX);
  61. //{{AFX_DATA_MAP(CLanFlowDlg)
  62. DDX_Control(pDX, IDC_EDIT2, m_community);
  63. DDX_Control(pDX, IDC_EDIT1, m_text);
  64. DDX_Control(pDX, IDC_IPADDRESS1, m_ipadd);
  65. DDX_Control(pDX, IDC_COMBO1, m_port);
  66. //}}AFX_DATA_MAP
  67. }
  68. BEGIN_MESSAGE_MAP(CLanFlowDlg, CDialog)
  69. //{{AFX_MSG_MAP(CLanFlowDlg)
  70. ON_WM_SYSCOMMAND()
  71. ON_WM_PAINT()
  72. ON_WM_QUERYDRAGICON()
  73. ON_WM_DESTROY()
  74. ON_BN_CLICKED(IDC_BUTTON1, OnSure)
  75. ON_BN_CLICKED(IDC_BUTTON2, OnMAC)
  76. ON_BN_CLICKED(IDC_BUTTON3, OnIP)
  77. ON_BN_CLICKED(IDC_LEGEND, OnLegend)
  78. ON_BN_CLICKED(IDC_PERCENT, OnPercent)
  79. ON_BN_CLICKED(IDC_LEFT, OnLeft)
  80. ON_BN_CLICKED(IDC_RIGHT, OnRight)
  81. //}}AFX_MSG_MAP
  82. END_MESSAGE_MAP()
  83. /////////////////////////////////////////////////////////////////////////////
  84. // CLanFlowDlg message handlers
  85. BOOL CLanFlowDlg::OnInitDialog()
  86. {
  87. CDialog::OnInitDialog();
  88. // IDM_ABOUTBOX must be in the system command range.
  89. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  90. ASSERT(IDM_ABOUTBOX < 0xF000);
  91. CMenu* pSysMenu = GetSystemMenu(FALSE);
  92. if (pSysMenu != NULL)
  93. {
  94. CString strAboutMenu;
  95. strAboutMenu.LoadString(IDS_ABOUTBOX);
  96. if (!strAboutMenu.IsEmpty())
  97. {
  98. pSysMenu->AppendMenu(MF_SEPARATOR);
  99. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  100. }
  101. }
  102. SetIcon(m_hIcon, TRUE); // Set big icon
  103. SetIcon(m_hIcon, FALSE); // Set small icon
  104. // TODO: Add extra initialization here
  105. CRect cr(13,110,550,240);
  106. CSize c(550,240);
  107.     pChart=NULL;
  108. pChart=new CLineChart(c);
  109. pChart->Create(NULL,WS_CHILD|WS_VISIBLE|SS_NOTIFY|SS_BLACKFRAME, cr,this,50000);
  110. pChart->SetTitle("基于地址流量统计图");
  111. pChart->SetLegend("流入","流出");
  112. m_community.SetWindowText("public");
  113. m_ipadd.SetWindowText("127.0.0.1");
  114.     CButton* m_pB=(CButton*)GetDlgItem(IDC_BUTTON2);
  115.     m_pB->EnableWindow(FALSE);
  116.     m_pB=(CButton*)GetDlgItem(IDC_BUTTON3);
  117.     m_pB->EnableWindow(FALSE);
  118. return TRUE;  // return TRUE  unless you set the focus to a control
  119. }
  120. void CLanFlowDlg::OnSysCommand(UINT nID, LPARAM lParam)
  121. {
  122. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  123. {
  124. CAboutDlg dlgAbout;
  125. dlgAbout.DoModal();
  126. }
  127. else
  128. {
  129. CDialog::OnSysCommand(nID, lParam);
  130. }
  131. }
  132. // If you add a minimize button to your dialog, you will need the code below
  133. //  to draw the icon.  For MFC applications using the document/view model,
  134. //  this is automatically done for you by the framework.
  135. void CLanFlowDlg::OnPaint() 
  136. {
  137. if (IsIconic())
  138. {
  139. CPaintDC dc(this); // device context for painting
  140. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  141. // Center icon in client rectangle
  142. int cxIcon = GetSystemMetrics(SM_CXICON);
  143. int cyIcon = GetSystemMetrics(SM_CYICON);
  144. CRect rect;
  145. GetClientRect(&rect);
  146. int x = (rect.Width() - cxIcon + 1) / 2;
  147. int y = (rect.Height() - cyIcon + 1) / 2;
  148. // Draw the icon
  149. dc.DrawIcon(x, y, m_hIcon);
  150. }
  151. else
  152. {
  153. CDialog::OnPaint();
  154. }
  155. }
  156. // The system calls this to obtain the cursor to display while the user drags
  157. //  the minimized window.
  158. HCURSOR CLanFlowDlg::OnQueryDragIcon()
  159. {
  160. return (HCURSOR) m_hIcon;
  161. }
  162. CString CLanFlowDlg::itoh(int m)
  163. {
  164.  char ch[2];
  165.  CString Hex;
  166.  if ((m>=0)&&(m<10))
  167.  {
  168.    itoa(m,ch,10);
  169.    Hex=ch;
  170.  }
  171.  else
  172.   switch (m)
  173.       {
  174.        case 10:
  175.   Hex="A";
  176.   break;
  177.       case 11:
  178.   Hex="B";
  179.   break;
  180.       case 12:
  181.   Hex="C";
  182.   break;
  183.       case 13:
  184.   Hex="D";
  185.   break;
  186.       case 14:
  187.   Hex="E";
  188.   break;
  189.       case 15:
  190.   Hex="F";
  191.   break;
  192.       }
  193.  return Hex;
  194. }
  195. CString CLanFlowDlg::stoh(CString s)
  196. {
  197. if (s.GetLength()==0)
  198. return "";
  199. s=s+".";
  200. int n,m,x,y;
  201. CString H,hex,temp;
  202. H="";
  203. hex="";
  204. while (s.GetLength()>0)
  205. {
  206.   n=s.Find('.');
  207.   temp=s.Left(n);
  208.   s=s.Mid(n+1,s.GetLength());
  209.   m=atoi(temp);
  210.   x=m/16;
  211.   y=m %16;
  212.   hex=itoh(x);
  213.   hex=hex+itoh(y);
  214.   H+=hex+" ";
  215. }
  216. H=H.Left(17);
  217. return H;
  218. }
  219. void CLanFlowDlg::OnDestroy() 
  220. {
  221. CDialog::OnDestroy();
  222. delete pChart;
  223. }
  224. void CLanFlowDlg::OnSure() 
  225. {
  226. CString oid,mac;
  227. m_ipadd.GetWindowText(ip);
  228. m_community.GetWindowText(community);
  229. m_snmp.clear();
  230. oid="1.3.6.1.2.1.2.2.1.1";
  231. m_snmp.GetTree(ip,community,oid);
  232. oid="1.3.6.1.2.1.2.2.1.2";
  233. m_snmp.GetTree(ip,community,oid);
  234. int row=m_snmp.GetCount()/2;
  235. for (int i=0;i<row;i++)
  236. {
  237. NameToIndex.SetAt(m_snmp.GetValue(i+row),m_snmp.GetValue(i));
  238. m_port.AddString(m_snmp.GetValue(i+row));
  239. }
  240. m_snmp.clear();
  241. oid="1.3.6.1.2.1.3.1.1.2";
  242. m_snmp.GetTree(ip,community,oid);
  243. //物理地址;
  244. oid="1.3.6.1.2.1.3.1.1.3";
  245. m_snmp.GetTree(ip,community,oid);
  246. //网络地址;
  247. row=m_snmp.GetCount()/2;
  248. for (i=0;i<row;i++)
  249. {
  250.         mac=m_snmp.GetValue(i);
  251. mac=mac.Left(17);
  252. mac.TrimLeft();
  253. mac.TrimRight();
  254. MacToIp.SetAt(mac,m_snmp.GetValue(i+row));
  255. }
  256. CString str="               OK!           rn";
  257. str+="如是基于MAC地址统计流量, rn";  
  258. str+="请先选择一个以太网络端口;rn" ;
  259. str+="如是基于IP地址统计流量,rn";
  260. str+="则不需要选择端口。";    
  261. MessageBox(str);
  262. CButton* m_pB=(CButton*)GetDlgItem(IDC_BUTTON2);
  263. m_pB->EnableWindow(TRUE);
  264. m_pB=(CButton*)GetDlgItem(IDC_BUTTON3);
  265. m_pB->EnableWindow(TRUE);
  266. }
  267. void CLanFlowDlg::OnMAC() 
  268. {   
  269. CString temp="";
  270. m_port.GetWindowText(temp);
  271. if (temp.GetLength()==0)
  272. {
  273. MessageBox("请选择网络接口!");
  274. return;
  275. }
  276. NameToIndex.Lookup(temp,index);
  277. CString oid;
  278. oid="1.3.6.1.4.1.9.9.84.1.2.1.1.4."+index+".1";
  279. m_snmp.clear();
  280. m_snmp.GetTree(ip,community,oid);
  281. Mac mac;
  282. for(int i=0;i<m_snmp.GetCount();i++)
  283. {
  284. mac.x=atoi(m_snmp.GetValue(i));
  285. mac.y=0;
  286. temp=m_snmp.GetOid(i);
  287. int n=temp.GetLength()-oid.GetLength()-1;
  288. temp=temp.Right(n);
  289. mac.str=stoh(temp);
  290. ArrayMac.Add(mac);
  291. }
  292. int count=ArrayMac.GetSize();
  293. m_snmp.clear();
  294. oid="1.3.6.1.4.1.9.9.84.1.2.1.1.4."+index+".2";
  295. m_snmp.GetTree(ip,community,oid);
  296. for(i=0;i<m_snmp.GetCount();i++)
  297. {
  298. temp=m_snmp.GetOid(i);
  299. int n=temp.GetLength()-oid.GetLength()-1;
  300. temp=temp.Right(n);
  301. temp=stoh(temp);
  302. for (int j=0;j<count;j++)
  303. {
  304. if (temp==ArrayMac[j].str)
  305. {
  306. ArrayMac[j].y=atoi(m_snmp.GetValue(i));
  307. break;
  308. }
  309. }
  310. if (j==count)
  311. {
  312. mac.x=0;
  313. mac.y=atoi(m_snmp.GetValue(i));
  314. mac.str=temp;
  315. ArrayMac.Add(mac);
  316. }
  317. }
  318. CString ipStr;
  319. pChart->Init();
  320. for (i=0;i<ArrayMac.GetSize();i++)
  321. {
  322. ipStr="*.*.*.*";
  323.         if (MacToIp.IsEmpty()==0)
  324. MacToIp.Lookup(ArrayMac[i].str,ipStr);
  325. pChart->Append(ArrayMac[i].x,ArrayMac[i].y,ArrayMac[i].str,ipStr);
  326.         
  327. }
  328. pChart->WorkPercent();
  329. ArrayMac.RemoveAll();
  330. CString txt="";
  331. txt=pChart->GetText();
  332. m_text.SetWindowText(txt);
  333. }
  334. void CLanFlowDlg::OnIP() 
  335. {
  336. CString oid,cp1,cp2;
  337. m_snmp.clear();
  338. oid="1.3.6.1.4.1.9.2.4.11.0";
  339.     m_snmp.GetOne(ip,community,oid,cp1);
  340. m_snmp.Set(ip,community,oid,cp1,0);
  341.     m_snmp.GetOne(ip,community,oid,cp2);
  342.     if (atoi(cp2)==atoi(cp1)+1)
  343. {
  344. oid="1.3.6.1.4.1.9.2.4.9.1.1";
  345. m_snmp.GetTree(ip,community,oid);
  346. oid="1.3.6.1.4.1.9.2.4.9.1.2";
  347. m_snmp.GetTree(ip,community,oid);
  348. oid="1.3.6.1.4.1.9.2.4.9.1.4";
  349. m_snmp.GetTree(ip,community,oid);
  350. int row=m_snmp.GetCount()/3;
  351. pChart->Init();
  352. for (int i=0;i<row;i++)
  353. {
  354. int data=atoi(m_snmp.GetValue(i+2*row));
  355. pChart->Append(data,0,m_snmp.GetValue(i),m_snmp.GetValue(i+row));
  356. }
  357. pChart->WorkPercent();
  358. CString txt="";
  359. txt=pChart->GetText();
  360. m_text.SetWindowText(txt);
  361. }
  362. else
  363. {
  364. MessageBox("出现错误,请检查配置!");
  365. return;
  366. }
  367. }
  368. void CLanFlowDlg::OnLegend() 
  369. {
  370. pChart->SetMark();
  371. }
  372. void CLanFlowDlg::OnPercent() 
  373. {
  374. pChart->SetPercent();
  375. }
  376. void CLanFlowDlg::OnLeft() 
  377. {
  378. pChart->SetFirst(false);
  379. }
  380. void CLanFlowDlg::OnRight() 
  381. {
  382. pChart->SetFirst(true);
  383. }