




已閱讀5頁,還剩3頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
原始套接字編程課程設計報告 姓名:王延興 班級:9班 學號:54110904 原始套接字編程課程設計報告班級:11級9班學號:54110904姓名:王延興一、 設計任務分析(一)實驗環境操作系統:Windows編程工具及集成開發環境:VC+(二)實驗目的和要求實驗目的:掌握原始套接字編程。實驗要求:完成下列功能:(1)利用RAW SOCKET捕獲網絡數據包的程序模型SOCKET_STREAM 流式套接字 SOCKET_DGRAM SOCKET_RAW 原始套接字 IPPROTO_IP IP協議 IPPROTO_ICMP INTERNET控制消息協議,配合原始套接字可以實現ping的功能 IPPROTO_IGMP INTERNET 網關服務協議,在多播中用到在AF_INET地址族下,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三種套接字類型。SOCK_STREAM也就是通常所說的TCP,而SOCK_DGRAM則是通常所說的UDP,而SOCK_RAW則是用于提供一些較低級的控制的;第3個參數依賴于第2個參數,用于指定套接字所用的特定協議,設為0表示使用默認的協議。 RAW SOCKET能夠對較低層次的協議直接訪問,網絡監聽技術很大程度上依賴于它。(2)能夠抓取第二節課的并發服務器程序的服務器端或客戶端的應用層數據,即:時間值,打印輸出。2、 設計方案同一臺主機不同進程可以用進程號來唯一標識,但是在網絡環境下進程號并不能唯一標識該進程。TCP/IP主要引入了網絡地址、端口和連接等概念來解決網絡間進程標識問題。套接字(Socket)是一個指向傳輸提供者的句柄,TCP/IP協議支持3種類型的套接字,分別是流式套接字、數據報式套接字和原始套接字。流式套接字(SOCKET_STREAM)提供了面向連接、雙向可靠的數據流傳輸服務。數據報式套接字(SOCKET_ DGRAM)提供了無連接服務,不提供無錯保證。原始套接字(SOCKET_RAW)允許對較低層次的協議直接訪問,比如IP、 ICMP協議,它常用于檢驗新的協議實現,或者訪問現有服務中配置的新設備,因為RAW SOCKET可以自如地控制Windows下的多種協議,能夠對網絡底層的傳輸機制進行控制,所以可以應用原始套接字來操縱網絡層和傳輸層應用。比如,我們可以通過RAW SOCKET來接收發向本機的ICMP、IGMP協議包,或者接收TCP/IP棧不能夠處理的IP包,也可以用來發送一些自定包頭或自定協議的IP包。網絡監聽技術很大程度上依賴于SOCKET_RAW。本實驗采用原始套接字進行捕獲通過本主機的包并對本主機的包進行處理。u 各個函數功能: char * GetProtocol(int proto) /獲得協議類型send(CientSocket, tmp, (int)strlen(tmp), 0);發送數據recv(CientSocket, RecvBuffer, MAX_PATH, 0);接收數據WSAStartup(MAKEWORD(2,2), &Ws) 初始化套接字類庫socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 創建套接字bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr);綁定套接字 listen(ServerSocket, 10);偵聽,隊列大小為10u 設計思想: 采用原始套接字進行捕獲通過本主機的包并對本主機的包進行處理。 3、 詳細設計頭文件ip.h:詳細代碼:/定義標準的的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位首部長度+4位IP版本號unsigned char tos; /8位服務類型TOSunsigned short total_len; /16位總長度(字節)unsigned short ident; /16位標識unsigned short frag_and_flags; /3位標志位unsigned char ttl; /8位生存時間 TTLunsigned char proto; /8位協議 (TCP, UDP 或其他)unsigned short checksum; /16位IP首部校驗和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_seq; /32位序列號unsigned int th_ack; /32位確認號unsigned char th_lenres; /4位首部長度/6位保留字unsigned char th_flag; /6位標志位USHORT th_win; /16位窗口大小USHORT th_sum; /16位校驗和USHORT th_urp; /16位緊急數據偏移量TCP_HEADER;/ 定義ICMP首部typedef struct icmp_hdrunsigned char i_type; / 類型unsigned char i_code; / 代碼unsigned short i_cksum; / 校驗碼unsigned short i_id; / 非標準的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;源文件: 詳細代碼:#include#include#pragma comment(lib,ws2_32)#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)struct ip / 定義IP首部 unsigned char h_verlen; / 4位首部長度,4位IP版本號 unsigned char tos; / 8位服務類型TOS unsigned short ip_length; / 16位總長度(字節) unsigned short ident; / 16位標識 unsigned short frag_and_flags; / 3位標志位 unsigned char ttl; / 8位生存時間 TTL unsigned char proto; / 8位協議 (TCP, UDP 或其他) unsigned short checksum; / 16位IP首部校驗和 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位序列號 unsigned int th_ack; / 32位確認號 unsigned char th_lenres; / 4位首部長度/6位保留字 unsigned char th_flag; / 6位標志位 USHORT th_win; / 16位窗口大小 USHORT th_sum; / 16位校驗和 USHORT th_urp; / 16位緊急數據偏移量 ;void main()int sock,bytes_recieved,fromlen;char buffer65535;struct sockaddr_in from;struct ip *ip;struct tcp *tcp;WORD wVersionRequested; /版本號WSADATA wsaData; /啟動SOCKET的int err;wVersionRequested = MAKEWORD( 2, 2 );/建立版本err = WSAStartup( wVersionRequested,&wsaData );/啟用socketif ( err != 0 ) /如果返回值不等于0,那么表示出錯,直截退出程序return;sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);bool flag=true;setsockopt(sock, IPPROTO_IP, 2 , (char*)&flag, sizeof(flag);sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.S_un.S_addr=inet_addr(127.0.0.1); /IP設置addr.sin_port=htons(0);if(SOCKET_ERROR=bind(sock,(sockaddr *)&addr,sizeof(addr) /綁定 closesocket(sock); printf(綁定失敗!); exit(0); DWORD dwBytesRet;DWORD dwVal=1;ioctlsocket(sock, SIO_RCVALL, &dwVal); /設置網卡為混聽模式int i=0; while(true)fromlen=sizeof(from);bytes_recieved=recvfrom(sock,buffer,sizeof(buffer),0,(struct sockaddr*)&from,&fromlen); /接收數據i+;ip=(struct ip *)buffer; /得到ip頭if(ip-proto=6) /過濾其他協議,只留下TCP協議tcp=(struct tcp *)(buffer+(4*ip-h_verlen&0xf04); /得到tcp頭printf(Ip包字節數:%dn,bytes_recieved); /打印ip數據包長度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的數據內容:);char* ptr=buffer+5+ 4*(tcp-th_lenres&0xf0)4|0); /計算數
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖書館法治文化推廣工作職責解析
- 特殊教育機構心理異常學生救助計劃
- 植物療法在心理健康中的應用范文
- 智能房地產服務系統技術支持合同
- 汽車改裝服務與責任豁免協議
- 個人電腦銷售與售后服務協議
- 2024年度安徽省二級建造師之二建公路工程實務題庫檢測試卷B卷附答案
- 非營利組織董事會任命書
- 2024年度寧夏回族自治區二級造價工程師之建設工程造價管理基礎知識能力提升試卷B卷附答案
- 建筑工程安全生產的技術組織措施
- 卡通風幼兒園餐前播報
- 2024-2025年上海中考英語真題及答案解析
- 中國聯通項目管理系統總體介紹
- 中國先鋒戲劇研究
- 新版MACSV系統手冊
- 智慧養老服務平臺建設投標方案(技術方案)
- 南山區土地評估咨詢報告
- 12、口腔科診療指南及技術操作規范
- 2023年貴陽市招考派遣至貴州高級人民法院書記員筆試參考題庫(共500題)答案詳解版
- 國有企業知識產權管理
- 心理健康教育課件《高三學生心理輔導之跨越高原期》
評論
0/150
提交評論