版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《計算機網(wǎng)絡(luò)》課程設(shè)計--協(xié)議設(shè)計與編碼實現(xiàn)指導(dǎo)書
實驗1.Windows平臺簡樸套接字編程實驗類型:設(shè)計性一、實驗環(huán)境操作系統(tǒng):Windows編程工具及集成開發(fā)環(huán)境:VC++二、實驗?zāi)康暮鸵?guī)定實驗?zāi)康模赫莆誛indows平臺上簡樸的客戶機端和服務(wù)器端的套接字編程。實驗規(guī)定:(1)在Windows上,編寫、編譯1個客戶機端程序和1個服務(wù)器端程序。規(guī)定客戶機端程序能發(fā)送請求給服務(wù)器端程序,服務(wù)器端程序收到后能發(fā)送本機時間給客戶機端程序。(2)在相同或不同機子上,先運營服務(wù)器端程序可執(zhí)行文獻(xiàn),后運營客戶機端程序可執(zhí)行文獻(xiàn)。TCP/UDP賦予每個服務(wù)一個唯一的協(xié)議端標(biāo)語。服務(wù)器程序通過協(xié)議端標(biāo)語來指定它所提供的服務(wù),然后被動地等待通信。客戶在發(fā)送連接請求時,必須說明服務(wù)器程序運營主機的IP地址和協(xié)議端標(biāo)語來指定它所希望的服務(wù)。服務(wù)器端計算機通過此端標(biāo)語將收到的請求轉(zhuǎn)向?qū)Φ牡姆?wù)器程序。大多數(shù)網(wǎng)絡(luò)編程語言都提供或者使用控件封裝了套接字應(yīng)用程序接口(SocketAPI),應(yīng)用程序通過套接字接口調(diào)用來實現(xiàn)和傳輸層交互。用戶目前可以使用兩種套接口,即流套接字TCP和數(shù)據(jù)報套接字UDP。流式套接字定義了一種可靠的面向連接的服務(wù),提供了雙向的,有序的,無反復(fù)的數(shù)據(jù)流服務(wù)。數(shù)據(jù)報套接字定義了一種無連接的服務(wù),支持雙向的數(shù)據(jù)流,但并不保證是可靠,有序,無反復(fù)的。也就是說,一個從數(shù)據(jù)報套接字接受信息的進(jìn)程有也許發(fā)現(xiàn)信息反復(fù)了,或者和發(fā)出時的順序不同。套節(jié)字API重要涉及表1所示的接口。使用面向連接的套接字編程,通過圖2來表達(dá)其時序。套接字工作過程如下:服務(wù)器一方面啟動,通過調(diào)用socket()建立一個套接字,然后調(diào)用bind()將該套接字和本地網(wǎng)絡(luò)地址聯(lián)系在一起,再調(diào)用listen()使套接字做好偵聽的準(zhǔn)備,并規(guī)定它的請求隊列的長度,之后就調(diào)用accept()來接受連接。客戶在建立套接字后就可調(diào)用connect()和服務(wù)器建立連接,連接一旦建立,客戶機和服務(wù)器之間就可以通過調(diào)用read()和write()來發(fā)送和接受數(shù)據(jù)。最后,待數(shù)據(jù)傳送結(jié)束后,雙方調(diào)用close()關(guān)閉套接字。表1套節(jié)字API重要接口接口解釋SOCKETBINDLISTENACCEPTCONNETSENDRECVCLOSE創(chuàng)建一個新的套接字給服務(wù)器綁定一個傳輸層地址將服務(wù)器設(shè)為被動模式接受客戶的一個請求客戶向服務(wù)器發(fā)起連接向一個連接的套接字發(fā)送數(shù)據(jù)從一個連接的套接字接受數(shù)據(jù)終止一個連接圖1面向連接套接口應(yīng)用程序時序圖
實驗2.并發(fā)套接字編程實驗類型:設(shè)計性一、實驗環(huán)境操作系統(tǒng):Windows或Linux編程工具及集成開發(fā)環(huán)境:VC++二、實驗?zāi)康暮鸵?guī)定實驗?zāi)康模赫莆誏inux或Windows平臺上多線程、多進(jìn)程或異步I/O的套接字編程。實驗規(guī)定:(1)在Windows上,編寫、編譯1個客戶機端程序和1個服務(wù)器端程序。規(guī)定客戶機端程序能發(fā)送請求給服務(wù)器端程序,服務(wù)器端程序收到后能發(fā)送本機時間給客戶機端程序。(2)在相同或不同機子上,先運營服務(wù)器端程序可執(zhí)行文獻(xiàn),后運營客戶機端程序可執(zhí)行文獻(xiàn)。可選內(nèi)容:(1)編寫Linux或Windows平臺上采用各并發(fā)方式的1種程序。(2)測試多線程、多進(jìn)程或異步I/O的性能。三、實驗提醒(1)多線程程序編譯連接需要用-pthread選項創(chuàng)建TCP并發(fā)服務(wù)器的算法如下:
socket(……);//創(chuàng)建一個TCP套接字
bind(……);
//邦定公認(rèn)的端標(biāo)語
listen(……);//傾聽客戶端連接
while(1)
//開始循環(huán)接受客戶端的接受
{
accept(……);//接受一個客戶端的連接
if(fork(……)==0)
//創(chuàng)建子進(jìn)程
{
while(1)
{
//子進(jìn)程解決某個客戶端的連接
read(……);
process(……);
write(……);
}
close(……);
//關(guān)閉子進(jìn)程解決的客戶端連接
exit(……);//終止該子進(jìn)程
}
close(……);
//父進(jìn)程關(guān)閉連接套接字描述符,準(zhǔn)備接受下一個客戶端連接
}
TCP并發(fā)服務(wù)器可以解決TCP循環(huán)服務(wù)器客戶端獨占服務(wù)器的情況。但同時也帶來了一個不小的問題,即響應(yīng)客戶機的請求,服務(wù)器要創(chuàng)建子進(jìn)程來解決,而創(chuàng)建子進(jìn)程是一種非常消耗資源的操作。多路復(fù)用I/O并發(fā)服務(wù)器:創(chuàng)建子進(jìn)程會帶來系統(tǒng)資源的大量消耗,為了解決這個問題,采用多路復(fù)用I/O模型的并發(fā)服務(wù)器。采用select函數(shù)創(chuàng)建多路復(fù)用I/O模型的并發(fā)服務(wù)器的算法如下:
初始化(socket,bind,listen);
while(1)
{
設(shè)立監(jiān)聽讀寫文獻(xiàn)描述符(FD_*);
調(diào)用select;
假如是傾聽套接字就緒,說明一個新的連接請求建立
{
建立連接(accept);
加入到監(jiān)聽文獻(xiàn)描述符中去;
}
否則說明是一個已經(jīng)連接過的描述符
{
進(jìn)行操作(read或者write);
}
}
int
select(int
n,
fd_set
*readfds,
fd_set
*writefds,
fd_set
*exceptfds,
struct
timeval
*timeout);int
poll(struct
pollfd
*ufds,
unsigned
int
nfds,
int
timeout);
int
epoll_wait(int
epfd,
struct
epoll_event
*
events,
int
maxevents,
int
timeout)
實驗3.原始套接字編程實驗類型:設(shè)計性一、實驗環(huán)境操作系統(tǒng):Windows編程工具及集成開發(fā)環(huán)境:VC++二、實驗?zāi)康暮鸵?guī)定實驗?zāi)康模赫莆赵继捉幼志幊獭嶒炓?guī)定:完畢下列功能:(1)運用RAWSOCKET捕獲網(wǎng)絡(luò)數(shù)據(jù)包的程序模型SOCKET_STREAM流式套接字SOCKET_DGRAMSOCKET_RAW原始套接字IPPROTO_IPIP協(xié)議IPPROTO_ICMPINTERNET控制消息協(xié)議,配合原始套接字可以實現(xiàn)ping的功能IPPROTO_IGMPINTERNET網(wǎng)關(guān)服務(wù)協(xié)議,在多播中用到在AF_INET地址族下,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三種套接字類型。SOCK_STREAM也就是通常所說的TCP,而SOCK_DGRAM則是通常所說的UDP,而SOCK_RAW則是用于提供一些較低檔的控制的;第3個參數(shù)依賴于第2個參數(shù),用于指定套接字所用的特定協(xié)議,設(shè)為0表達(dá)使用默認(rèn)的協(xié)議。RAWSOCKET可以對較低層次的協(xié)議直接訪問,網(wǎng)絡(luò)監(jiān)聽技術(shù)很大限度上依賴于它。(2)可以抓取第二節(jié)課的并發(fā)服務(wù)器程序的服務(wù)器端或客戶端的應(yīng)用層數(shù)據(jù),即:時間值,打印輸出。輸出示例:Applications++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Data:XXXXXXXTransportation++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++SrcPort:XXXXXXDestPort:XXXXXX………….Network+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++SrcIP:XXXXXXXDestIP:XXXXXX1引言隨著信息技術(shù)的快速發(fā)展,網(wǎng)絡(luò)已成為信息互換的重要手段,一些網(wǎng)絡(luò)新業(yè)務(wù)在不斷地興起,如電子商務(wù)、移動支付等,這些都對網(wǎng)絡(luò)安全提出了較高的規(guī)定。與此同時,黑客對網(wǎng)絡(luò)的襲擊從未停止,網(wǎng)絡(luò)的安全問題變得日趨嚴(yán)峻。很多網(wǎng)絡(luò)襲擊都是從監(jiān)聽開始的,網(wǎng)絡(luò)監(jiān)聽最重要一步就是捕獲局域網(wǎng)中的數(shù)據(jù)幀,因此,研究數(shù)據(jù)捕獲技術(shù)對于保障網(wǎng)絡(luò)安全有著重要的意義。2RAWSOCKET簡介同一臺主機不同進(jìn)程可以用進(jìn)程號來唯一標(biāo)記,但是在網(wǎng)絡(luò)環(huán)境下進(jìn)程號并不能唯一標(biāo)記該進(jìn)程。TCP/IP重要引入了網(wǎng)絡(luò)地址、端口和連接等概念來解決網(wǎng)絡(luò)間進(jìn)程標(biāo)記問題。套接字(Socket)是一個指向傳輸提供者的句柄,TCP/IP協(xié)議支持3種類型的套接字,分別是流式套接字、數(shù)據(jù)報式套接字和原始套接字。流式套接字(SOCKET_STREAM)提供了面向連接、雙向可靠的數(shù)據(jù)流傳輸服務(wù)。數(shù)據(jù)報式套接字(SOCKET_DGRAM)提供了無連接服務(wù),不提供無錯保證。原始套接字(SOCKET_RAW)允許對較低層次的協(xié)議直接訪問,比如IP、ICMP協(xié)議,它常用于檢查新的協(xié)議實現(xiàn),或者訪問現(xiàn)有服務(wù)中配置的新設(shè)備,由于RAWSOCKET可以自如地控制Windows下的多種協(xié)議,可以對網(wǎng)絡(luò)底層的傳輸機制進(jìn)行控制,所以可以應(yīng)用原始套接字來操縱網(wǎng)絡(luò)層和傳輸層應(yīng)用。比如,我們可以通過RAWSOCKET來接受發(fā)向本機的ICMP、IGMP協(xié)議包,或者接受TCP/IP棧不可以解決的IP包,也可以用來發(fā)送一些自定包頭或自定協(xié)議的IP包。網(wǎng)絡(luò)監(jiān)聽技術(shù)很大限度上依賴于SOCKET_RAW。3RAWSOCKET編程要使用原始套接字,必須通過創(chuàng)建原始套接字、設(shè)立套接字選項和創(chuàng)建并填充相應(yīng)協(xié)議頭這三個環(huán)節(jié),然后用send、WSASend函數(shù)將組裝好的數(shù)據(jù)發(fā)送出去。接受的過程也很相似,只是需要用recv或WSARecv函數(shù)接受數(shù)據(jù)。下面介紹使用RAWSOCKET編程的幾個環(huán)節(jié)。3.1創(chuàng)建原始套接字我們可以用socket或WSASocket函數(shù)來創(chuàng)建原始套接字,由于原始套接字能直接控制底層協(xié)議,因此只有屬于“管理員”組的成員,才有權(quán)創(chuàng)建原始套接字。下面是用socket函數(shù)創(chuàng)建原始套接字的代碼。SOCKETsock;Sock=socket(AF_INET,SOCK_RAW,IPPROTO_UDP);上述創(chuàng)建原始套接字的代碼使用的是UDP協(xié)議,假如要使用其它的協(xié)議,比如ICMP、IGMP、IP等協(xié)議,只需要把相應(yīng)的參數(shù)改為IPPROTO_ICM、IPPROTO_IGMP、IPPROTO_IP就可以了。此外,IPPROTO_UDP、IPPROTO_IP、IPPROTO_RAW這幾個協(xié)議標(biāo)志規(guī)定使用套接字選項IP_HDRINCL,而目前只有Windows2023和WindowsXP提供了對IP_HDRINCL的支持,這意味著在Windows2023以下平臺創(chuàng)建原始套接字時是不能使用IP、UDP、TCP協(xié)議的。3.2設(shè)立套接字選項創(chuàng)建了原始套接字后,就要設(shè)立套接字選項,這要通過setsocketopt函數(shù)來實現(xiàn),setsocketopt函數(shù)的聲明如下:intsetsocketopt(SOCKETs,intlevel,intoptname,constcharFAR*optval,intoptlen);在該聲明中,參數(shù)s是標(biāo)記套接口的描述字,要注意的是選項對這個套接字必須是有效的。參數(shù)Level表白選項定義的層次,對TCP/IP協(xié)議族而言,支持SOL_SOCKET、IPPROTO_IP和IPPROTO_CP層次。參數(shù)Optname是需要設(shè)立的選項名,這些選項名是在Winsock頭文獻(xiàn)內(nèi)定義的常數(shù)值。參數(shù)optval是一個指針,它指向存放選項值的緩沖區(qū)。參數(shù)optlen指示optval緩沖區(qū)的長度3.3創(chuàng)建并填充相應(yīng)協(xié)議頭這一步就是創(chuàng)建IP和TCP協(xié)議頭的數(shù)據(jù)結(jié)構(gòu),根據(jù)相關(guān)協(xié)議的定義進(jìn)行編寫即可,下面是一個TCP協(xié)議頭的數(shù)據(jù)結(jié)構(gòu)。structTCP{unsignedshorttcp_sport;unsignedshorttcp_dport;unsignedinttcp_seq;unsignedinttcp_ack;unsignedchartcp_lenres;unsignedchartcp_flag;unsignedshorttcp_win;unsignedshorttcp_sum;unsignedshorttcp_urp;};4一個運用RAWSOCKET捕獲網(wǎng)絡(luò)數(shù)據(jù)包的程序模型下面介紹一個運用RAWSOCKET捕獲網(wǎng)絡(luò)數(shù)據(jù)包的程序模型。這個程序模型演示了如何使用RAWSOCKET捕獲局域網(wǎng)中的數(shù)據(jù)包,它完畢了網(wǎng)絡(luò)底層數(shù)據(jù)的接受,能顯示源地址、目的地址、源端口、目的端口和接受的字節(jié)數(shù)等信息。這個程序模型也說明了網(wǎng)絡(luò)監(jiān)聽的基本原理,給捕獲局域網(wǎng)中的數(shù)據(jù)包提供了一種方法,即先把網(wǎng)卡設(shè)立為混雜模式,然后運用RAWSOCKET接受IP層的數(shù)據(jù)。程序在VisualC++.net2023中調(diào)試并編譯通過,運營環(huán)境為以太網(wǎng),程序代碼可同時在Linux與windows環(huán)境下編譯和運營,當(dāng)然在編譯時需要不同的頭文獻(xiàn)以及需要對代碼作相應(yīng)的改動。本程序模型在Windows下能直接運營,假如在Linux下運營,則需要先用手工把網(wǎng)卡設(shè)立為混雜模式,在root權(quán)限下用如下命令設(shè)立:ifconfigeth0promisc。在Unix/Linux下程序要包含以下這幾個進(jìn)行調(diào)用系統(tǒng)和網(wǎng)絡(luò)函數(shù)的頭文獻(xiàn):#include〈stdio.h〉#include〈sys/socket.h〉#include〈netinet/in.h〉#include〈arpa/inet.h〉#include"headers.h"為了方便基于Berkeley套接口的已有源程序的移植,WindowsSockets支持許多Berkeley頭文獻(xiàn)。這些Berkeley頭文獻(xiàn)被包含在WINSOCK2.H中,所以一個WindowsSockets應(yīng)用程序只需包含WINSOCK2.H頭文獻(xiàn)就足夠了,這也是目前推薦使用的一種方法。在Windows平臺下程序改用以下這幾個頭文獻(xiàn):#include"stdafx.h"#include<stdio.h>#include<Winsock2.h>#include"headers.h"headers.h是自己編寫的頭文獻(xiàn),它的作用是定義IP和TCP包的頭結(jié)構(gòu)。在程序中一方面定義幾個變量和結(jié)構(gòu),然后調(diào)用函數(shù)socket()建立socket連接,重要代碼如下:int_tmain(intargc,_TCHAR*argv[]){intsock,bytes_recieved,fromlen;charbuffer[65535];structsockaddr_infrom;structip*ip;structtcp*tcp;sock=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);……return0;}程序的第二步用一個while(1)語句來建立一個死循環(huán),用來不斷地接受網(wǎng)絡(luò)信息。一方面用函數(shù)sizeof()取出一個socket結(jié)構(gòu)的長度,這個參數(shù)是recvfrom()函數(shù)所必須的。從建立的socket連接中接受數(shù)據(jù)是通過函數(shù)recvfrom()是來實現(xiàn)的,由于recvfrom()函數(shù)需要一個sockaddr數(shù)據(jù)類型,所以用了一個強制類型轉(zhuǎn)換,代碼如下:fromlen=sizeof(from);bytes_recieved=recvfrom(sock,buffer,sizeof(buffer),0,(structsockaddr*)&from,&fromlen);接下來用一條語句把接受到的數(shù)據(jù)轉(zhuǎn)化為我們預(yù)先定義的結(jié)構(gòu),以便于查看,代碼為:ip=(structip*)buffer還要用一條語句來指向TCP
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆成都市重點中學(xué)英語高三上期末考試試題含解析
- 2025屆江蘇省泰州市泰州棟梁學(xué)校數(shù)學(xué)高三第一學(xué)期期末監(jiān)測試題含解析
- 2025屆北京市海淀區(qū)知春里中學(xué)數(shù)學(xué)高三第一學(xué)期期末學(xué)業(yè)水平測試模擬試題含解析
- 南寧市第四十七中學(xué)2025屆高一數(shù)學(xué)第一學(xué)期期末質(zhì)量跟蹤監(jiān)視試題含解析
- 2025屆湖南省岳陽市臨湘市高二上生物期末聯(lián)考模擬試題含解析
- 安徽省池州市青陽縣第一中學(xué)2025屆數(shù)學(xué)高一上期末質(zhì)量檢測試題含解析
- 北京順義牛欄山一中2025屆高二數(shù)學(xué)第一學(xué)期期末經(jīng)典模擬試題含解析
- 2025屆江蘇省漣水鄭梁梅高級中學(xué)生物高一第一學(xué)期期末考試試題含解析
- 2025屆廣東省梅州市五華縣高二上生物期末調(diào)研模擬試題含解析
- 江蘇省連云港市灌南縣第二中學(xué)2025屆英語高三第一學(xué)期期末統(tǒng)考試題含解析
- 2024-2030年中國船舶電子導(dǎo)航系統(tǒng)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 2024秋八年級數(shù)學(xué)上冊 第十四章 整式的乘法與因式分解14.1 整式的乘法 4整式的乘法-單項式與單項式相乘教學(xué)設(shè)計(新版)新人教版
- 小學(xué)語文整本書閱讀《夏洛的網(wǎng)》導(dǎo)讀課公開課一等獎創(chuàng)新教學(xué)設(shè)計
- 6以內(nèi)的加減法
- DL∕T 1795-2017 柔性直流輸電換流站運行規(guī)程
- 計算機機房管理系統(tǒng)現(xiàn)狀分析與系統(tǒng)設(shè)計研究
- 2024版機房改造工程合同范本
- 八年級生物上冊 6.1.1《嘗試對生物進(jìn)行分類》教案1 (新版)新人教版
- 滬教版四年級上冊期中復(fù)習(xí)數(shù)學(xué)試卷(一)
- 2024年山東省高考生物試題答案
- 人教版初中七年級上冊美術(shù)教案整本書教案
評論
0/150
提交評論