⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monitorgeneralpage.cpp

📁 网络监听分析程序
💻 CPP
字号:
// MonitorGeneralPage.cpp : implementation file
//

#include "stdafx.h"
#include "monitor.h"
#include "MonitorGeneralPage.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMonitorGeneralPage property page

extern "C" __declspec(dllimport) int ReceiveAdapter(byte * buf,int len);

UINT Monitor( LPVOID pParam );

IMPLEMENT_DYNCREATE(CMonitorGeneralPage, CPropertyPage)

CMonitorGeneralPage::CMonitorGeneralPage() : CPropertyPage(CMonitorGeneralPage::IDD)
{
	//{{AFX_DATA_INIT(CMonitorGeneralPage)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

CMonitorGeneralPage::~CMonitorGeneralPage()
{
}

void CMonitorGeneralPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMonitorGeneralPage)
	DDX_Control(pDX, IDC_LIST_GENERAL, m_GeneralList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMonitorGeneralPage, CPropertyPage)
	//{{AFX_MSG_MAP(CMonitorGeneralPage)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMonitorGeneralPage message handlers

BOOL CMonitorGeneralPage::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_Thread=NULL;
	InitListHeader();
	m_Thread=AfxBeginThread(Monitor,this);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CMonitorGeneralPage::InitListHeader()
{
	m_GeneralList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	m_GeneralList.InsertColumn(0,"协议",LVCFMT_CENTER,50);
	m_GeneralList.InsertColumn(1,"源地址",LVCFMT_CENTER,110);
	m_GeneralList.InsertColumn(2,"目标地址",LVCFMT_CENTER,110);
	m_GeneralList.InsertColumn(3,"源端口",LVCFMT_CENTER,50);
	m_GeneralList.InsertColumn(4,"目标端口",LVCFMT_CENTER,60);
	m_GeneralList.InsertColumn(5,"数据报长度",LVCFMT_CENTER,80);
}
UINT Monitor( LPVOID pParam )
{
	CMonitorGeneralPage * page=(CMonitorGeneralPage *)pParam;
	byte buffer[65535];
	char buf[16];
	while(true)
	{		
		memset(buffer,0,65535);
		int len=ReceiveAdapter(buffer,65535);
		if(len>0)//接收到数据
		{
			IP_HEADER * ip=(IP_HEADER *)buffer;
			int iphdr_len=(ip->ver_len&15)*32/8;
			TCP_HEADER * tcp=(TCP_HEADER *)(buffer+iphdr_len);
			unsigned __int16 src_port=tcp->source_port[0]*0x100+tcp->source_port[1];//源端口
			unsigned __int16 dest_port=tcp->dest_port[0]*0x100+tcp->dest_port[1];;//目标端口
			switch(ip->protocol)
			{
			case PROTOCOL_ICMP:
				page->m_GeneralList.InsertItem(0,"ICMP");
				break;
			case PROTOCOL_TCP:
				page->m_GeneralList.InsertItem(0,"TCP");
				break;
			case PROTOCOL_UDP:
				page->m_GeneralList.InsertItem(0,"UDP");
				break;
			default:
				page->m_GeneralList.InsertItem(0,"其他协议");
				break;
			}			
			//源地址
			memset(buf,0,16);
			sprintf(buf,"%d.%d.%d.%d",ip->src_addr[0],ip->src_addr[1],ip->src_addr[2],ip->src_addr[3]);
			page->m_GeneralList.SetItemText(0,1,buf);
			//目标地址
			memset(buf,0,16);
			sprintf(buf,"%d.%d.%d.%d",ip->tar_addr[0],ip->tar_addr[1],ip->tar_addr[2],ip->tar_addr[3]);
			page->m_GeneralList.SetItemText(0,2,buf);
			//源端口
			memset(buf,0,16);
			sprintf(buf,"%d",src_port);
			page->m_GeneralList.SetItemText(0,3,buf);
			//目标端口
			memset(buf,0,16);
			sprintf(buf,"%d",dest_port);
			page->m_GeneralList.SetItemText(0,4,buf);
			//数据报长度
			__int16 datalen=ip->length[0]*0x100+ip->length[1];
			memset(buf,0,16);
			sprintf(buf,"%d",datalen);
			page->m_GeneralList.SetItemText(0,5,buf);
		
		}
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -