計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告(IP數(shù)據(jù)包)_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告(IP數(shù)據(jù)包)_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告(IP數(shù)據(jù)包)_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告(IP數(shù)據(jù)包)_第4頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告(IP數(shù)據(jù)包)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

CENTRALSOUTHUNIVERSITY網(wǎng)絡(luò)工程實(shí)驗(yàn)報(bào)告學(xué)生姓名惠苗壯指導(dǎo)教師劉麗敏學(xué)院信息科學(xué)與工程學(xué)院專業(yè)班級(jí)計(jì)科0904班學(xué)號(hào)0909091627完成時(shí)間2012年05月30日

目錄第一章設(shè)計(jì)目的、任務(wù)與要求 1.1設(shè)計(jì)目的······················································11.2設(shè)計(jì)的任務(wù)與要求··············································1第二章系統(tǒng)分析設(shè)計(jì) 2.1捕獲原理分析··················································22.2數(shù)據(jù)包詳細(xì)結(jié)構(gòu)················································32.3主流程圖······················································5第三章系統(tǒng)實(shí)現(xiàn)3.1WindowsSocket編程簡(jiǎn)介······································63.2報(bào)頭數(shù)據(jù)結(jié)構(gòu)定義·············································63.3程序具體實(shí)現(xiàn)················································73.4程序運(yùn)行····················································12第四章心得體會(huì) ·················································14參考文獻(xiàn)···························································16附錄·······························································17IP數(shù)據(jù)包的捕獲與分析第二章系統(tǒng)分析設(shè)計(jì)設(shè)計(jì)目的、任務(wù)與要求1.1課程設(shè)計(jì)的目的:《計(jì)算機(jī)網(wǎng)絡(luò)原理》課程是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的重要專業(yè)課程之一。隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的迅速發(fā)展和在當(dāng)今信息社會(huì)中的廣泛應(yīng)用,給《計(jì)算機(jī)網(wǎng)絡(luò)》課程的教學(xué)提出了新的更高的要求。計(jì)算機(jī)網(wǎng)絡(luò)原理課程設(shè)計(jì)的目的與任務(wù)是為了使學(xué)生在課程學(xué)習(xí)的同時(shí),通過在一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境中的實(shí)際操作,鞏固《計(jì)算機(jī)網(wǎng)絡(luò)原理》課堂教學(xué)所講授網(wǎng)絡(luò)的基本理論、基本概念和方法技術(shù),對(duì)現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)的基本功能有一個(gè)初步的了解。為學(xué)生今后使用計(jì)算機(jī)網(wǎng)絡(luò)的理論和方法,開發(fā)大型、復(fù)雜的集成系統(tǒng),打下一個(gè)堅(jiān)實(shí)的基礎(chǔ).1.2課程設(shè)計(jì)的任務(wù)與要求:課程設(shè)計(jì)的基本要求是:1.通過課程設(shè)計(jì)實(shí)踐,理解計(jì)算機(jī)網(wǎng)絡(luò)原理的基本要點(diǎn);2.通過課程設(shè)計(jì)實(shí)踐,要求學(xué)生對(duì)于網(wǎng)絡(luò)的相關(guān)協(xié)議有深入的掌握,通過實(shí)驗(yàn)加深對(duì)計(jì)算機(jī)網(wǎng)絡(luò)工作原理的理解,學(xué)會(huì)使用網(wǎng)絡(luò)軟件開發(fā)工具,培養(yǎng)學(xué)生的自學(xué)能力和開發(fā)網(wǎng)絡(luò)系統(tǒng)軟件的能力,并訓(xùn)練軟件工程的開發(fā)方法。3.通過課程設(shè)計(jì)實(shí)踐,進(jìn)一步培養(yǎng)學(xué)生綜合開發(fā)網(wǎng)絡(luò)軟件的能力,培養(yǎng)團(tuán)隊(duì)合作的能力,重點(diǎn)在網(wǎng)絡(luò)應(yīng)用軟件的開發(fā)。4.整個(gè)課程設(shè)計(jì)要求學(xué)生按軟件工程原理進(jìn)行組織,文檔和參考文獻(xiàn)必須規(guī)范、齊全。1.3IP數(shù)據(jù)包的捕獲與分析的基本要求:本次實(shí)驗(yàn)的要求在網(wǎng)絡(luò)環(huán)境,使用VC++編寫程序?qū)崿F(xiàn)捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫入日志文件。程序的具體要求如下:l)以命令行形式運(yùn)行:ipparselogfile,其中Ipparse是程序名,而logfile則代表記錄結(jié)果的日志文件。2)在標(biāo)準(zhǔn)輸出和日志文件中寫入捕獲的IP包的版本、頭長度、服務(wù)類型、數(shù)據(jù)包總長度、數(shù)據(jù)包標(biāo)識(shí)、分段標(biāo)志、分段偏移值、生存時(shí)間、上層協(xié)議類型、頭校驗(yàn)和、源IP地址和目的IP地址等內(nèi)容。3)當(dāng)程序接收到鍵盤輸入Ctrl+C時(shí)退出。系統(tǒng)分析設(shè)計(jì)2.1數(shù)據(jù)包捕獲的原理分析:

以太網(wǎng)(Ethernet)具有共享介質(zhì)的特征,信息是以明文的形式在網(wǎng)絡(luò)上傳輸,當(dāng)網(wǎng)絡(luò)適配器設(shè)置為監(jiān)聽模式(混雜模式,Promiscuous)時(shí),由于采用以太網(wǎng)廣播信道爭(zhēng)用的方式,使得監(jiān)聽系統(tǒng)與正常通信的網(wǎng)絡(luò)能夠并聯(lián)連接,并可以捕獲任何一個(gè)在同一沖突域上傳輸?shù)臄?shù)據(jù)包。IEEE802.3標(biāo)準(zhǔn)的以太網(wǎng)采用的是持續(xù)CSMA的方式,正是由于以太網(wǎng)采用這種廣播信道爭(zhēng)用的方式,使得各個(gè)站點(diǎn)可以獲得其他站點(diǎn)發(fā)送的數(shù)據(jù)。運(yùn)用這一原理使信息捕獲系統(tǒng)能夠攔截的我們所要的信息,這是捕獲數(shù)據(jù)包的物理基礎(chǔ)。

以太網(wǎng)是一種總線型的網(wǎng)絡(luò),從邏輯上來看是由一條總線和多個(gè)連接在總線上的站點(diǎn)所組成各個(gè)站點(diǎn)采用上面提到的CSMA/CD協(xié)議進(jìn)行信道的爭(zhēng)用和共享。每個(gè)站點(diǎn)(這里特指計(jì)算機(jī)通過的接口卡)網(wǎng)卡來實(shí)現(xiàn)這種功能。網(wǎng)卡主要的工作是完成對(duì)于總線當(dāng)前狀態(tài)的探測(cè),確定是否進(jìn)行數(shù)據(jù)的傳送,判斷每個(gè)物理數(shù)據(jù)幀目的地是否為本站地址,如果不匹配,則說明不是發(fā)送到本站的而將它丟棄。如果是的話,接收該數(shù)據(jù)幀,進(jìn)行物理數(shù)據(jù)幀的CRC校驗(yàn),然后將數(shù)據(jù)幀提交給LLC子層。

網(wǎng)卡具有如下的幾種工作模式:

1)廣播模式(BroadCastModel):它的物理地址(MAC)地址是0Xffffff的幀為廣播幀,工作在廣播模式的網(wǎng)卡接收廣播幀。

2)多播傳送(MultiCastModel):多播傳送地址作為目的物理地址的幀可以被組內(nèi)的其它主機(jī)同時(shí)接收,而組外主機(jī)卻接收不到。但是,如果將網(wǎng)卡設(shè)置為多播傳送模式,它可以接收所有的多播傳送幀,而不論它是不是組內(nèi)成員。

3)直接模式(DirectModel):工作在直接模式下的網(wǎng)卡只接收目地址是自己Mac地址的幀。

4)混雜模式(PromiscuousModel):工作在混雜模式下的網(wǎng)卡接收所有的流過網(wǎng)卡的幀,信包捕獲程序就是在這種模式下運(yùn)行的。

網(wǎng)卡的缺省工作模式包含廣播模式和直接模式,即它只接收廣播幀和發(fā)給自己的幀。如果采用混雜模式,一個(gè)站點(diǎn)的網(wǎng)卡將接受同一網(wǎng)絡(luò)內(nèi)所有站點(diǎn)所發(fā)送的數(shù)據(jù)包這樣就可以到達(dá)對(duì)于網(wǎng)絡(luò)信息監(jiān)視捕獲的目的。2.2網(wǎng)絡(luò)數(shù)據(jù)包的結(jié)構(gòu)為:DLC數(shù)據(jù)幀頭:IP數(shù)據(jù)報(bào)結(jié)構(gòu):TCP數(shù)據(jù)包結(jié)構(gòu):UDP數(shù)據(jù)報(bào)結(jié)構(gòu):ICMP數(shù)據(jù)報(bào)結(jié)構(gòu):IGMP數(shù)據(jù)報(bào)結(jié)構(gòu):2.3主流程圖:IP數(shù)據(jù)包的捕獲與分析第三章系統(tǒng)實(shí)現(xiàn)第三章系統(tǒng)實(shí)現(xiàn)3.1WindowsSocket編程簡(jiǎn)介TCP/IP協(xié)議與WinSock網(wǎng)絡(luò)編程接口的關(guān)系

WinSock并不是一種網(wǎng)絡(luò)協(xié)議,它只是一個(gè)網(wǎng)絡(luò)編程接口,也就是說,它不是協(xié)議,但是它可以訪問很多種網(wǎng)絡(luò)協(xié)議,你可以把他當(dāng)作一些協(xié)議的封裝?,F(xiàn)在的WinSock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無關(guān)。你可以使用WinSock來調(diào)用多種協(xié)議的功能。那么,WinSock和TCP/IP協(xié)議到底是什么關(guān)系呢?實(shí)際上,WinSock就是TCP/IP協(xié)議的一種封裝,你可以通過調(diào)用WinSock的接口函數(shù)來調(diào)用TCP/IP的各種功能.例如我想用TCP/IP協(xié)議發(fā)送數(shù)據(jù),你就可以使用WinSock的接口函數(shù)Send()來調(diào)用TCP/IP的發(fā)送數(shù)據(jù)功能,至于具體怎么發(fā)送數(shù)據(jù),WinSock已經(jīng)幫你封裝好了這種功能。3.2報(bào)頭數(shù)據(jù)結(jié)構(gòu)的定義:typedefstruct_IP_HEADER{ union { BYTEVersion; BYTEHdrLen; }; BYTEServiceType; WORDTotalLen; WORDID; union { WORDFlags; WORDFragoff; }; BYTETimeToLive; BYTEProtocol; WORDHdrChksum; DWORDSrcAddr; DWORDDstAddr; BYTEOptions;}IP_HEADER;3.3程序的具體實(shí)現(xiàn):1.啟動(dòng)winsock使用函數(shù)WSAStartup()完成winsock的啟動(dòng)if(WSAStartup(MAKEWORD(2,2),&wsData)!=0) { printf("WSAStartupfailed!\n"); return-1; }2.初始化socket的創(chuàng)建 SOCKETsock;WSADATAwsData; ofstreamofs("ip.log",ios::app); if(WSAStartup(MAKEWORD(2,2),&wsData)!=0) { printf("WSAStartupfailed!\n"); return-1; } if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET) { printf("createsocketfailed\n"); return-1; } BOOLflag=true; if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==SOCKET_ERROR) { printf("setsockoptfailed!\n"); return-1; } charhostName[128]; if(gethostname(hostName,100)==SOCKET_ERROR) { printf("gethostnamefailed!\n"); return-1; } hostent*pHostIP; if((pHostIP=gethostbyname(hostName))==NULL) { printf("gethostbynamefailed\n"); return-1; }3.初始化socket的綁定:sockaddr_inaddr_in; addr_in.sin_addr=*(in_addr*)pHostIP->h_addr_list[0]; addr_in.sin_family=AF_INET; addr_in.sin_port=htons(6000); if(bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in))==SOCKET_ERROR) { printf("bindfailed\n"); return-1; }4.設(shè)置網(wǎng)卡的混雜模式:#defineIO_RCVALL_WSAIOW(IOC_VENDOR,1)DWORDdwBufferLen[10]; DWORDdwBufferInLen=1; DWORDdwBytesReturned=0; charbuffer[100]; if(WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen), &dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)==SOCKET_ERROR) { printf("ioctlsocketfaild\n"); return-1; }5.用戶按下Ctrl+C,終止程序的實(shí)現(xiàn)。對(duì)于程序來說,要時(shí)時(shí)處于抓包狀態(tài),對(duì)于用戶來說又要隨時(shí)能結(jié)束程序。所以在實(shí)現(xiàn)該功能時(shí),我使用了線程技術(shù),即通過主線程以外的另一個(gè)進(jìn)程,來控制主進(jìn)程中的抓包循環(huán)。從而,既保證了程序的實(shí)時(shí)性,又不影響抓包。6.日志文件的實(shí)現(xiàn)定義一個(gè)C++輸出流,利用write函數(shù),將操作逐步寫入文件即可。while(true) { intsize=recv(sock,buffer,sizeof(buffer),0); IP_HEADERip=*(IP_HEADER*)buffer; cout<<""<<endl; s+="\n\n"; cout<<"Version:"<<(ip.Version>>4)<<endl; _itoa(ip.Version>>4,buffer1,10); s+="Version:"; s+=buffer1; s+="\n"; cout<<"IHL:"<<((ip.HdrLen&0x0f)*4)<<endl; s+="IHL:"; _itoa((ip.HdrLen&0x0f)*4,buffer1,10); s+=buffer1; s+="\n"; cout<<"Typeofservice:Priority"<<(ip.ServiceType>>5)<< ",Service"<<((ip.ServiceType>>1)&0x0f)<<endl; s+="Typeofservice:Priority";_itoa(ip.ServiceType>>5,buffer1,10); s+=buffer1;s+=",Service";_itoa((ip.ServiceType>>1)&0x0f,buffer1,10); s+=buffer1; s+="\n"; cout<<"TOtalLength:"<<ip.TotalLen<<endl; s+="TOtalLength:";_itoa(ip.TotalLen,buffer1,10); s+=buffer1; s+="\n"; cout<<"Identifcation:"<<ip.ID<<endl; s+="Identifcation:";_itoa(ip.ID,buffer1,10); s+=buffer1; s+="\n";cout<<"sign:"<<((ip.Flags>>15)&0x01)<<",DF="<< ((ip.Flags>>14)&0x01)<<",Mf="<<((ip.Flags>>13)&0x01)<<endl; s+="sign:";_itoa((ip.Flags>>15)&0x01,buffer1,10); s+=buffer1; s+=",DF=";_itoa((ip.Flags>>14)&0x01,buffer1,10);s+=buffer1; s+=",Mf=";_itoa((ip.Flags>>13)&0x01,buffer1,10);s+=buffer1; s+="\n"; cout<<"Fragmentoffset:"<<(ip.Fragoff&0x1fff)<<endl;s+="Fragmentoffset:";_itoa(ip.Fragoff&0x1fff,buffer1,10);s+=buffer1; s+="\n"; cout<<"Timetolive:"<<(int)ip.TimeToLive<<endl;s+="Timetolive:";_itoa((int)ip.TimeToLive,buffer1,10);s+=buffer1; s+="\n"; cout<<"Protocol:"<<(int)ip.Protocol<<endl; s+="Protocol:";_itoa((int)ip.Protocol,buffer1,10);s+=buffer1; s+="\n"; cout<<"HeaderChecksum:"<<ip.HdrChksum<<endl;s+="HeaderChecksum:";_itoa(ip.HdrChksum,buffer1,10);s+=buffer1; s+="\n"; cout<<"Sourceaddress:"<<inet_ntoa(*(in_addr*)&ip.SrcAddr)<<endl; s+="Sourceaddress:";s+=inet_ntoa(*(in_addr*)&ip.SrcAddr); s+="\n"; cout<<"Destinationaddress:"<<inet_ntoa(*(in_addr*)&ip.DstAddr)<<endl; s+="Destinationaddress:";s+=inet_ntoa(*(in_addr*)&ip.DstAddr); s+="\n"; p=&s[0]; ofs.write(p,strlen(p)); }3.4程序運(yùn)行主頁面:文件;IP數(shù)據(jù)包的捕獲與分析第四章心得體會(huì)第四章心得體會(huì)這次的課程設(shè)計(jì)使我感觸很深,學(xué)了一個(gè)學(xué)期的計(jì)算機(jī)網(wǎng)絡(luò),都不知道那些書上的知識(shí)是怎么應(yīng)用在實(shí)踐中,通過這次的課程設(shè)計(jì)我了解了很多以前似懂非懂的東西,然后在把書上的那些代碼經(jīng)過分析,應(yīng)用在這次課程設(shè)計(jì)中,使感覺計(jì)算機(jī)網(wǎng)絡(luò)真的是很有趣的一門課程。這次的課程設(shè)計(jì),加強(qiáng)了我們動(dòng)手、思考和解決問題的能力。鞏固和加深了對(duì)網(wǎng)絡(luò)編程的理解,提高綜合運(yùn)用本課程所學(xué)知識(shí)的能力。培養(yǎng)了我選用參考書,查閱手冊(cè)及文獻(xiàn)資料的能力。培養(yǎng)獨(dú)立思考,深入研究,分析問題、解決問題的能力。通過課程設(shè)計(jì),培養(yǎng)了我嚴(yán)肅認(rèn)真的工作作風(fēng),逐步建立正確的生產(chǎn)觀念、經(jīng)濟(jì)觀念和全局觀念。而且做課程設(shè)計(jì)同時(shí)也是對(duì)課本知識(shí)的鞏固和加強(qiáng),平時(shí)看課本時(shí),有些問題就不是很能理解,做完課程設(shè)計(jì),那些問題就迎刃而解了。而且還可以記住很多東西。認(rèn)識(shí)來源于實(shí)踐,實(shí)踐是認(rèn)識(shí)的動(dòng)力和最終目的,實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。所以這個(gè)期末測(cè)試之后的課程設(shè)計(jì)對(duì)我們的作用是非常大的。這次的課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很非常重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在整個(gè)設(shè)計(jì)過程中,構(gòu)思是很花費(fèi)時(shí)間的。調(diào)試時(shí)經(jīng)常會(huì)遇到這樣那樣的錯(cuò)誤,有的是因?yàn)榇中脑斐傻恼Z法錯(cuò)誤。當(dāng)然,很多也時(shí)用錯(cuò)了方法,總是實(shí)現(xiàn)不了。同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固。根據(jù)我在課程設(shè)計(jì)中遇到得問題,我將在以后的學(xué)習(xí)過程中注意以下幾點(diǎn):1、認(rèn)真上好專業(yè)實(shí)驗(yàn)課,多在實(shí)踐中鍛煉自己。2、寫程序的過程中要考慮周到,嚴(yán)密。3、在做設(shè)計(jì)的時(shí)候要有信心,有耐心,切勿浮躁。4、認(rèn)真的學(xué)習(xí)課本知識(shí),掌握課本中的知識(shí)點(diǎn),并在此基礎(chǔ)上學(xué)會(huì)靈活運(yùn)用。5、在課余時(shí)間里多寫程序,熟練掌握在調(diào)試程序的過程中所遇到的常見錯(cuò)誤,以便能節(jié)省調(diào)試程序的時(shí)間。每個(gè)實(shí)驗(yàn)通常都要花費(fèi)很久的時(shí)間才能理清一個(gè)程序的思路,而且要不斷的調(diào)試程序才能把程序調(diào)試正確,同時(shí)還要做到界面的輸出也是需要美化的。這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多專業(yè)知識(shí)問題,最后在老師的辛勤指導(dǎo)下,也完成了課程設(shè)計(jì)。通過這次的課程設(shè)計(jì),讓我更加了解到計(jì)算機(jī)網(wǎng)絡(luò)的重要性。以及它對(duì)我們專業(yè)的網(wǎng)絡(luò)方向發(fā)展發(fā)揮的作用。對(duì)我們而言,知識(shí)上的收獲很重要,但精神上的豐收更加可喜。讓我知道了學(xué)無止境的道理。我們每一個(gè)人永遠(yuǎn)不能滿足于現(xiàn)有的成就,人生就像在爬山,一座山峰的后面還有更高的山峰在等著你。挫折是一份財(cái)富,經(jīng)歷是一份擁有。這次課程設(shè)計(jì)必將成為我人生旅途上一個(gè)非常美好的回憶!同時(shí)在做課程設(shè)計(jì)時(shí)要能夠從多方面去考慮,去研究,用多種算法去實(shí)現(xiàn)要求。此次課程設(shè)計(jì),學(xué)到了很多課內(nèi)學(xué)不到的東西,比如獨(dú)立思考解決問題,出現(xiàn)差錯(cuò)的隨機(jī)應(yīng)變,這些都讓我受益非淺,今后的制作應(yīng)該能夠更輕松,自己也都能夠解決并高質(zhì)量的完成項(xiàng)目。最后,感謝這些天來,一直陪著我們,辛苦工作的指導(dǎo)劉麗敏老師,感謝您的無私奉獻(xiàn)和辛勤教導(dǎo),使我能得到進(jìn)步,能夠取得成功,感謝您!參考文獻(xiàn):[1]AndrewS.Tanenbaum.計(jì)算機(jī)網(wǎng)絡(luò).清華大學(xué),1998,32.[2]網(wǎng)站IP數(shù)據(jù)包的捕獲與分析附錄附錄;程序源代碼如下:#include"winsock2.h"#include"ws2tcpip.h"#include<windows.h>#include<fstream>#include<iostream>#pragmacomment(lib,"ws2_32")usingnamespacestd;typedefstruct_IP_HEADER{ union { BYTEVersion; BYTEHdrLen; }; BYTEServiceType; WORDTotalLen; WORDID; union { WORDFlags; WORDFragoff; }; BYTETimeToLive; BYTEProtocol; WORDHdrChksum; DWORDSrcAddr; DWORDDstAddr; BYTEOptions;}IP_HEADER;intmain(){ SOCKETsock;WSADATAwsData; ofstreamofs("ip.log",ios::app); if(WSAStartup(MAKEWORD(2,2),&wsData)!=0) { printf("WSAStartupfailed!\n"); return-1; } if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET) { printf("createsocketfailed\n"); return-1; } BOOLflag=true; if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==SOCKET_ERROR) { printf("setsockoptfailed!\n"); return-1; } charhostName[128]; if(gethostname(hostName,100)==SOCKET_ERROR) { printf("gethostnamefailed!\n"); return-1; } hostent*pHostIP; if((pHostIP=gethostbyname(hostName))==NULL) { printf("gethostbynamefailed\n"); return-1; } sockaddr_inaddr_in; addr_in.sin_addr=*(in_addr*)pHostIP->h_addr_list[0]; addr_in.sin_family=AF_INET; addr_in.sin_port=htons(6000); if(bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in))==SOCKET_ERROR) { printf("bindfailed\n"); return-1; }#defineIO_RCVALL_WSAIOW(IOC_VENDOR,1)DWORDdwBufferLen[10]; DWORDdwBufferInLen=1; DWORDdwBytesReturned=0; charbuffer[100]; if(WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen), &dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)==SOCKET_ERROR) { printf("ioctlsocketfaild\n"); return-1; } printf("AnalysisIPPacket!\n\n"); strings; char*p; charbuffer1[100]; while(true) { intsize=recv(sock,buffer,sizeof(buffer),0); IP_HEADERip=*(IP_HEADER*)buffer; cout<<""<<endl; s+="\n\n"; cout<<"Version:"<<(ip.Version>>4)<<endl; _itoa(ip.Version>>4,buffer1,10); s+="Version:"; s+=buffer1; s+="\n"; cout<<"IHL:"<<((ip.HdrLen&0x0f)*4)<<endl; s+="IHL:"; _itoa((ip.HdrLen&0x0f)*4,buffer1,10); s+=buffer1; s+="\n"; cout<<"Typeofservice:Priority"<<(ip.ServiceType>>5)<< ",Service"<<((ip.ServiceType>>1)&0x0f)<<endl; s+="Typeofservice:Priority";_itoa(ip.ServiceType>>5,buffer1,10); s+=buffer1;s+=",Service";_itoa((ip.ServiceType>>1)&0x0f,buffer1,10); s+=buffer1; s+="\n"; cout<<"TOtalLength:"<<ip.TotalLen<<endl; s+="TOtalLength:";_itoa(ip.TotalLen,buffer1,10); s+=buffer1; s+="\n"; cout<<"Identifcation:"<<ip.ID<<endl; s+="Identifcation:";_itoa(ip.ID,buffer1,10); s+=buffer1; s+="\n";

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論