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

📄 ethernetspydlg.cpp

📁 网卡驱动相关实例 这是和网卡NT KMD驱动程序有关的一些资料和例子。主要是以下三方面内容: 3.1 article 一些有用的文档 3.2 Canberra 网络诊听工具Ethern
💻 CPP
字号:
// EthernetSpyDlg.cpp : implementation file
//

#include "stdafx.h"

#include "packet32.h"
#include "EthernetSpy.h"
#include "EthernetSpyReader.h"
#include "EthernetSpyDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CEthernetSpyDlg dialog


CEthernetSpyDlg::CEthernetSpyDlg(EthernetSpyReader* _SpyReader, CWnd* pParent /*=NULL*/)
	: CDialog(CEthernetSpyDlg::IDD, pParent)
{
	SpyReader = _SpyReader;
	uiTimer = 0;
	uiPos = 0;
	uiLastRead = SpyReader->StoredPkt;

	MyParent = pParent;

	IsScrolling = TRUE;

	//{{AFX_DATA_INIT(CEthernetSpyDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CEthernetSpyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CEthernetSpyDlg)
	DDX_Control(pDX, IDC_SPYLIST, m_SpyList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CEthernetSpyDlg, CDialog)
	//{{AFX_MSG_MAP(CEthernetSpyDlg)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_START, OnStart)
	ON_BN_CLICKED(IDC_STOP, OnStop)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEthernetSpyDlg message handlers

BOOL CEthernetSpyDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	uiTimer = SetTimer(3, SpyReader->RefreshTime, NULL);	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CEthernetSpyDlg::OnTimer(UINT nIDEvent) 
{
	TCHAR Testo[255], Src[255], Dest[255], RawData[255];
	PACKET_INFO Packet;
	UINT uiNumPkt, StoredPkt;
	UINT i, j;

	StoredPkt = SpyReader->StoredPkt;

	uiNumPkt = StoredPkt - uiLastRead;

	for (j = 0; j < uiNumPkt; j++)
	{
		EnterCriticalSection(&(SpyReader->CritSecCounters));
		{
			memcpy( &Packet, &(SpyReader->Pkt[(uiLastRead + j) % SpyReader->MaxPkt]), sizeof(PACKET_INFO) );
		}	
		LeaveCriticalSection(&(SpyReader->CritSecCounters));

		for(i=0; i<12; i+=2)
		{
			sprintf(&(Dest[i]), TEXT("%02X"), Packet.Frame.DestAddr[i/2]);
		}
		
		for(i=0; i<12; i+=2)
		{
			sprintf(&(Src[i]), TEXT("%02X"), Packet.Frame.SrcAddr[i/2]);
		}

		for(i=0; i<20; i+=2)
		{
			sprintf(&(RawData[i]), TEXT("%02X"), Packet.Frame.Dati[i/2]);
		}

		sprintf(Testo, TEXT("%5lu   %5lu   %s  %s   %02X%02X   %s"), Packet.Num, Packet.Len,  Dest, Src, Packet.Frame.Type[0], Packet.Frame.Type[1], RawData);
		m_SpyList.InsertString(-1, Testo);
	}
	
	uiLastRead = StoredPkt;

	if (IsScrolling)
		m_SpyList.SendMessage (WM_VSCROLL, SB_BOTTOM);
}

void CEthernetSpyDlg::OnStart() 
{
	IsScrolling = TRUE;
	GetDlgItem(IDC_START)->EnableWindow(FALSE);
	GetDlgItem(IDC_STOP)->EnableWindow(TRUE);
}

void CEthernetSpyDlg::OnStop() 
{
	IsScrolling = FALSE;
	GetDlgItem(IDC_START)->EnableWindow(TRUE);
	GetDlgItem(IDC_STOP)->EnableWindow(FALSE);
}

void CEthernetSpyDlg::OnClose() 
{
	MyParent->SendMessage( WM_SPYDLGCLOSE );

	CDialog::OnClose();
	KillTimer(uiTimer);
}

⌨️ 快捷键说明

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