版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《計(jì)算機(jī)網(wǎng)絡(luò)》課程設(shè)計(jì)</p><p> 題 目 數(shù)據(jù)包發(fā)送和接受程序的實(shí)現(xiàn) </p><p> 學(xué) 院 計(jì)算機(jī)學(xué)院 </p><p> 2012年12月21日</p><p> 數(shù)據(jù)包發(fā)送和接受程序的實(shí)現(xiàn)</p><p><b> 一、設(shè)計(jì)題
2、目與要求</b></p><p><b> 1.設(shè)計(jì)題目</b></p><p><b> 發(fā)送TCP數(shù)據(jù)包</b></p><p><b> 2.設(shè)計(jì)要求</b></p><p> 本設(shè)計(jì)的功能是填充一個(gè)TCP數(shù)據(jù)包,并發(fā)送給目的主機(jī)。</p>
3、<p> 1)以命令行形式運(yùn)行:SendTCP source_ip source_port dest_ip dest_port,其中SendTCP是程序名,source_ip為源端IP地址,source_port為源端口號(hào),dest_ip為目的地址,dest_port為目的端口號(hào)。</p><p> 2)其他的TCP頭部參數(shù)請(qǐng)自行設(shè)定。</p><p> 3)數(shù)據(jù)字段為
4、“This is my homework of network,I am happy!”。</p><p> 4)成功發(fā)送后在屏幕上輸出“send OK”。</p><p><b> 三、詳細(xì)設(shè)計(jì)</b></p><p> 本課程設(shè)計(jì)的目標(biāo)是發(fā)送一個(gè)TCP數(shù)據(jù)包,可以利用原始套接字來(lái)完成這個(gè)工作。整個(gè)程序由初始化原始套接字和發(fā)送TCP數(shù)據(jù)
5、包兩個(gè)部分組成。</p><p> 當(dāng)應(yīng)用進(jìn)程需要通過(guò)TCP發(fā)送時(shí),它就將此應(yīng)用層報(bào)文傳送給執(zhí)行TCP協(xié)議的傳輸實(shí)體。TCP傳輸實(shí)體將用戶數(shù)據(jù)加上TCP報(bào)頭,形成TCP數(shù)據(jù)包,在TCP數(shù)據(jù)包上增加IP頭部,形成IP包。如圖-1顯示的是TCP數(shù)據(jù)包和IP包得關(guān)系。TCP協(xié)議的數(shù)據(jù)傳輸單位稱為報(bào)文段,其格式如圖-2所示。報(bào)文段報(bào)頭的長(zhǎng)度是20B~60B,選項(xiàng)部分長(zhǎng)度最多為40B。TCP報(bào)文段主要包括以下字段。<
6、;/p><p> 端口號(hào):端口號(hào)字段包括源端口號(hào)和目的端口號(hào)。每個(gè)端口號(hào)的長(zhǎng)度是16位,分別表示發(fā)送該TCP包的應(yīng)用進(jìn)程的端口號(hào)和接收該TCP包的應(yīng)用進(jìn)程的端口號(hào)。</p><p> 圖-1 TCP數(shù)據(jù)包加上IP報(bào)頭形成IP包</p><p> 序號(hào):長(zhǎng)度為32位。由于TCP協(xié)議是面向數(shù)據(jù)流的,它所傳送的報(bào)文段可以視為連續(xù)的數(shù)據(jù)流,因此需要給每一字節(jié)編號(hào)。序號(hào)字
7、段的“序號(hào)”指的是本報(bào)文段數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。</p><p> 確認(rèn)號(hào):該字段的長(zhǎng)度為32位,它表示接收端希望接收下一個(gè)TCP包的第一個(gè)字節(jié)的序號(hào)。</p><p> 報(bào)文長(zhǎng)度:該字段長(zhǎng)度為4位。TCP報(bào)文長(zhǎng)度是以4B為一個(gè)單元來(lái)計(jì)算的,實(shí)際上報(bào)文長(zhǎng)度在20B~60B之間。因此這個(gè)字段的值在5~15之間。</p><p> 圖-2 TCP數(shù)據(jù)包頭部的格式
8、</p><p> 保留:長(zhǎng)度為6位,留做今后使用,目前全部置0.</p><p> 控制:這個(gè)字段定義了6種不同的標(biāo)志,每一個(gè)標(biāo)志占一位,在同一時(shí)間可以設(shè)置一位或多位。URG位為1時(shí),表明應(yīng)盡快把數(shù)據(jù)傳送給應(yīng)用程序,否則表明允許數(shù)據(jù)在緩存中存放一段時(shí)間。RST位為1時(shí),表明要強(qiáng)制切斷連接。SYN位為1時(shí),表明有確立連接的請(qǐng)求,這時(shí),把序號(hào)字段的初始值作為序號(hào)字段的值,以便開(kāi)始通信。F
9、IN位為1時(shí),表明發(fā)送放已經(jīng)沒(méi)有數(shù)據(jù)發(fā)送了。</p><p> 窗口大?。洪L(zhǎng)度為16位,指向必須緊急處理的數(shù)據(jù)的位置,因此最多能夠傳送的數(shù)據(jù)為65535B。</p><p> 緊急指針:該字段長(zhǎng)度為16,指向必需緊急處理的位置,只有當(dāng)標(biāo)志URG=1時(shí)緊急指針才生效。從TCP報(bào)頭后面的報(bào)文數(shù)據(jù)開(kāi)始,到緊急指針?biāo)赋鲩L(zhǎng)度的數(shù)據(jù),就是必須緊急處理的數(shù)據(jù)。</p><p&g
10、t; 選項(xiàng): 該字段可以多達(dá)40B,包括單字節(jié)選項(xiàng)和多字節(jié)選項(xiàng)。</p><p> 校驗(yàn)和:該字段長(zhǎng)度為16位,校驗(yàn)和的校驗(yàn)范圍包括偽頭部,TCP報(bào)頭以及應(yīng)用層來(lái)的數(shù)據(jù)。其計(jì)算方法與IP協(xié)議頭部校驗(yàn)和的計(jì)算方法一樣。偽頭部為12B,它本身并不是TCP數(shù)據(jù)包的真頭部,只是在計(jì)算校驗(yàn)和時(shí),臨時(shí)和TCP數(shù)據(jù)包連接在一起。偽頭部的格式如圖-3所示</p><p> 0
11、 8 16 24 31</p><p> 創(chuàng)建一個(gè)原始套接字,并設(shè)置IP頭選項(xiàng)</p><p> SOCKET sock; sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 或者: sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_I
12、P,NULL,0,WSA_FLAG_OVERLAPPED); 這里,設(shè)置了SOCK_RAW標(biāo)志,表示我們聲明的是一個(gè)原始套接字類(lèi)型。</p><p> 為使用發(fā)送接收超時(shí)設(shè)置,必須將標(biāo)志位置位置為WSA_FLAG_OVERLAPPED。在本課程設(shè)計(jì)中,發(fā)送TCP包時(shí)隱藏了自己的IP地址,因此我們要自己填充IP頭,設(shè)置IP頭操作選項(xiàng)。其中flag設(shè)置為ture,并設(shè)定 IP_HDRINCL 選項(xiàng),表明自己來(lái)構(gòu)
13、造IP頭。setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag));</p><p> int timeout=1000;</p><p> setsockopt(sock, SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout, sizeof(timeout))
14、;</p><p> 在這里我們使用基本套接字SOL_SOCKET,設(shè)置SO_SNDTIMEO表示使用發(fā)送超時(shí)設(shè)置,超時(shí)時(shí)間設(shè)置為1000ms。</p><p> 構(gòu)造IP頭和TCP頭</p><p> 這里, IP頭和TCP頭以及TCP偽部的構(gòu)造請(qǐng)參考下面它們的數(shù)據(jù)結(jié)構(gòu)。</p><p> typedef struct _iphdr
15、 //定義IP首部 </p><p> { UCHAR h_lenver; //4位首部長(zhǎng)度+4位IP版本號(hào) UCHAR tos; //8位服務(wù)類(lèi)型TOS USHORT total_len; //16位總長(zhǎng)度(字節(jié)) USHORT ident; //16位標(biāo)識(shí) USHORT frag_and_flags; //3位標(biāo)志位 UCHAR t
16、tl; //8位生存時(shí)間 TTL UCHAR proto; //8位協(xié)議 (TCP, UDP 或其他) USHORT checksum; //16位IP首部校驗(yàn)和 ULONG sourceIP; //32位源IP地址 ULONG destIP; //32位目的IP地址 </p><p> }IP_HEADER; </p>&l
17、t;p> typedef struct psd_hdr //定義TCP偽首部 </p><p> { ULONG saddr; //源地址 ULONG daddr; //目的地址 UCHAR mbz; //沒(méi)用UCHAR ptcl; //協(xié)議類(lèi)型 USHORT tcpl; //TCP長(zhǎng)度 </p><p&
18、gt; }PSD_HEADER; </p><p> typedef struct _tcphdr //定義TCP首部 </p><p> { USHORT th_sport; //16位源端口 USHORT th_dport; //16位目的端口 ULONG th_seq; //32位序列號(hào) ULONG th_ack;
19、 //32位確認(rèn)號(hào) UCHAR th_lenres; //4位首部長(zhǎng)度/6位保留字 UCHAR th_flag; //6位標(biāo)志位 USHORT th_win; //16位窗口大小 USHORT th_sum; //16位校驗(yàn)和 USHORT th_urp; //16位緊急數(shù)據(jù)偏移量 </p><p> }TCP_HEADER; </p>&l
20、t;p> 3.計(jì)算校驗(yàn)和的子函數(shù)</p><p> 在填充數(shù)據(jù)包的過(guò)程中,需要調(diào)用計(jì)算校驗(yàn)和的函數(shù)checksum兩次,分別用于校驗(yàn)IP頭和TCP頭部(加上偽頭部),其實(shí)現(xiàn)代碼如下:</p><p> USHORT checksum(USHORT *buffer, int size) </p><p> { unsigned long cksum=0
21、; while(size >1) { cksum+=*buffer++; size -=sizeof(USHORT); } if(size ) { cksum += *(UCHAR*)buffer; } cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >>16); return (USHORT)(~ck
22、sum);</p><p><b> }</b></p><p><b> 4.流程圖</b></p><p><b> 調(diào)試分析</b></p><p> 本程序流程簡(jiǎn)單,調(diào)試過(guò)程中沒(méi)有出現(xiàn)大的問(wèn)題。</p><p> 調(diào)試過(guò)程中沒(méi)有出現(xiàn)重大
23、的語(yǔ)法錯(cuò)誤,主要是運(yùn)行的結(jié)果不理想,和預(yù)期的結(jié)果有差距。填充數(shù)據(jù)包的程序部分是不容易出錯(cuò)的。至于數(shù)據(jù)包的發(fā)送,由于是利用函數(shù)sendto()來(lái)實(shí)現(xiàn)的,而sendto()是面向UDP的,將協(xié)議類(lèi)型修改為UDP(Header.proto=IPPROTO_UDP;)后,調(diào)試運(yùn)行成功,問(wèn)題得到解決。</p><p><b> 調(diào)試時(shí),要添加</b></p><p> #i
24、nclude <winsock2.h> </p><p> #include <ws2tcpip.h> </p><p> #pragma comment(lib,"ws2_32.lib")</p><p><b> 不然編譯出錯(cuò)。</b></p><p><b&g
25、t; 使用說(shuō)明</b></p><p> 輸入:sendtcp 192.168.1.123 100 192.168.1.124 200 ,然后回車(chē),出現(xiàn)send ok!表示已經(jīng)正確發(fā)送。</p><p><b> 源代碼</b></p><p> #include <stdio.h> </p>&l
26、t;p> #include <winsock2.h> </p><p> #include <ws2tcpip.h> </p><p> #include <time.h></p><p> #include <windows.h></p><p> #include <s
27、tring.h></p><p> #include <stdlib.h></p><p> #include <iostream.h></p><p> #pragma comment(lib,"ws2_32.lib")</p><p> #define IPVER 4
28、 //IP協(xié)議預(yù)定</p><p> #define MAX_BUFF_LEN 65500 //發(fā)送緩沖區(qū)最大值</p><p> typedef struct ip_hdr //定義IP首部 </p><p><b> {</b></p><p> UCHAR h_verlen;
29、 //4位首部長(zhǎng)度,4位IP版本號(hào) </p><p> UCHAR tos; //8位服務(wù)類(lèi)型TOS </p><p> USHORT total_len; //16位總長(zhǎng)度(字節(jié)) </p><p> USHORT ident; //16位標(biāo)識(shí) </p><p>
30、; USHORT frag_and_flags; //3位標(biāo)志位 </p><p> UCHAR ttl; //8位生存時(shí)間 TTL </p><p> UCHAR proto; //8位協(xié)議 (TCP, UDP 或其他) </p><p> USHORT checksum; //16位
31、IP首部校驗(yàn)和 </p><p> ULONG sourceIP; //32位源IP地址 </p><p> ULONG destIP; //32位目的IP地址 </p><p> }IP_HEADER; </p><p> typedef struct tsd_hdr //定義TCP偽首部
32、 </p><p><b> { </b></p><p> ULONG saddr; //源地址</p><p> ULONG daddr; //目的地址 </p><p> UCHAR mbz; //</p><p> UCHAR ptcl;
33、//協(xié)議類(lèi)型 </p><p> USHORT tcpl; //TCP長(zhǎng)度 </p><p> }PSD_HEADER; </p><p> typedef struct tcp_hdr //定義TCP首部 </p><p><b> { </b></p><p> USHORT
34、th_sport; //16位源端口 </p><p> USHORT th_dport; //16位目的端口 </p><p> ULONG th_seq; //32位序列號(hào) </p><p> ULONG th_ack; //32位確認(rèn)號(hào) </p&
35、gt;<p> UCHAR th_lenres; //4位首部長(zhǎng)度/6位保留字 </p><p> UCHAR th_flag; //6位標(biāo)志位 </p><p> USHORT th_win; //16位窗口大小 </p><p> USHORT th_sum;
36、 //16位校驗(yàn)和 </p><p> USHORT th_urp; //16位緊急數(shù)據(jù)偏移量 </p><p> }TCP_HEADER; </p><p> //CheckSum:計(jì)算校驗(yàn)和的子函數(shù) </p><p> USHORT checksum(USHORT *bu
37、ffer, int size) </p><p><b> { </b></p><p> unsigned long cksum=0; </p><p> while(size >1) </p><p><b> { </b></p><p> cksum+
38、=*buffer++; </p><p> size -=sizeof(USHORT); </p><p><b> } </b></p><p><b> if(size) </b></p><p><b> { </b></p><p>
39、cksum += *(UCHAR*)buffer; </p><p><b> } </b></p><p> cksum = (cksum >> 16) + (cksum & 0xffff); </p><p> cksum += (cksum >>16); </p><p>
40、return (USHORT)(~cksum); </p><p><b> } </b></p><p> int main(int argc, char* argv[]) </p><p><b> { </b></p><p> WSADATA WSAData; </p>
41、<p> SOCKET sock; </p><p> IP_HEADER ipHeader; </p><p> TCP_HEADER tcpHeader; </p><p> PSD_HEADER psdHeader; </p><p> char Sendto_Buff[MAX_BUFF_LEN]; //發(fā)送緩沖
42、區(qū)</p><p> unsigned short check_Buff[MAX_BUFF_LEN]; //檢驗(yàn)和緩沖區(qū)</p><p> const char tcp_send_data[]={"This is my homework of networt,I am happy!"};</p><p> BOOL flag; </p
43、><p> int rect,nTimeOver; </p><p> if (argc!= 5) </p><p><b> {</b></p><p> printf("Useage: sendtcp soruce_ip source_port dest_ip dest_port \n");
44、</p><p> return false; </p><p><b> } </b></p><p> if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0) </p><p><b> { </b></p><p> p
45、rintf("WSAStartup Error!\n"); </p><p> return false; </p><p><b> } </b></p><p> if((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED))
46、==INVALID_SOCKET) </p><p><b> { </b></p><p> printf("Socket Setup Error!\n"); </p><p> return false; </p><p><b> } </b></p>
47、<p> flag=true; </p><p> //設(shè)置選項(xiàng)值 IP_HDRINCL為要設(shè)置的選項(xiàng)值</p><p> if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==SOCKET_ERROR) </p><p><b> { <
48、;/b></p><p> printf("setsockopt IP_HDRINCL error!\n"); </p><p> return false; </p><p><b> } </b></p><p> nTimeOver=1000; </p><p&
49、gt; //設(shè)置選項(xiàng)值 SO_SNDTIMEO為要設(shè)置的選項(xiàng)值</p><p> if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOver, sizeof(nTimeOver))==SOCKET_ERROR) </p><p><b> { </b></p><p
50、> printf("setsockopt SO_SNDTIMEO error!\n"); </p><p> return false; </p><p><b> } </b></p><p><b> //填充IP首部 </b></p><p> ipHead
51、er.h_verlen=(IPVER<<4 | sizeof(ipHeader)/sizeof(unsigned long)); </p><p> ipHeader.tos=(UCHAR)0; </p><p> ipHeader.total_len=htons((unsigned short)sizeof(ipHeader)+sizeof(tcpHeader)+size
52、of(tcp_send_data)); </p><p> ipHeader.ident=0; //16位標(biāo)識(shí)</p><p> ipHeader.frag_and_flags=0; //3位標(biāo)志位</p><p> ipHeader.ttl=128; //8位生存時(shí)間 </p><p> ipHeader.proto=I
53、PPROTO_UDP; //協(xié)議類(lèi)型</p><p> ipHeader.checksum=0; //檢驗(yàn)和暫時(shí)為0</p><p> ipHeader.sourceIP=inet_addr(argv[1]); //32位源IP地址</p><p> ipHeader.destIP=inet_addr(argv[3]); //32位目的IP地址<
54、/p><p> //計(jì)算IP頭部檢驗(yàn)和</p><p> memset(check_Buff,0,MAX_BUFF_LEN);</p><p> memcpy(check_Buff,&ipHeader,sizeof(IP_HEADER));</p><p> ipHeader.checksum=checksum(check_Buf
55、f,sizeof(IP_HEADER));</p><p> //構(gòu)造TCP偽首部</p><p> psdHeader.saddr=ipHeader.sourceIP;</p><p> psdHeader.daddr=ipHeader.destIP;</p><p> psdHeader.mbz=0;</p><
56、;p> psdHeader.ptcl=ipHeader.proto;</p><p> psdHeader.tcpl=htons(sizeof(TCP_HEADER)+sizeof(tcp_send_data));</p><p> //填充TCP首部 </p><p> tcpHeader.th_dport=htons(atoi(argv[4]));
57、 //16位目的端口號(hào)</p><p> tcpHeader.th_sport=htons(atoi(argv[2])); //16位源端口號(hào) </p><p> tcpHeader.th_seq=0; //SYN序列號(hào)</p><p> tcpHeader.th_ack=0;
58、 //ACK序列號(hào)置為0</p><p> //TCP長(zhǎng)度和保留位</p><p> tcpHeader.th_lenres=(sizeof(tcpHeader)/sizeof(unsigned long)<<4|0); </p><p> tcpHeader.th_flag=2; //修改這里來(lái)實(shí)現(xiàn)不同的標(biāo)志位探測(cè),2是SYN,1是/
59、/FIN,16是ACK探測(cè) 等等 </p><p> tcpHeader.th_win=htons((unsigned short)16384); //窗口大小</p><p> tcpHeader.th_urp=0; //偏移大小 </p><p> tcpHeader.th_sum=0;
60、 //檢驗(yàn)和暫時(shí)填為0</p><p> //計(jì)算TCP校驗(yàn)和 </p><p> memset(check_Buff,0,MAX_BUFF_LEN);</p><p> memcpy(check_Buff,&psdHeader,sizeof(psdHeader)); </p><
61、p> memcpy(check_Buff+sizeof(psdHeader),&tcpHeader,sizeof(tcpHeader)); </p><p> memcpy(check_Buff+sizeof(PSD_HEADER)+sizeof(TCP_HEADER),tcp_send_data,sizeof(tcp_send_data));</p><p> tcp
62、Header.th_sum=checksum(check_Buff,sizeof(PSD_HEADER)+sizeof(TCP_HEADER)+sizeof(tcp_send_data)); </p><p><b> //填充發(fā)送緩沖區(qū)</b></p><p> memset(Sendto_Buff,0,MAX_BUFF_LEN);</p><
63、;p> memcpy(Sendto_Buff,&ipHeader,sizeof(IP_HEADER));</p><p> memcpy(Sendto_Buff+sizeof(IP_HEADER),&tcpHeader,sizeof(TCP_HEADER));</p><p> memcpy(Sendto_Buff+sizeof(IP_HEADER)+sizeo
64、f(TCP_HEADER),tcp_send_data,sizeof(tcp_send_data));</p><p> int datasize=sizeof(IP_HEADER)+sizeof(TCP_HEADER)+sizeof(tcp_send_data);</p><p> //發(fā)送數(shù)據(jù)報(bào)的目的地址</p><p> SOCKADDR_IN dest
65、; </p><p> memset(&dest,0,sizeof(dest));</p><p> dest.sin_family=AF_INET; </p><p> dest.sin_addr.s_addr=inet_addr(argv[3]); </p><p> dest.sin_port=htons(atoi
66、(argv[4]));</p><p> rect=sendto(sock,Sendto_Buff,datasize, 0,(struct sockaddr*)&dest, sizeof(dest)); </p><p> if (rect==SOCKET_ERROR) </p><p><b> { </b></p>
67、;<p> printf("send error!:%d\n",WSAGetLastError()); </p><p> return false; </p><p><b> } </b></p><p><b> else </b></p><p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)tcp數(shù)據(jù)包
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---網(wǎng)絡(luò)協(xié)議數(shù)據(jù)包
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-- 解析ip數(shù)據(jù)包
- 解析arp數(shù)據(jù)包-計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---ip數(shù)據(jù)包解析報(bào)告
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---監(jiān)控ip數(shù)據(jù)包流量
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---基于wireshark的網(wǎng)絡(luò)數(shù)據(jù)包內(nèi)容解析
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 《計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)》
- 網(wǎng)絡(luò)課程設(shè)計(jì)--發(fā)送tcp數(shù)據(jù)包
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)課程設(shè)計(jì)--ping程序的實(shí)現(xiàn)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-監(jiān)控ip包流量
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---網(wǎng)絡(luò)設(shè)計(jì)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)---模擬ethernet幀的發(fā)送過(guò)程
評(píng)論
0/150
提交評(píng)論