【正文】
{(_T(Unable to open the adapter. %s is not supported by WinPcap),CString(devnowname))。AfxMessageBox(errstring)。pcap_freealldevs(devnow)。return 1。}if (devnowaddresses != NULL)/* 獲取接口第一個(gè)地址的掩碼*/寧波工程學(xué)院本科畢業(yè)設(shè)計(jì)論文31mask=((struct sockaddr_in *)(devnowaddressesmask))。else/* 如果這個(gè)接口沒有地址,那么我們假設(shè)這個(gè)接口在 C 類網(wǎng)絡(luò)中*/mask=0xffffff。 if (pcap_pile(adhandle, amp。fcode, CStringA(()), 1, mask) 0 ){errstring=CString(Unable to pile the packet filter. Check the syntax.)。AfxMessageBox(errstring)。/* 釋放設(shè)備列表*/pcap_freealldevs(devnow)。return 1。}if (pcap_setfilter(adhandle, amp。fcode) 0){errstring=CString(Unable to set the ensure the expression is correct)。AfxMessageBox(errstring)。pcap_freealldevs(devnow)。return 1。}pcap_dumper_t* dumpfile。dumpfile=pcap_dump_open(adhandle,CStringA(()))。if(NULL==dumpfile){寧波工程學(xué)院本科畢業(yè)設(shè)計(jì)論文32AfxMessageBox(_T(Can39。t open the dump file!))。return 1。}while((res = pcap_next_ex( adhandle, amp。header, amp。pkt_data)) = 0){if(res == 0)continue。++num。time_t local_tv_sec。struct tm *ltime。char timestr[16]。//時(shí)間戳轉(zhuǎn)換local_tv_sec = header。ltime=localtime(amp。local_tv_sec)。strftime( timestr, sizeof timestr, %H:%M:%S, ltime)。char temp[50]。_itoa(num,temp,10)。/*處理以太網(wǎng)首部*/ether_header *ethheader=(ether_header*)pkt_data。char protocaltype[10]。CSnifferDlg::GetEtherType(ethheader,protocaltype)。TCHAR srcAddr[18]。TCHAR desAddr[18]。/*處理 IPv4 協(xié)議的類型*/if(CString(protocaltype)==CString(IPv4)){/* 處理 IP 首部*/ip_header *ipheader= (ip_header *)(pkt_data+14)。 swprintf_s(srcAddr,16,_T(%d.%d.%d.%d),ipheader寧波工程學(xué)院本科畢業(yè)設(shè)計(jì)論文33,ipheader,ipheader,ipheader)。swprintf_s(desAddr,16,_T(%d.%d.%d.%d),ipheader,ipheader,ipheader,ipheader)。CSnifferDlg::GetIPv4Type(ipheader,protocaltype)。}CMyPcap::SavePacket(header,pkt_data,dumpfile)。}if(res == 1){CString errstr。(_T(Error reading the packets: %s\n), CString(pcap_geterr(adhandle)))。AfxMessageBox(errstr)。return 1。}return 0。}[15] 數(shù)據(jù)包分析利用 WinPCap 函數(shù)捕獲到的數(shù)據(jù)包,除了包含用戶數(shù)據(jù)外,還包含了時(shí)間戳,IP ,TCP 等報(bào)頭信息,在捕獲數(shù)據(jù)包之后,要對該數(shù)據(jù)包調(diào)用分析函數(shù)進(jìn)行數(shù)據(jù)包分析。數(shù)據(jù)包分析的主要依據(jù)是網(wǎng)絡(luò)協(xié)議中定義的各種包的類型和包的格式。本程序主要分析幾種在局域網(wǎng)中常見的幾種協(xié)議(IP,TCP,UDP 等) 。根據(jù)前面的設(shè)計(jì)思路,從數(shù)據(jù)鏈路層開始捕獲數(shù)據(jù)包并分析。本系統(tǒng)只對幾種協(xié)議進(jìn)行了解碼,先是分析鏈路層,然后分析網(wǎng)絡(luò)層,再分析傳輸層,最后分析應(yīng)用層。這是因?yàn)椴东@到的網(wǎng)絡(luò)數(shù)據(jù)包是一個(gè)數(shù)據(jù)幀,其中最外層的協(xié)議是鏈路層協(xié)議,然后分別是網(wǎng)絡(luò)層,傳輸層和應(yīng)用層。對于鏈路層本程序只分析了以太網(wǎng)協(xié)議,去掉以太網(wǎng)協(xié)議部分,就是 IP 協(xié)議頭;再分析 IP 頭,去掉 IP 頭部分,剩下的是 TCP 或 UDP 協(xié)議頭,再分析 TCP 或 UDP 傳輸層協(xié)議頭,去掉傳輸層協(xié)議寧波工程學(xué)院本科畢業(yè)設(shè)計(jì)論文34頭,剩下的是應(yīng)用層協(xié)議,最后分析應(yīng)用層協(xié)議(應(yīng)用層協(xié)議的分析未完全完成)。分析流程圖如下所示:開始 捕獲數(shù)據(jù)包分析以太網(wǎng)類型字段分析 A R P 協(xié)議A R P分析 I P 協(xié)議I P其他結(jié)束I P 層協(xié)議分析 T C P 協(xié)議T C P分析 U D P 協(xié)議 分析 I C M P 協(xié)議U D PI C M P結(jié)束圖 協(xié)議分析流程圖具體實(shí)現(xiàn)如下:UINT ReadTempDumpThread(LPVOID lpParameter)//從臨時(shí)文件中讀取選擇的數(shù)據(jù)進(jìn)行分析{CSnifferDlg* mDlg=((CSnifferDlg*)(AfxGetApp()GetMainWnd()))。if(NULL==(adhandle=pcap_open_offline(CStringA(()),errbuff))){CString errstr。(_T(Open dump file error,error code:s%),errbuff)。AfxMessageBox(errstr)。return 1。}for(int i=0。i=packetFind。i++){pcap_next_ex(adhandle,amp。header,amp。pkt_data)。}data=CSnifferDlg::PackToEdit(header,pkt_data)。寧波工程學(xué)院本科畢業(yè)設(shè)計(jì)論文35/*處理以太網(wǎng)首部*/ether_header *ethheader=(ether_header*)pkt_data。char type[10]。//以太網(wǎng)包類型CSnifferDlg::GetEtherType(ethheader,type)。// 獲取 MAC 地址//Framesprintf_s(Frame,1024,Frame %d: %u bytes on wire (%u bits),(packetFind+1),headerlen,(headerlen)*8)。HTREEITEM HFrame=mDlg(CString(Frame))。if((CString)type==CString(IPv4)){ip_header* ipheader=(ip_header*)(pkt_data+14)。u_short ipLen=ipheaderihl*4。CSnifferDlg::ShowIPInfo(pkt_data,mDlg)。CSnifferDlg::GetIPv4Type(ipheader,type)。}if((CString)type==CString(ARP)){arp_header* arpheader=(arp_header*)(pkt_data+14)。CSnifferDlg::ShowArpInfo(arpheader,mDlg)。}return 0。 } 過濾器模塊設(shè)計(jì)WinPcap 擁有過濾數(shù)據(jù)包的引擎,它提供成熟的過濾方法去獲取網(wǎng)絡(luò)流量的某些數(shù)據(jù)包。本程序使用 WinPcap 庫進(jìn)行開發(fā),繼承了 WinPcap 庫最強(qiáng)大的封包過濾功能。程序預(yù)設(shè)幾種不同的過濾語法,對捕獲的數(shù)據(jù)進(jìn)行過濾。具體實(shí)現(xiàn)寧波工程學(xué)院本科畢業(yè)設(shè)計(jì)論文36如下:void CFilterDlg::OnLbnSelchangeList1(){// TODO: Add your control notification handler code hereCString str[][2] = { {_T(僅限 TCP), _T(tcp)}, {_T(僅限 UDP), _T(udp)}, {_T(僅限 IP), _T(ip)},{_T(目標(biāo)端口為), _T(dst port 80)},{_T(過濾 ARP), _T(not arp)},{_T(IP ), _T( ip host )},{_T(IP ), _T( not(ip host ))},{_T(包大小大于), _T(len54)},{_T(過濾 ARP 或者 DNS), _T((not arp) or !(udp port 53))},{_T(TCP 或 UDP 端口是), _T((tcp port 80) or (udp port 80))}}。int num=()。if(LB_ERR==num){AfxMessageBox(_T(尚未選擇過濾規(guī)則!))。return。}SetDlgItemText(IDC_EDIT1,(LPCTSTR)(_bstr_t)str[num][0])。SetDlgItemText(IDC_EDIT2,(LPCTSTR)(_bstr_t)str[num][1])。}void CFilterDlg::OnBnClickedButton1()// 點(diǎn)擊確定按鈕時(shí)候獲取過濾字符串,并驗(yàn)證該過濾字符串是否符合語法規(guī)則寧波工程學(xué)院本科畢業(yè)設(shè)計(jì)論文37{// TODO: Add your control notification handler code hereGetDlgItemText(IDC_EDIT2,filter)。if(0==pcap_pile_nopcap(65536,DLT_EN10MB,amp。fcode,CStringA(etBuffer()),1,0xffffff)){CDialog::OnOK()。}else{CString err。(_T(過濾字符串\%s\不符合規(guī)范,請重新選擇! ),filter)。AfxMessageBox(err)。return。}}寧波工程學(xué)院本科畢業(yè)設(shè)計(jì)論文38第 6 章 總結(jié)網(wǎng)絡(luò)正在一步一步改變?nèi)藗兊纳睿瑫r(shí)時(shí)刻刻影響著我們的一切。當(dāng)今社會離開了網(wǎng)絡(luò)也許將陷入一片混亂。美好的事物也同樣有危險(xiǎn)性,一旦網(wǎng)絡(luò)安全受到威脅甚至遭到攻擊,勢必將導(dǎo)致很嚴(yán)重的后果。研究網(wǎng)絡(luò)監(jiān)聽技術(shù)刻不容緩,而局域網(wǎng)中的數(shù)據(jù)監(jiān)聽是其很好的練兵場。對它的研究有利于網(wǎng)絡(luò)管理,網(wǎng)絡(luò)故障排除以及網(wǎng)絡(luò)入侵檢測技術(shù)的進(jìn)一步發(fā)展。因此,它的發(fā)展將對維護(hù)整個(gè)網(wǎng)絡(luò)安全有著直接的影響。本論文涉及到的內(nèi)容知識只是對網(wǎng)絡(luò)監(jiān)聽技術(shù)的初步研究。通過對國內(nèi)外監(jiān)聽軟件進(jìn)行研究分析,簡要介紹了局域網(wǎng)環(huán)境下監(jiān)聽技術(shù)的原理。通過對TCP/IP 協(xié)議簇以及 OSI 參考模型進(jìn)行分析,初步介紹了局域網(wǎng)環(huán)境中傳輸數(shù)據(jù)的主要格式,并用 C++語言描述了相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。得益于強(qiáng)大的 WinPCap 開發(fā)包,使得開發(fā)監(jiān)聽軟件的效率提高不少。本文使用 WinPCap 開發(fā)包實(shí)現(xiàn)了在局域網(wǎng)環(huán)境下對傳輸數(shù)據(jù)的捕獲,使用 C++語言對功能進(jìn)行了實(shí)現(xiàn),實(shí)現(xiàn)了對在局域網(wǎng)傳輸?shù)臄?shù)據(jù)進(jìn)行捕獲并且分析。展望未來,挑戰(zhàn)與機(jī)遇并存。鑒于目前的網(wǎng)絡(luò)安全現(xiàn)狀,網(wǎng)絡(luò)監(jiān)聽技術(shù)還應(yīng)進(jìn)一步挖掘。而本文只不過對網(wǎng)絡(luò)監(jiān)聽技術(shù)做了初步的介紹。本人才疏學(xué)淺,文中的不足之處,希望大家批評指正。寧波工程學(xué)院本科畢業(yè)設(shè)計(jì)論文39參考文獻(xiàn)[1] 林蓮芳. 淺談局域網(wǎng)監(jiān)聽的原理及其防范對策[J]. 科技廣場,:8284[2] 周茜, 謝智學(xué). 網(wǎng)絡(luò)監(jiān)聽技術(shù)的原理與應(yīng)用[J] . 科技信息, 2022( 2): 53[3] John Wiley. Preparing Your Network to Survive Security Attacks/ Cole[M]. Sons Inc,2022[4] 胡曉元,史浩山. WinPcap 包截獲系統(tǒng)的分析及其應(yīng)用[J]. 計(jì)算機(jī)工程, 2005, 31(2): 9698.[5] 方文. 網(wǎng)絡(luò)監(jiān)聽利器一 sniffit 簡介[J].上海微型計(jì)算機(jī),20221023.[6] 邱亮, 孫亞剛著. 網(wǎng)絡(luò)安全工具及案例分析[M]. 北京:電子工業(yè)出版社,2022[7] W .Richard Ste