




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)通信與網(wǎng)絡(luò)課程設(shè)計實踐報告題 目: 解析ip數(shù)據(jù)包 姓 名: 學(xué) 院: 信息科技學(xué)院 專 業(yè): 計算機(jī)科學(xué)技術(shù)系 班 級: 計科73 學(xué) 號: 1927303 指導(dǎo)教師: 職稱: 2010 年9月 15日摘要:互聯(lián)網(wǎng)絡(luò)層是tcp/ip協(xié)議參考模型中的關(guān)鍵部分.ip協(xié)議把傳輸層送來的消息組裝成ip數(shù)據(jù)包,并把ip數(shù)據(jù)包傳送給數(shù)據(jù)鏈層.ip協(xié)議在tcp/ip協(xié)議族中處于核心地位,ip協(xié)議制定了統(tǒng)一的ip數(shù)據(jù)包格式,以消除個通信子網(wǎng)中的差異,從而為信息發(fā)送方和接收方提供了透明的傳輸通道。本程序使用套接字socket編程,將網(wǎng)受流經(jīng)網(wǎng)卡的所有類型的數(shù)據(jù)包。首先,初始化套接字,然后監(jiān)聽數(shù)據(jù)包,解析數(shù)
2、據(jù)包。關(guān)鍵字:tcp/ip協(xié)議,數(shù)據(jù)包,套接字,解析一 設(shè)計內(nèi)容及任務(wù)利用c/c+/vc/vb/java語言,根據(jù)所學(xué)知識,設(shè)計程序,功能為捕獲網(wǎng)絡(luò)中的ip數(shù)據(jù)包,接續(xù)數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時寫入日志文件。具體:1. 以命令行形式運(yùn)行,ipparse logfile,其中ipparse是程序命,而logfile則代表記錄記過的日志文件。2. 在標(biāo)準(zhǔn)輸出和日志文件中寫入捕獲的ip包的版本、頭長度、服務(wù)類型、數(shù)據(jù)包總長度、數(shù)據(jù)包標(biāo)識、分段標(biāo)志、分段偏移值、生存時間、上層協(xié)議類型、頭校驗和、源ip地址和目的ip地址等內(nèi)容。3. 當(dāng)程序接收到鍵盤輸入ctrl+c時推出。二 設(shè)計思想
3、ip數(shù)據(jù)報的格式說明ip協(xié)議都具有什么功能。其首部,版本目前廣泛使用的版本號為4;首部長度站4bit;服務(wù)類型占8bit,其中服務(wù)類型tos子域占4位,優(yōu)先級子域占3位,另一位為保留位;總長度字段為2b,ip數(shù)據(jù)包的最大長度是65535b;標(biāo)識占16bit,它是一個計數(shù)器,用來產(chǎn)生數(shù)據(jù)報的標(biāo)識;標(biāo)志占3bit,其中最低為為mf,mf=1時為后面“還有分片”,mf=0表示這是數(shù)據(jù)報片中的最后一個,df=0時,表示允許分片;片偏移以8個字節(jié)為偏移單位;生存時間字段記為ttl,單位為秒;協(xié)議段占8bit,用于指出次數(shù)據(jù)是使用何種協(xié)議,典型的協(xié)議號有6:tcp,17:udp,1:icmp。本程序使用套
4、接字socket編程,將網(wǎng)受流經(jīng)網(wǎng)卡的所有類型的數(shù)據(jù)包。首先,初始化套接字,然后監(jiān)聽數(shù)據(jù)包,解析數(shù)據(jù)包??ㄔO(shè)為能夠接socket sock=socket(af_inet,sock_raw,ipproto_ip)用來創(chuàng)建套接字,其參數(shù)為通信發(fā)生的區(qū)字段和套接字的類型。wsaioctl(sock , io_rcvall ,&dwbufferinlen , sizeof(dwbufferinlen)函數(shù)用來把網(wǎng)卡設(shè)置為混雜模式。recv(sock,buffer,65535,0)函數(shù)用來接收經(jīng)過的ip包,其參數(shù)分別是套接字描述符,緩沖區(qū)的地址,緩沖區(qū)的大小。typedef struct ip_head
5、ip_head;用來定義ip頭部數(shù)據(jù)。setsockopt(sock,ipproto_ip,ip_hdrincl,(char *)函數(shù)用來獲取本機(jī)ip地址htons()函數(shù)將無符號短整型轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序的數(shù)據(jù)本程序在windows環(huán)境下利用c+語言編寫。三 程序流程四 具體程序代碼#include #include #include #include#include #pragma comment(lib,ws2_32) /指定連接到網(wǎng)絡(luò)應(yīng)用和internet#define io_rcvall _wsaiow(ioc_vendor,1) typedef struct ip_head unio
6、n /定義聯(lián)合 unsigned char version; unsigned char headlen; ; unsigned char servicetype; unsigned short totallen; unsigned short identifier; union unsigned short flags; unsigned short fragoffset; ; unsigned char timetolive; unsigned char protocol; unsigned short headchecksum; unsigned int sourceaddr; unsi
7、gned int destinaddr; unsigned char options; ip_head; /定義ip頭部的數(shù)據(jù)結(jié)構(gòu)void main(int argc,char *argv) using namespace std; ofstream outfile(c:logfile.txt,ios:out);if(argc!=2) coutendl請以下面格式輸入命令行:packparse packet_sumendl; return; wsadata wsadata; if(wsastartup(makeword(2,2), &wsadata)!=0) coutendlwsastartu
8、p初始化失敗endl; return; socket sock=socket(af_inet,sock_raw,ipproto_ip); /三個參分別為通信發(fā)生的區(qū)字段,套接字的類型,與ip協(xié)議if(sock=invalid_socket) coutendl創(chuàng)建socket失敗!endl; closesocket(sock); wsacleanup(); bool flag=true; if(setsockopt(sock,ipproto_ip,ip_hdrincl,(char *) &flag,sizeof(flag)=socket_error) coutendlsetsockopt操作失敗
9、:wsagetlasterror()endl; closesocket(sock); wsacleanup(); char hostname128;/獲取主機(jī)名 if(gethostname(hostname,100)=socket_error) coutendlgethostname操作失敗:wsagetlasterror()endl; closesocket(sock); wsacleanup(); hostent *phostip; /獲取本地ipif(phostip=gethostbyname(hostname)=null) coutendlgethostbyname操作失敗:wsag
10、etlasterror()h_addr_list0; if(bind(sock,(psockaddr)&host_addr,sizeof(host_addr)=socket_error) coutendlbind操作失敗:wsagetlasterror()endl; closesocket(sock); /綁定網(wǎng)卡wsacleanup(); dword dwbufferlen10; dword dwbufferinlen=1; dword dwbytesreturned=0; if(wsaioctl(sock , io_rcvall ,&dwbufferinlen , sizeof(dwbuf
11、ferinlen) , &dwbufferlen,sizeof(dwbufferlen),&dwbytesreturned,null,null)=socket_error) coutendlwsaioctl操作失敗:wsagetlasterror()endl; closesocket(sock); /將網(wǎng)卡設(shè)為混雜模式,以接受所有數(shù)據(jù)wsacleanup(); coutendl開始解析ip包:endl; char buffer65535; /設(shè)置緩沖區(qū)int packsum=atoi(argv1); /字符串轉(zhuǎn)換為整形for(int i=0;i0) /四個參數(shù)分別是套接字描述符,緩沖區(qū)的地址,
12、緩沖區(qū)大小,附加標(biāo)志 ip_head ip=*(ip_head *)buffer; cout-endl; cout版本:4)endl; /獲取頭部長度字段cout頭部長度:(ip.headlen &0x0f)*4)endl; /獲取頭部長度字段cout服務(wù)類型:priority5), service1)&0x0f)endl; /優(yōu)先級子域和tos子域cout總長度:ip.totallenendl;/獲取總長度字段 cout標(biāo)識符:ip.identifierendl;/獲取標(biāo)識字段 cout標(biāo)志位:15)&0x01),df= 14)&0x01),mf=13)&0x01)endl; /獲得標(biāo)志字段
13、cout片偏移:(ip.fragoffset&0x1fff)endl; /獲取分段偏移字段cout生存周期:(int)ip.timetoliveendl; /獲取生存時間字段cout協(xié)議:protocol(int)ip.protocolendl; /獲取協(xié)議字段cout頭部校驗和:ip.headchecksumendl; /獲取頭校驗和字段cout原地址:inet_ntoa(*(in_addr *)&ip.sourceaddr)endl; /獲取源ip地址字段cout目的ip地址:inet_ntoa(*(in_addr *)&ip.destinaddr)endl; /獲取目的ip地址字段out
14、file-endl; outfile版本:4)endl; outfile頭部長度:(ip.headlen &0x0f)*4)endl; outfile服務(wù)類型:priority5), service1)&0x0f)endl; outfile總長度:ip.totallenendl; outfile標(biāo)識符:ip.identifierendl; outfile標(biāo)志位:15)&0x01),df= 14)&0x01),mf=13)&0x01)endl; outfile片偏移:(ip.fragoffset&0x1fff)endl; outfile生存周期:(int)ip.timetoliveendl; o
15、utfile協(xié)議:protocol(int)ip.protocolendl; outfile頭部校驗和:ip.headchecksumendl; outfile原地址:inet_ntoa(*(in_addr *)&ip.sourceaddr)endl; outfile目的ip地址:inet_ntoa(*(in_addr *)&ip.destinaddr)endl; closesocket(sock); wsacleanup(); 五 程序運(yùn)行結(jié)果程序編譯運(yùn)行后:以命令行形式運(yùn)行程序ipparse:同時在程序所在的文件夾中生成了名為logfile的txt文件,里面記錄了上面顯示的內(nèi)容。六 調(diào)試過
16、程調(diào)試過程中遇到的問題就是每次進(jìn)行錯誤判斷后,如果出錯結(jié)束程序。開始用了goto exit_clean來進(jìn)行,但是程序報錯,所以在每次判斷后加上closesocket(sock); wsacleanup();來結(jié)束套接字的使用。七 心得體會通過這一個星期的課程設(shè)計,我基本掌握了用套接字編程來實現(xiàn)獲取并解析ip數(shù)據(jù)包的方法。當(dāng)然,過程要比想象艱辛得多。首先是一個設(shè)計思想的問題。眾所周知,ip數(shù)據(jù)報的格式說明了ip協(xié)議都具有什么功能。但是由于在數(shù)據(jù)報環(huán)節(jié)知識的薄弱,我特地去圖書館查閱了相關(guān)資料,才大致了解了ip數(shù)據(jù)報的各種位與協(xié)議的概念和意義。進(jìn)而在腦中才形成了解決問題的理念網(wǎng)卡可以接收流經(jīng)其的各種數(shù)據(jù)報,所以毫無疑問的應(yīng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 暖通畢業(yè)設(shè)計報告
- 鋼琴啟蒙教學(xué)課件
- 課件教學(xué)設(shè)計課件
- 地理組件教學(xué)課件圖片
- 特色課教學(xué)課件
- DB61∕T 1145-2018 城市軌道交通運(yùn)營安全標(biāo)志及使用規(guī)范
- 【佳木斯】2025年黑龍江撫遠(yuǎn)市事業(yè)單位公開招聘工作人員15人筆試歷年典型考題及考點剖析附帶答案詳解
- 新手烘焙活動方案
- 05《人應(yīng)當(dāng)堅持正義》同步訓(xùn)練【大單元教學(xué)】高二語文同步備課系列(統(tǒng)編版選擇性必修中冊)
- 春游公司策劃方案
- 2024年重慶開州區(qū)中醫(yī)院招聘筆試真題
- 海外倉一件代發(fā)服務(wù)合同范本下載
- 2025年山西省華艦體育控股集團(tuán)有限公司所屬企業(yè)校園招聘19人筆試參考題庫附帶答案詳解
- 2025臺州市椒江區(qū)輔警考試試卷真題
- 國開本科《管理英語4》機(jī)考總題庫及答案
- 軟裝行業(yè)競品分析報告
- 腎占位超聲診斷
- T∕CACM 024-2017 中醫(yī)臨床實踐指南 穴位埋線減肥
- 化工企業(yè)交接班制度(附表格)-樣本模板
- 鎂合金半固態(tài)注射成型技術(shù)的研究與發(fā)展
- 企業(yè)管理咨詢重點總結(jié)
評論
0/150
提交評論