原始套接字編程課程設(shè)計(jì)報(bào)告_第1頁
原始套接字編程課程設(shè)計(jì)報(bào)告_第2頁
原始套接字編程課程設(shè)計(jì)報(bào)告_第3頁
原始套接字編程課程設(shè)計(jì)報(bào)告_第4頁
原始套接字編程課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、原始套接字編程課程設(shè)計(jì)報(bào)告 姓名:王延興 班級(jí):9班 學(xué)號(hào):54110904 原始套接字編程課程設(shè)計(jì)報(bào)告班級(jí):11級(jí)9班學(xué)號(hào):54110904姓名:王延興一、 設(shè)計(jì)任務(wù)分析(一)實(shí)驗(yàn)環(huán)境操作系統(tǒng):windows編程工具及集成開發(fā)環(huán)境:vc+(二)實(shí)驗(yàn)?zāi)康暮鸵髮?shí)驗(yàn)?zāi)康模赫莆赵继捉幼志幊?。?shí)驗(yàn)要求:完成下列功能:(1)利用raw socket捕獲網(wǎng)絡(luò)數(shù)據(jù)包的程序模型socket_stream 流式套接字 socket_dgram socket_raw 原始套接字 ipproto_ip ip協(xié)議 ipproto_icmp internet控制消息協(xié)議,配合原始套接字可以實(shí)現(xiàn)ping的功能 ipp

2、roto_igmp internet 網(wǎng)關(guān)服務(wù)協(xié)議,在多播中用到在af_inet地址族下,有sock_stream、sock_dgram、sock_raw三種套接字類型。sock_stream也就是通常所說的tcp,而sock_dgram則是通常所說的udp,而sock_raw則是用于提供一些較低級(jí)的控制的;第3個(gè)參數(shù)依賴于第2個(gè)參數(shù),用于指定套接字所用的特定協(xié)議,設(shè)為0表示使用默認(rèn)的協(xié)議。 raw socket能夠?qū)^低層次的協(xié)議直接訪問,網(wǎng)絡(luò)監(jiān)聽技術(shù)很大程度上依賴于它。(2)能夠抓取第二節(jié)課的并發(fā)服務(wù)器程序的服務(wù)器端或客戶端的應(yīng)用層數(shù)據(jù),即:時(shí)間值,打印輸出。2、 設(shè)計(jì)方案同一臺(tái)主機(jī)不同進(jìn)

3、程可以用進(jìn)程號(hào)來唯一標(biāo)識(shí),但是在網(wǎng)絡(luò)環(huán)境下進(jìn)程號(hào)并不能唯一標(biāo)識(shí)該進(jìn)程。tcp/ip主要引入了網(wǎng)絡(luò)地址、端口和連接等概念來解決網(wǎng)絡(luò)間進(jìn)程標(biāo)識(shí)問題。套接字(socket)是一個(gè)指向傳輸提供者的句柄,tcp/ip協(xié)議支持3種類型的套接字,分別是流式套接字、數(shù)據(jù)報(bào)式套接字和原始套接字。流式套接字(socket_stream)提供了面向連接、雙向可靠的數(shù)據(jù)流傳輸服務(wù)。數(shù)據(jù)報(bào)式套接字(socket_ dgram)提供了無連接服務(wù),不提供無錯(cuò)保證。原始套接字(socket_raw)允許對(duì)較低層次的協(xié)議直接訪問,比如ip、 icmp協(xié)議,它常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn),或者訪問現(xiàn)有服務(wù)中配置的新設(shè)備,因?yàn)閞aw s

4、ocket可以自如地控制windows下的多種協(xié)議,能夠?qū)W(wǎng)絡(luò)底層的傳輸機(jī)制進(jìn)行控制,所以可以應(yīng)用原始套接字來操縱網(wǎng)絡(luò)層和傳輸層應(yīng)用。比如,我們可以通過raw socket來接收發(fā)向本機(jī)的icmp、igmp協(xié)議包,或者接收tcp/ip棧不能夠處理的ip包,也可以用來發(fā)送一些自定包頭或自定協(xié)議的ip包。網(wǎng)絡(luò)監(jiān)聽技術(shù)很大程度上依賴于socket_raw。本實(shí)驗(yàn)采用原始套接字進(jìn)行捕獲通過本主機(jī)的包并對(duì)本主機(jī)的包進(jìn)行處理。u 各個(gè)函數(shù)功能: char * getprotocol(int proto) /獲得協(xié)議類型send(cientsocket, tmp, (int)strlen(tmp), 0);

5、發(fā)送數(shù)據(jù)recv(cientsocket, recvbuffer, max_path, 0);接收數(shù)據(jù)wsastartup(makeword(2,2), &ws) 初始化套接字類庫socket(af_inet, sock_stream, ipproto_tcp); 創(chuàng)建套接字bind(serversocket, (struct sockaddr*)&localaddr, sizeof(localaddr);綁定套接字 listen(serversocket, 10);偵聽,隊(duì)列大小為10u 設(shè)計(jì)思想: 采用原始套接字進(jìn)行捕獲通過本主機(jī)的包并對(duì)本主機(jī)的包進(jìn)行處理。 3、 詳細(xì)設(shè)計(jì)

6、頭文件ip.h:詳細(xì)代碼:/定義標(biāo)準(zhǔn)的的tcp頭和ip頭#define urg 0x20#define ack 0x10#define psh 0x08#define rst 0x04#define syn 0x02#define fin 0x01typedef struct _iphdr /定義ip首部unsigned char h_verlen; /4位首部長(zhǎng)度+4位ip版本號(hào)unsigned char tos; /8位服務(wù)類型tosunsigned short total_len; /16位總長(zhǎng)度(字節(jié))unsigned short ident; /16位標(biāo)識(shí)unsigned short

7、 frag_and_flags; /3位標(biāo)志位unsigned char ttl; /8位生存時(shí)間 ttlunsigned char proto; /8位協(xié)議 (tcp, udp 或其他)unsigned short checksum; /16位ip首部校驗(yàn)和unsigned int sourceip; /32位源ip地址unsigned int destip; /32位目的ip地址ip_header;typedef struct _tcphdr /定義tcp首部ushort th_sport; /16位源端口ushort th_dport; /16位目的端口unsigned int th_s

8、eq; /32位序列號(hào)unsigned int th_ack; /32位確認(rèn)號(hào)unsigned char th_lenres; /4位首部長(zhǎng)度/6位保留字unsigned char th_flag; /6位標(biāo)志位ushort th_win; /16位窗口大小ushort th_sum; /16位校驗(yàn)和ushort th_urp; /16位緊急數(shù)據(jù)偏移量tcp_header;/ 定義icmp首部typedef struct icmp_hdrunsigned char i_type; / 類型unsigned char i_code; / 代碼unsigned short i_cksum; / 校

9、驗(yàn)碼unsigned short i_id; / 非標(biāo)準(zhǔn)的icmp首部 unsigned short i_seq;unsigned long timestamp;icmp_header;typedef struct udp_hdr / 8 bytes 定義udp首部unsigned short uh_sport; unsigned short uh_dport;unsigned short uh_len;unsigned short uh_sum;udp_header;源文件: 詳細(xì)代碼:#include<stdio.h>#include<winsock2.h>#pra

10、gma comment(lib,"ws2_32")#define sio_rcvall _wsaiow(ioc_vendor,1)struct ip / 定義ip首部 unsigned char h_verlen; / 4位首部長(zhǎng)度,4位ip版本號(hào) unsigned char tos; / 8位服務(wù)類型tos unsigned short ip_length; / 16位總長(zhǎng)度(字節(jié)) unsigned short ident; / 16位標(biāo)識(shí) unsigned short frag_and_flags; / 3位標(biāo)志位 unsigned char ttl; / 8位生存時(shí)

11、間 ttl unsigned char proto; / 8位協(xié)議 (tcp, udp 或其他) unsigned short checksum; / 16位ip首部校驗(yàn)和 unsigned int sourceip; / 32位源ip地址 unsigned int destip; / 32位目的ip地址 ;/ 定義tcp首部 struct tcp ushort th_sport; / 16位源端口 ushort th_dport; / 16位目的端口 unsigned int th_seq; / 32位序列號(hào) unsigned int th_ack; / 32位確認(rèn)號(hào) unsigned ch

12、ar th_lenres; / 4位首部長(zhǎng)度/6位保留字 unsigned char th_flag; / 6位標(biāo)志位 ushort th_win; / 16位窗口大小 ushort th_sum; / 16位校驗(yàn)和 ushort th_urp; / 16位緊急數(shù)據(jù)偏移量 ;void main()int sock,bytes_recieved,fromlen;char buffer65535;struct sockaddr_in from;struct ip *ip;struct tcp *tcp;word wversionrequested; /版本號(hào)wsadata wsadata; /啟動(dòng)

13、socket的int err;wversionrequested = makeword( 2, 2 );/建立版本err = wsastartup( wversionrequested,&wsadata );/啟用socketif ( err != 0 ) /如果返回值不等于0,那么表示出錯(cuò),直截退出程序return;sock=socket(af_inet,sock_raw,ipproto_ip);bool flag=true;setsockopt(sock, ipproto_ip, 2 , (char*)&flag, sizeof(flag);sockaddr_in addr

14、; addr.sin_family = af_inet; addr.sin_addr.s_un.s_addr=inet_addr("127.0.0.1"); /ip設(shè)置addr.sin_port=htons(0);if(socket_error=bind(sock,(sockaddr *)&addr,sizeof(addr) /綁定 closesocket(sock); printf("綁定失?。?quot;); exit(0); dword dwbytesret;dword dwval=1;ioctlsocket(sock, sio_rcvall, &a

15、mp;dwval); /設(shè)置網(wǎng)卡為混聽模式int i=0; while(true)fromlen=sizeof(from);bytes_recieved=recvfrom(sock,buffer,sizeof(buffer),0,(struct sockaddr*)&from,&fromlen); /接收數(shù)據(jù)i+;ip=(struct ip *)buffer; /得到ip頭if(ip->proto=6) /過濾其他協(xié)議,只留下tcp協(xié)議tcp=(struct tcp *)(buffer+(4*ip->h_verlen&0xf0>>4); /得到t

16、cp頭printf("ip包字節(jié)數(shù):%dn",bytes_recieved); /打印ip數(shù)據(jù)包長(zhǎng)度printf("源ip:%sn", inet_ntoa(*(in_addr*)&ip->sourceip); /打印源ipprintf("目的ip:%sn", inet_ntoa(*(in_addr*)&ip->destip); /打印目的ipprintf("源端口:%dn",ntohs(tcp->th_sport); /打印源端口printf("目的端口:%dn",ntohs(tcp->th_dport); /打印目的端口printf("tcp的數(shù)據(jù)內(nèi)容:");char* ptr=buffer+5+ 4*(tcp->th_lenres&0xf0)>>4|0); /計(jì)算數(shù)據(jù)頭指針int cpysize=bytes_recieved-5- 4*(tcp->th_lenres&0xf0)>>4|0); /計(jì)算數(shù)據(jù)長(zhǎng)度memc

溫馨提示

  • 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)論