LanFlowDlg.cpp
上传用户:hbytqc8
上传日期:2014-07-31
资源大小:527k
文件大小:9k
- // LanFlowDlg.cpp : implementation file
- //
- #include "stdafx.h"
- #include "LanFlow.h"
- #include "LanFlowDlg.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CAboutDlg dialog used for App About
- class CAboutDlg : public CDialog
- {
- public:
- CAboutDlg();
- // Dialog Data
- //{{AFX_DATA(CAboutDlg)
- enum { IDD = IDD_ABOUTBOX };
- //}}AFX_DATA
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CAboutDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
- // Implementation
- protected:
- //{{AFX_MSG(CAboutDlg)
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- {
- //{{AFX_DATA_INIT(CAboutDlg)
- //}}AFX_DATA_INIT
- }
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAboutDlg)
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- //{{AFX_MSG_MAP(CAboutDlg)
- // No message handlers
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CLanFlowDlg dialog
- CLanFlowDlg::CLanFlowDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CLanFlowDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CLanFlowDlg)
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- }
- void CLanFlowDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CLanFlowDlg)
- DDX_Control(pDX, IDC_EDIT2, m_community);
- DDX_Control(pDX, IDC_EDIT1, m_text);
- DDX_Control(pDX, IDC_IPADDRESS1, m_ipadd);
- DDX_Control(pDX, IDC_COMBO1, m_port);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CLanFlowDlg, CDialog)
- //{{AFX_MSG_MAP(CLanFlowDlg)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_WM_DESTROY()
- ON_BN_CLICKED(IDC_BUTTON1, OnSure)
- ON_BN_CLICKED(IDC_BUTTON2, OnMAC)
- ON_BN_CLICKED(IDC_BUTTON3, OnIP)
- ON_BN_CLICKED(IDC_LEGEND, OnLegend)
- ON_BN_CLICKED(IDC_PERCENT, OnPercent)
- ON_BN_CLICKED(IDC_LEFT, OnLeft)
- ON_BN_CLICKED(IDC_RIGHT, OnRight)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CLanFlowDlg message handlers
- BOOL CLanFlowDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
- // TODO: Add extra initialization here
- CRect cr(13,110,550,240);
- CSize c(550,240);
- pChart=NULL;
- pChart=new CLineChart(c);
- pChart->Create(NULL,WS_CHILD|WS_VISIBLE|SS_NOTIFY|SS_BLACKFRAME, cr,this,50000);
- pChart->SetTitle("基于地址流量统计图");
- pChart->SetLegend("流入","流出");
- m_community.SetWindowText("public");
- m_ipadd.SetWindowText("127.0.0.1");
- CButton* m_pB=(CButton*)GetDlgItem(IDC_BUTTON2);
- m_pB->EnableWindow(FALSE);
- m_pB=(CButton*)GetDlgItem(IDC_BUTTON3);
- m_pB->EnableWindow(FALSE);
- return TRUE; // return TRUE unless you set the focus to a control
- }
- void CLanFlowDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
- void CLanFlowDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- // The system calls this to obtain the cursor to display while the user drags
- // the minimized window.
- HCURSOR CLanFlowDlg::OnQueryDragIcon()
- {
- return (HCURSOR) m_hIcon;
- }
- CString CLanFlowDlg::itoh(int m)
- {
- char ch[2];
- CString Hex;
- if ((m>=0)&&(m<10))
- {
- itoa(m,ch,10);
- Hex=ch;
- }
- else
- switch (m)
- {
- case 10:
- Hex="A";
- break;
- case 11:
- Hex="B";
- break;
- case 12:
- Hex="C";
- break;
- case 13:
- Hex="D";
- break;
- case 14:
- Hex="E";
- break;
- case 15:
- Hex="F";
- break;
- }
- return Hex;
- }
- CString CLanFlowDlg::stoh(CString s)
- {
- if (s.GetLength()==0)
- return "";
- s=s+".";
- int n,m,x,y;
- CString H,hex,temp;
- H="";
- hex="";
- while (s.GetLength()>0)
- {
- n=s.Find('.');
- temp=s.Left(n);
- s=s.Mid(n+1,s.GetLength());
- m=atoi(temp);
- x=m/16;
- y=m %16;
- hex=itoh(x);
- hex=hex+itoh(y);
- H+=hex+" ";
- }
- H=H.Left(17);
- return H;
- }
- void CLanFlowDlg::OnDestroy()
- {
- CDialog::OnDestroy();
- delete pChart;
- }
- void CLanFlowDlg::OnSure()
- {
- CString oid,mac;
- m_ipadd.GetWindowText(ip);
- m_community.GetWindowText(community);
- m_snmp.clear();
- oid="1.3.6.1.2.1.2.2.1.1";
- m_snmp.GetTree(ip,community,oid);
- oid="1.3.6.1.2.1.2.2.1.2";
- m_snmp.GetTree(ip,community,oid);
- int row=m_snmp.GetCount()/2;
- for (int i=0;i<row;i++)
- {
- NameToIndex.SetAt(m_snmp.GetValue(i+row),m_snmp.GetValue(i));
- m_port.AddString(m_snmp.GetValue(i+row));
- }
- m_snmp.clear();
- oid="1.3.6.1.2.1.3.1.1.2";
- m_snmp.GetTree(ip,community,oid);
- //物理地址;
- oid="1.3.6.1.2.1.3.1.1.3";
- m_snmp.GetTree(ip,community,oid);
- //网络地址;
- row=m_snmp.GetCount()/2;
- for (i=0;i<row;i++)
- {
- mac=m_snmp.GetValue(i);
- mac=mac.Left(17);
- mac.TrimLeft();
- mac.TrimRight();
- MacToIp.SetAt(mac,m_snmp.GetValue(i+row));
- }
- CString str=" OK! rn";
- str+="如是基于MAC地址统计流量, rn";
- str+="请先选择一个以太网络端口;rn" ;
- str+="如是基于IP地址统计流量,rn";
- str+="则不需要选择端口。";
- MessageBox(str);
- CButton* m_pB=(CButton*)GetDlgItem(IDC_BUTTON2);
- m_pB->EnableWindow(TRUE);
- m_pB=(CButton*)GetDlgItem(IDC_BUTTON3);
- m_pB->EnableWindow(TRUE);
- }
- void CLanFlowDlg::OnMAC()
- {
- CString temp="";
- m_port.GetWindowText(temp);
- if (temp.GetLength()==0)
- {
- MessageBox("请选择网络接口!");
- return;
- }
- NameToIndex.Lookup(temp,index);
- CString oid;
- oid="1.3.6.1.4.1.9.9.84.1.2.1.1.4."+index+".1";
- m_snmp.clear();
- m_snmp.GetTree(ip,community,oid);
- Mac mac;
- for(int i=0;i<m_snmp.GetCount();i++)
- {
- mac.x=atoi(m_snmp.GetValue(i));
- mac.y=0;
- temp=m_snmp.GetOid(i);
- int n=temp.GetLength()-oid.GetLength()-1;
- temp=temp.Right(n);
- mac.str=stoh(temp);
- ArrayMac.Add(mac);
- }
- int count=ArrayMac.GetSize();
- m_snmp.clear();
- oid="1.3.6.1.4.1.9.9.84.1.2.1.1.4."+index+".2";
- m_snmp.GetTree(ip,community,oid);
- for(i=0;i<m_snmp.GetCount();i++)
- {
- temp=m_snmp.GetOid(i);
- int n=temp.GetLength()-oid.GetLength()-1;
- temp=temp.Right(n);
- temp=stoh(temp);
- for (int j=0;j<count;j++)
- {
- if (temp==ArrayMac[j].str)
- {
- ArrayMac[j].y=atoi(m_snmp.GetValue(i));
- break;
- }
- }
- if (j==count)
- {
- mac.x=0;
- mac.y=atoi(m_snmp.GetValue(i));
- mac.str=temp;
- ArrayMac.Add(mac);
- }
- }
- CString ipStr;
- pChart->Init();
- for (i=0;i<ArrayMac.GetSize();i++)
- {
- ipStr="*.*.*.*";
- if (MacToIp.IsEmpty()==0)
- MacToIp.Lookup(ArrayMac[i].str,ipStr);
- pChart->Append(ArrayMac[i].x,ArrayMac[i].y,ArrayMac[i].str,ipStr);
-
- }
- pChart->WorkPercent();
- ArrayMac.RemoveAll();
- CString txt="";
- txt=pChart->GetText();
- m_text.SetWindowText(txt);
- }
- void CLanFlowDlg::OnIP()
- {
- CString oid,cp1,cp2;
- m_snmp.clear();
- oid="1.3.6.1.4.1.9.2.4.11.0";
- m_snmp.GetOne(ip,community,oid,cp1);
- m_snmp.Set(ip,community,oid,cp1,0);
- m_snmp.GetOne(ip,community,oid,cp2);
- if (atoi(cp2)==atoi(cp1)+1)
- {
- oid="1.3.6.1.4.1.9.2.4.9.1.1";
- m_snmp.GetTree(ip,community,oid);
- oid="1.3.6.1.4.1.9.2.4.9.1.2";
- m_snmp.GetTree(ip,community,oid);
- oid="1.3.6.1.4.1.9.2.4.9.1.4";
- m_snmp.GetTree(ip,community,oid);
- int row=m_snmp.GetCount()/3;
- pChart->Init();
- for (int i=0;i<row;i++)
- {
- int data=atoi(m_snmp.GetValue(i+2*row));
- pChart->Append(data,0,m_snmp.GetValue(i),m_snmp.GetValue(i+row));
- }
- pChart->WorkPercent();
- CString txt="";
- txt=pChart->GetText();
- m_text.SetWindowText(txt);
- }
- else
- {
- MessageBox("出现错误,请检查配置!");
- return;
- }
-
- }
- void CLanFlowDlg::OnLegend()
- {
- pChart->SetMark();
- }
- void CLanFlowDlg::OnPercent()
- {
- pChart->SetPercent();
- }
- void CLanFlowDlg::OnLeft()
- {
- pChart->SetFirst(false);
- }
- void CLanFlowDlg::OnRight()
- {
- pChart->SetFirst(true);
- }