亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? capturepacketdlg.cpp

?? ip包解析
?? CPP
字號:
// CapturePacketDlg.cpp : 實現文件
//

#include "stdafx.h"
#include "afxmt.h"
#include "CapturePacket.h"
#include "CapturePacketDlg.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//
typedef struct hard_header{
    BYTE	des[6];          // Source port
    BYTE	src[6];          // Destination port
    u_short ftype;            // Datagram length
}hard_header;

typedef struct PacketInfo {
	struct pcap_pkthdr *header;
	const u_char *pkt_data;
} PacketInfo;

#define	MAX_PACKET_BUF	64
PacketInfo CapturePacket[MAX_PACKET_BUF];
int	CaptureHeader,CaptureTail;

pcap_t *adhandle;
// 創建子線程變量
CWinThread *m_Capturer;
CEvent hEventGetPacket;
bool bExit;

UINT Capturer(PVOID hWnd);


// 用于應用程序“關于”菜單項的 CAboutDlg 對話框

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// 對話框數據
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 實現
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CCapturePacketDlg 對話框



CCapturePacketDlg::CCapturePacketDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCapturePacketDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCapturePacketDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_IfList, m_IfList);
	DDX_Control(pDX, IDC_CAPTURE, m_Capture);
	DDX_Control(pDX, IDC_IfInfo, m_IFInfo);
	DDX_Control(pDX, IDC_CaptureInfo, m_CaptureInfo);
	DDX_Control(pDX, IDC_Filter, m_Filter);
	DDX_Control(pDX, IDC_STOP, m_Stop);
}

BEGIN_MESSAGE_MAP(CCapturePacketDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_LBN_SELCHANGE(IDC_IfList, OnLbnSelchangeIflist)
	ON_BN_CLICKED(IDC_CAPTURE, OnBnClickedCapture)
	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
	ON_MESSAGE(WM_PACKET,OnPacket)
	ON_MESSAGE(WM_PACKET_ERR,OnPacketErr)
	
	ON_BN_CLICKED(IDC_STOP, OnBnClickedStop)
END_MESSAGE_MAP()


// CCapturePacketDlg 消息處理程序

BOOL CCapturePacketDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 將\“關于...\”菜單項添加到系統菜單中。

	// IDM_ABOUTBOX 必須在系統命令范圍內。
	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);			// 設置大圖標
	SetIcon(m_hIcon, FALSE);		// 設置小圖標

	// TODO:在此添加額外的初始化代碼
	
	//獲取本機的接口列表
	pcap_if_t *d;
    char errbuf[PCAP_ERRBUF_SIZE],strbuf[256];
    
    //獲得本機的設備列表
    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /*無需認證*/, &alldevs, errbuf) == -1)
    {
        sprintf(strbuf,"pcap_findalldevs_ex錯誤: %s", errbuf); //錯誤,返回錯誤信息
		m_IfList.InsertString(-1,strbuf);
		m_Capture.EnableWindow(FALSE);
        return TRUE;
    }
    
    //顯示接口列表
    for(d= alldevs; d != NULL; d= d->next)
    {
        sprintf(strbuf,"%s", d->name);
		m_IfList.InsertString(-1,strbuf);
	}
	
	//顯示選中接口的詳細信息
	m_IfList.SetCurSel(0);
	OnLbnSelchangeIflist();

	return TRUE;  // 除非設置了控件的焦點,否則返回 TRUE
}

void CCapturePacketDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// 如果向對話框添加最小化按鈕,則需要下面的代碼
//  來繪制該圖標。對于使用文檔/視圖模型的 MFC 應用程序,
//  這將由框架自動完成。

void CCapturePacketDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于繪制的設備上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使圖標在工作矩形中居中
		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;

		// 繪制圖標
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//當用戶拖動最小化窗口時系統調用此函數取得光標顯示。
HCURSOR CCapturePacketDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

void CCapturePacketDlg::OnLbnSelchangeIflist()
{
	// TODO: 在此添加控件通知處理程序代碼
    pcap_if_t *d;
	pcap_addr_t *a;
    char strbuf[256];
    
	m_IfList.GetText(m_IfList.GetCurSel(),strbuf);

    //查找選擇的接口
    for(d= alldevs; d != NULL; d= d->next)
        if (strcmp(strbuf,d->name) == 0) break;

	//顯示選擇接口的詳細信息
	m_IFInfo.ResetContent();
	
	sprintf(strbuf,"%s",d->name);
	m_IFInfo.InsertString(-1,strbuf);
    if (d->description)
	{
		sprintf(strbuf,"%s", d->description);
    	m_IFInfo.InsertString(-1,strbuf);
	}

	//獲取IP信息
	for(a=d->addresses;a;a=a->next)
	{
        if (a->addr->sa_family==AF_INET)
		{
           	if (a->addr)
			{
				sprintf(strbuf,"  IP地址:%s",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));
				m_IFInfo.InsertString(-1,strbuf);
			}
            if (a->netmask)
			{
                sprintf(strbuf,"  地址掩碼:%s",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));
				m_IFInfo.InsertString(-1,strbuf);
			}
            if (a->broadaddr)
			{
                sprintf(strbuf,"  廣播地址:%s",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));
				m_IFInfo.InsertString(-1,strbuf);
			}
            if (a->dstaddr)
			{
				sprintf(strbuf,"  目的地址:%s",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));
				m_IFInfo.InsertString(-1,strbuf);
			}
		}
	}  
}

// 將數字型的IP地址轉換成字符串
char * CCapturePacketDlg::iptos(unsigned long in)
{
	static char output[3*4+3+1];
    BYTE *p;

    p = (u_char *)&in;
    sprintf(output, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
    return output;
}

void CCapturePacketDlg::OnBnClickedCapture()
{
	// TODO: 在此添加控件通知處理程序代碼
    pcap_if_t *d;
    char errbuf[PCAP_ERRBUF_SIZE],strbuf[256];
	
	u_int netmask;
	char packet_filter[256];
	struct bpf_program fcode;


	m_IfList.GetText(m_IfList.GetCurSel(),strbuf);

    //查找選擇的接口
    for(d= alldevs; d != NULL; d= d->next)
        if (strcmp(strbuf,d->name) == 0) break;

	// 打開接口
    if ( (adhandle= pcap_open(d->name,          // name of the device
                              65536,            // portion of the packet to capture. 
                                                // 65536 guarantees that the whole packet will be captured on all the link layers
                              PCAP_OPENFLAG_PROMISCUOUS,    // promiscuous mode
                              1000,             // read timeout
                              NULL,             // authentication on the remote machine
                              errbuf            // error buffer
                              ) ) == NULL)
    {
        sprintf(strbuf,"接口未能打開。WinPcap不支持%s。", d->name);
		m_CaptureInfo.InsertString(-1,strbuf);
        return;
    }

	//設置過濾規則
	if (m_Filter.GetWindowText(packet_filter,200) != 0)
	{
		if(d->addresses != NULL)
			/* Retrieve the mask of the first address of the interface */
			netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
		else
			/* If the interface is without addresses we suppose to be in a C class network */
			netmask=0xffffff; 

		//compile the filter
	    if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )
		{
			sprintf(strbuf,"過濾規則編譯不成功,請檢查書寫的規則語法是否正確!");
			m_CaptureInfo.InsertString(-1,strbuf);
	        return;
		}
    
        if (pcap_setfilter(adhandle, &fcode)<0)
		{
			sprintf(strbuf,"\nError setting the filter.\n");
			m_CaptureInfo.InsertString(-1,strbuf);
	        return ;
		}
	}

	CaptureHeader=0;
	CaptureTail=0;
	bExit=FALSE;

	m_CaptureInfo.ResetContent();
	m_Capture.EnableWindow(FALSE);
	m_Stop.EnableWindow(TRUE);
	m_IfList.EnableWindow(FALSE);
	m_Filter.EnableWindow(FALSE);
	
	sprintf(strbuf,"監聽%s開始......", d->description);
	m_CaptureInfo.InsertString(-1,strbuf);

	m_Capturer=AfxBeginThread(Capturer,NULL,THREAD_PRIORITY_NORMAL);
	
}
   

UINT Capturer(PVOID hWnd)
{
	int	res;

	while (bExit == FALSE)
	{
		res = pcap_next_ex( adhandle, &CapturePacket[CaptureTail].header, &CapturePacket[CaptureTail].pkt_data);
        if (res == 0) continue;            // Timeout elapsed
		if (res >0)
		{
			CaptureTail++;
			if (CaptureTail == MAX_PACKET_BUF) CaptureTail=0;
			AfxGetApp()->m_pMainWnd->PostMessage(WM_PACKET,0,0);
		}
		else
		{
			AfxGetApp()->m_pMainWnd->PostMessage(WM_PACKET_ERR,0,0);
		}
	}
	return 0;
}

void CCapturePacketDlg::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知處理程序代碼
	bExit=TRUE;

	OnCancel();
}

LRESULT CCapturePacketDlg::OnPacket(WPARAM wParam, LPARAM lParam)
{
    char strbuf[256];
   	struct tm *ltime;
	char timestr[16];

	hard_header *hh;

	while (CaptureHeader!=CaptureTail)
	{
		sprintf(strbuf,"------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
		m_CaptureInfo.InsertString(-1,strbuf);

		// convert the timestamp to readable format 
		ltime=localtime(&CapturePacket[CaptureHeader].header->ts.tv_sec);
		strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);
        sprintf(strbuf,"%s,%.6d len:%d",timestr, CapturePacket[CaptureHeader].header->ts.tv_usec, CapturePacket[CaptureHeader].header->len);
		m_CaptureInfo.InsertString(-1,strbuf);
			
		hh = (hard_header *) (CapturePacket[CaptureHeader].pkt_data);
	    //print ip addresses and udp ports
		sprintf(strbuf,"目的地址: %02X-%02X-%02X-%02X-%02X-%02X      源地址: %02X-%02X-%02X-%02X-%02X-%02X     幀類型: %04X",
		hh->des[0],hh->des[1],hh->des[2],hh->des[3],hh->des[4],hh->des[5],
		hh->src[0],hh->src[1],hh->src[2],hh->src[3],hh->src[4],hh->src[5],
		ntohs(hh->ftype)
		);
		m_CaptureInfo.InsertString(-1,strbuf);
			
		CaptureHeader++;
		if (CaptureHeader == MAX_PACKET_BUF) CaptureHeader =0;
	}
	return 0;
}


afx_msg LRESULT CCapturePacketDlg::OnPacketErr(WPARAM wParam, LPARAM lParam)
{
	char	strbuf[256];

	sprintf(strbuf,"捕獲數據包調用pcap_next_ex出錯!");
	m_CaptureInfo.InsertString(-1,strbuf);

	return 0;
}

void CCapturePacketDlg::OnBnClickedStop()
{
	// TODO: 在此添加控件通知處理程序代碼
	bExit=TRUE;
	m_Capture.EnableWindow(TRUE);
	m_Stop.EnableWindow(FALSE);
	m_IfList.EnableWindow(TRUE);
	m_Filter.EnableWindow(TRUE);
	pcap_close(adhandle);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久9999吃药| 欧美色综合网站| 丝袜美腿成人在线| 自拍偷拍欧美激情| 国产欧美日韩卡一| 国产精品午夜电影| 国产精品情趣视频| 国产精品系列在线| 国产精品二三区| 亚洲精品中文在线影院| 亚洲三级久久久| 亚洲尤物在线视频观看| 亚洲免费在线观看视频| 亚洲第一福利一区| 日本成人中文字幕| 国产在线精品一区二区不卡了 | 国产老女人精品毛片久久| 激情文学综合网| 国产精品影音先锋| 99国产精品国产精品久久| 日本高清不卡一区| 91精品午夜视频| 久久久精品一品道一区| 亚洲人吸女人奶水| 日本一道高清亚洲日美韩| 麻豆精品一区二区三区| 成人高清免费观看| 日本高清不卡一区| 精品人伦一区二区色婷婷| 国产免费久久精品| 午夜精品久久久久久| 九色综合狠狠综合久久| 丁香天五香天堂综合| 欧美亚洲动漫制服丝袜| 日韩欧美一区中文| 国产精品美女一区二区在线观看| 亚洲综合在线观看视频| 激情偷乱视频一区二区三区| 99re免费视频精品全部| 欧美精品三级在线观看| 国产日韩欧美麻豆| 日韩高清一级片| 成人av集中营| 日韩亚洲欧美在线| 亚洲色图视频网站| 国产美女av一区二区三区| 91天堂素人约啪| 久久综合色8888| 日韩国产欧美在线播放| av欧美精品.com| 精品欧美一区二区久久| 亚洲一区二区精品视频| 成人h动漫精品一区二区| 91精品国产免费久久综合| 中文字幕一区不卡| 久久99久国产精品黄毛片色诱| 91农村精品一区二区在线| 精品少妇一区二区| 午夜欧美视频在线观看| 成人高清av在线| 久久久久国产精品麻豆ai换脸| 日日欢夜夜爽一区| 在线观看日韩av先锋影音电影院| 国产精品美女久久久久久久网站| 美女尤物国产一区| 欧美日韩高清影院| 亚洲一卡二卡三卡四卡无卡久久 | 精品一区二区在线播放| 在线观看日产精品| 亚洲久草在线视频| 色综合久久久久久久久久久| 亚洲国产激情av| 国产成人在线视频免费播放| 欧美不卡123| 全国精品久久少妇| 欧美一区二区三区在线| 视频一区二区欧美| 欧美日韩国产美女| 日韩黄色免费网站| 欧美日韩国产影片| 日韩av一级片| 日韩一区二区三区精品视频| 免费观看91视频大全| 欧美一区二区网站| 日韩电影免费一区| 精品久久一区二区| 久久精品国产99国产| 精品日韩一区二区| 国产成人亚洲综合a∨婷婷图片| 久久精品男人天堂av| 国产成人自拍网| 亚洲私人黄色宅男| 欧美日韩精品一区二区天天拍小说| 日韩国产欧美在线播放| 欧美一区二区免费视频| 国产一区二区三区四区在线观看 | 成人丝袜高跟foot| 国产日韩欧美精品电影三级在线| 国产a精品视频| 国产午夜一区二区三区| 色狠狠色狠狠综合| 天天综合天天做天天综合| 日韩精品一区二| 成人国产视频在线观看 | 精品视频一区三区九区| 亚欧色一区w666天堂| 精品免费日韩av| 99国产精品视频免费观看| 亚洲图片自拍偷拍| 久久综合九色综合97婷婷女人 | 2021中文字幕一区亚洲| 丰满放荡岳乱妇91ww| 亚洲女性喷水在线观看一区| 欧美在线观看视频在线| 久久99久久精品欧美| 亚洲男人的天堂网| 欧美岛国在线观看| 91污在线观看| 九一久久久久久| 亚洲高清免费观看| 日韩一区二区三| 一本久久a久久免费精品不卡| 奇米一区二区三区av| 中文字幕一区二区三区蜜月| 日韩一区二区免费高清| 成人永久免费视频| 麻豆精品久久久| 亚洲成人高清在线| 综合婷婷亚洲小说| 亚洲精品一区二区三区精华液| 91丨porny丨在线| 极品销魂美女一区二区三区| 亚洲影院久久精品| 亚洲国产精品高清| 久久中文字幕电影| 日韩一级大片在线| 欧美视频中文字幕| 99精品久久免费看蜜臀剧情介绍| 狠狠色狠狠色综合| 日本中文字幕一区二区有限公司| 中文字幕日韩av资源站| 久久久91精品国产一区二区三区| 欧美一区二区三级| 欧美天堂亚洲电影院在线播放| 成人高清伦理免费影院在线观看| 久久精品国产精品亚洲综合| 日韩福利电影在线| 一个色在线综合| 国产精品久久看| 国产精品短视频| 国产精品国产三级国产aⅴ无密码| 久久久夜色精品亚洲| 精品日韩一区二区| 26uuu亚洲综合色| 久久久亚洲欧洲日产国码αv| 日韩美女视频在线| 精品久久人人做人人爱| 久久综合精品国产一区二区三区| 久久综合狠狠综合久久综合88 | 国产拍揄自揄精品视频麻豆| 亚洲精品一区二区三区蜜桃下载| 久久综合精品国产一区二区三区 | 日韩精品一区二区三区视频在线观看| 欧美日韩精品一区二区三区蜜桃 | 日韩精品乱码免费| 日本不卡一区二区| 久久国产三级精品| 高清日韩电视剧大全免费| 成人午夜免费视频| 91视频在线看| 91精品国产综合久久精品图片| 欧美一级生活片| 精品欧美乱码久久久久久1区2区| 91精品国产色综合久久不卡蜜臀| 精品视频一区三区九区| 欧美视频一区在线观看| 18欧美乱大交hd1984| 亚洲第一激情av| 久久99精品国产麻豆婷婷| 视频一区在线播放| 国产成人在线看| 色综合天天综合在线视频| 99久久精品免费| 欧美高清你懂得| 欧美三级电影网| 国产亚洲人成网站| 一区二区三区鲁丝不卡| 亚洲欧美视频一区| 精品一区二区三区在线播放| 亚洲午夜在线视频| 国内久久婷婷综合| 亚洲一区二区三区精品在线| 国产一区二区在线免费观看| 在线精品视频一区二区三四| 91国偷自产一区二区三区观看| 欧美变态凌虐bdsm| 欧美日韩国产精选| 国产精品日产欧美久久久久| 日本不卡的三区四区五区| 久久精品噜噜噜成人av农村|