計算機網(wǎng)絡(luò)+課程設(shè)計源代碼和實驗報告+幀封裝、IP數(shù)據(jù)包解析和發(fā)送TCP數(shù)據(jù)包_第1頁
計算機網(wǎng)絡(luò)+課程設(shè)計源代碼和實驗報告+幀封裝、IP數(shù)據(jù)包解析和發(fā)送TCP數(shù)據(jù)包_第2頁
計算機網(wǎng)絡(luò)+課程設(shè)計源代碼和實驗報告+幀封裝、IP數(shù)據(jù)包解析和發(fā)送TCP數(shù)據(jù)包_第3頁
計算機網(wǎng)絡(luò)+課程設(shè)計源代碼和實驗報告+幀封裝、IP數(shù)據(jù)包解析和發(fā)送TCP數(shù)據(jù)包_第4頁
計算機網(wǎng)絡(luò)+課程設(shè)計源代碼和實驗報告+幀封裝、IP數(shù)據(jù)包解析和發(fā)送TCP數(shù)據(jù)包_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機網(wǎng)絡(luò)課程設(shè)計報告院(系): 計算機學(xué)院專 業(yè):計算機科學(xué)與技術(shù)姓 名:班 級:學(xué) 號:指導(dǎo)教師:2009 年 7 月 4 日實驗一幀封裝實驗?zāi)康模?編寫程序,根據(jù)給出的原始數(shù)據(jù),組裝一個IEEE 802.3格式的幀(題目) 默認的輸入文件為二進制原始數(shù)據(jù)(文件名分別為input 1和input2)。-要求程序為命令行程序。比如,可執(zhí)行文件名為framer.exe,則命令行形 式如下:framer inputfile outputfile,其中,inputfile 為原始數(shù)據(jù)文件, outputfile為輸出結(jié)果。 輸出:對應(yīng)input1和input2得結(jié)果分別為output1和outpu

2、t2。試驗要求:編寫程序,根據(jù)給出的原始數(shù)據(jù),組裝一個IEEE 802.3格式的幀(題目) 默認的輸入文件為二進制原始數(shù)據(jù)(文件名分別為input 1和input2)。要求程序為命令行程序。比如,可執(zhí)行文件名為framer.exe,則命令行形 式如下:framer inputfile outputfile,其中,inputfile 為原始數(shù)據(jù)文件, outputfile為輸出結(jié)果。輸出:對應(yīng)input1和input2得結(jié)果分別為output1和output2驗設(shè)計相關(guān)知識:幀:來源于串行線路上的通信。其中,發(fā)送者在發(fā)送數(shù)據(jù)的前后各添加特殊 的字符,使它們成為一個幀。Ethernet從某種程度上

3、可以被看作是機器之間的 數(shù)據(jù)鏈路層連接。按802.3標準的幀結(jié)構(gòu)如下表所示(802.3標準的Ethernet幀結(jié)構(gòu)由7部第1頁分組成)802.3標準的幀結(jié)構(gòu)前導(dǎo)碼幀前定界符目的地址源地址長度字段數(shù)據(jù)字段校驗字段7B1B(2/6B)(2/6B)(2B)(長度可變)(4B)其中,幀數(shù)據(jù)字段的最小長度為46B。如果幀的LLC數(shù)據(jù)少于46B,則應(yīng)將 數(shù)據(jù)字段填充至46B。填充字符是任意的,不計入長度字段值中。在校驗字段中,使用的是CRC校驗。校驗的范圍包括目的地址字段、源地址 字段、長度字段、LLC數(shù)據(jù)字段。循環(huán)冗余編碼(CRC)是一種重要的線性分組碼、編碼和解碼方法,具有簡單、 檢錯和糾錯能力強等特

4、點,在通信領(lǐng)域廣泛地用于實現(xiàn)差錯控制。CRC校驗碼的 檢錯能力很強,不僅能檢查出離散錯誤,還能檢查出突發(fā)錯誤。利用CRC進行檢錯的過程可簡單描述如下:在發(fā)送端根據(jù)要傳送的k位二進 制碼序列,以一定的規(guī)則產(chǎn)生一個校驗用的r位監(jiān)督碼(CRC碼),附在原始信息 的后邊,構(gòu)成一個新的二進制碼序列(共k+r位),然后發(fā)送出去。在接收端,根 據(jù)信息碼和CRC碼之間所遵循的規(guī)則進行檢驗,以確定傳送中是否出錯。這個規(guī) 則在差錯控制理論中稱為“生成多項式”。CRC的基本實現(xiàn)前導(dǎo)碼幀前定界符目的地址源地址長度字 段數(shù)據(jù)字段校驗字段7B1B(2/6B)(2/6B)(2B)(長度可變)(4B)循環(huán)冗余校驗碼的特點:(

5、1)CRC校驗碼可檢測出所有單個錯誤。(2)CRC 校驗碼可檢測出所有奇數(shù)位錯誤。(3)CRC校驗碼可檢測出所有雙位的錯誤(4) CRC校驗碼可檢測出所有小于、等于校驗位長度的突發(fā)錯誤。(5)CRC校驗碼可 以1-(1/2)k-i的概率檢測出長度為(K+1)位的突發(fā)錯誤 實驗分析:-填充幀頭部字段要完成一次幀封裝的過程,首先要完成的就是幀頭部的裝入,這一過程只 要將簽到嗎、定界符、目的地址、源地址、長度字段的相應(yīng)數(shù)值按順序?qū)懭刖涂?以了。其中,長度字段的值即為要發(fā)送的數(shù)據(jù)的實際長度。-填充數(shù)據(jù)字段在填充數(shù)據(jù)字段的過程中要注意的主要問題是數(shù)據(jù)字段的長度。802.3標準 中規(guī)定了幀數(shù)據(jù)字段的最小長

6、度為46B,最大長度為1500B。如果數(shù)據(jù)不足46B, 則需要通過填充0來補足;若數(shù)據(jù)長度超過1500B,則的大獎超過部分封裝入下 一個幀進行發(fā)送。CRC校驗幀封裝的最后一步就是對數(shù)據(jù)進行校驗,并將校驗結(jié)果記入幀校驗字 段。程序流程圖:CRC計算流程圖:序源代碼:#include#include#includevoid main(int argc,char*argv)/如果輸入命令行不正確,則輸出提示后退出。if(argc!=3)coutendl請按以下格式輸入:framer inputfile outputfileendl;exit(0);/打開指定的輸出文件,以二進制方式打開并可讀可寫,如

7、文件存在,則清除其內(nèi)容。fstream file(argv2,ios:out|ios:in|ios:binary|ios:trunc,0);for(int i=0;i8);file.put(char(length&0 xff);/將文件長度值按照逆序?qū)懭氲捷敵鑫募拈L度字段中。 file.write(data,length);/將 data 內(nèi)容寫入到輸出文件中。/如果輸入文件長度不足B,則用補足B。if(length46)for(int j=length;j46;j+)file.put(char(0 x00);file.put(char(0 x00);/將數(shù)據(jù)字段后添加個file.seekg

8、(8,ios:beg);/將讀指針指向目的地址字段,從此處開始CRC計算unsigned char ch;/ch用來保存讀入的字符。unsigned char crc=char(0 x00);/余 數(shù)初始值為。while(1)/進行 CRC 計算file.get(ch);if(ch=0 xff)/判斷是否到了文件結(jié)尾,如果是,則退出循環(huán)。break;for(i=0;i8;i+)/對入讀入的字符的位分別處理。if(0 x80=(crc&(0 x80)/當(dāng)前余數(shù)最高位為,需要進行除法運算。crc=(crc7);/將輸入數(shù)據(jù)相應(yīng)的值遞補到余數(shù)末位。crc=crc”(0 x07);/進行除法運算,即與

9、除數(shù)的低位相異或。else/當(dāng)前余數(shù)的最高位為,不需要進行除法運算。crc=(crc7);/將輸入數(shù)據(jù)相應(yīng)位的值遞補到余數(shù)末位。ch=ch1;/讀到的字符左移位,使數(shù)據(jù)下一位作為輸入位。file.clear();file.seekp(-1,ios:end);/將寫指針移到輸出文件的最后。file.put(crc);/寫入 crc 碼。file.close();infile.close();/關(guān)閉輸入文件和輸出文件。coutendl數(shù)據(jù)幀文件argv2封裝完成endl;運行結(jié)果:運行結(jié)果如下所示:一執(zhí)行framer.exe文件的結(jié)果如下所示:實驗小結(jié):實現(xiàn)幀的封裝,主要是將幀的七個部分-前導(dǎo)碼、

10、幀前定界符、目的地址、 源地址、長度字段、數(shù)據(jù)字段和校驗字段,一個一個按順序封裝的,最后使得一 個幀的封裝得以完成。同時,在編寫程序的過程中,用到了很多的函數(shù),這些函 數(shù)的運用使得程序簡便而且正確的運行出來。實驗二解析IP數(shù)據(jù)包實驗?zāi)康模?設(shè)計一個解析IP數(shù)據(jù)包的程序,并根據(jù)這個程序,說明IP數(shù)據(jù)包的結(jié)構(gòu)及IP協(xié)議的相關(guān)問題,從而對IP層的工作原理有更好的理解和認識。實驗要求:本實驗的目標是捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,見個結(jié)果顯 示在標準輸出上,并同時寫入日志文件。程序的具體要求如下:以命令行形式運行:ipparse logfile,其中ipparse是程序名,而logfile貝

11、 代表記錄結(jié)果的日志文件。在標準輸出、和日志文件中寫入捕獲的IP包的版本、頭長度、服務(wù)類型、 數(shù)據(jù)包總長度、數(shù)據(jù)包標識、分段標志、分段偏移值、生存時間、上層協(xié) 議類型、頭校驗和、源IP地址和目的IP地址等內(nèi)容。當(dāng)程序接收到鍵盤輸入Ctrl+C時退出。設(shè)計相關(guān)知識:IP數(shù)據(jù)報的格式說明IP協(xié)議都具有什么功能。其首部,版本目前廣泛使用 的版本號為4;首部長度站4bit;服務(wù)類型占8bit,其中服務(wù)類型TOS子域占4 位,優(yōu)先級子域占3位,另一位為保留位;總長度字段為2B,IP數(shù)據(jù)包的最大 長度是65535B;標識占16bit,它是一個計數(shù)器,用來產(chǎn)生數(shù)據(jù)報的標識;標志 占3bit,其中最低為為MF

12、,MF=1時為后面“還有分片”,MF=0表示這是數(shù)據(jù)報 片中的最后一個,DF=0時,表示允許分片;片偏移以8個字節(jié)為偏移單位;生 存時間字段記為TTL,單位為秒;協(xié)議段占8bit,用于指出次數(shù)據(jù)是使用何種協(xié) 議,典型的協(xié)議號有6: TCP,17: UDP,1: ICMP。本程序使用套接字socket編程,將網(wǎng)卡設(shè)為能夠接受流經(jīng)網(wǎng)卡的所有類型的 數(shù)據(jù)包。首先,初始化套接字,然后監(jiān)聽數(shù)據(jù)包,解析數(shù)據(jù)包。SOCKET sock二socket(AF_INET,SOCK_RAW,IPPROTO_IP )用來創(chuàng)建套接字,其參數(shù) 為通信發(fā)生的區(qū)字段和套接字的類型。WSAIoctl(sock , IO_RCV

13、ALL ,&dwBufferInLen , sizeof(dwBufferInLen)函數(shù) 用來把網(wǎng)卡設(shè)置為混雜模式。recv(sock,buffer,65535,0)函數(shù)用來接收經(jīng)過的IP包,其參數(shù)分別是套接字描 述符,緩沖區(qū)的地址,緩沖區(qū)的大小。typedef struct IP_HEADip_head;用來定義IP頭部數(shù)據(jù)。setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *)函數(shù)用來獲取本機 IP 地址 htons()函數(shù)將無符號短整型轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序的數(shù)據(jù)本程序在windows環(huán)境下利用C+語言編寫。實驗設(shè)計分析:為了獲取網(wǎng)絡(luò)中的IP數(shù)據(jù)包,必

14、須對網(wǎng)卡進行編程,我們使用套接字進行編程。使用套接字開始構(gòu)造程序運行環(huán)境,生成輸出文件第5頁開始構(gòu)造程序運行環(huán)境,生成輸出文件第5頁定義IP頭部的數(shù)據(jù)結(jié)構(gòu)IP包的解析程序流程圖:創(chuàng)造原始套接字,并初始化具體程序代碼:#include#include#include#include#include #pragma comment(lib,ws2_32) /指定連接到網(wǎng)絡(luò)應(yīng)用和 internet#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)typedef struct IP_HEADunion /定義聯(lián)合unsigned char Version;unsigned

15、char HeadLen;unsigned char ServiceType;unsigned short TotalLen;unsigned short Identifier;unionunsigned short Flags;unsigned short FragOffset;unsigned char TimeToLive;unsigned char Protocol;unsigned short HeadChecksum;unsigned int SourceAddr;unsigned int DestinAddr;unsigned char Options;ip_head; /定義I

16、P頭部的數(shù)據(jù)結(jié)構(gòu)void main(int argc,char *argv)using namespace std;ofstream outfile(C:logfile.txt”,ios:out);if(argc!=2)coutendl請以下格式輸入命令行:PackParse packet_sumendl;return;WSADATA WSAData;if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0)coutendlWSASTartup 初始化失敗endl;return;SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_I

17、P);/三個參分別為通信發(fā)生的區(qū)字段,套接字的類型,與IP協(xié)議if(sock=INVALID_SOCKET)coutendl創(chuàng)建 Socket 失敗!”endl;closesocket(sock);WSACleanup();BOOL flag=TRUE;if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *) &flag,sizeof(flag)=SOCKET_ERROR)coutendlsetsockopt 操作失敗:WSAGetLastError()endl;closesocket(sock);WSACleanup();char hostName1

18、28;/獲取主機名if(gethostname(hostName,100)=SOCKET_ERROR)coutendlgethostname 操作失敗:WSAGetLastError()endl;closesocket(sock);WSACleanup();hostent *pHostIP; 獲取本地 IPif(pHostIP=gethostbyname(hostName)=NULL)coutendlgethostbyname 操作失敗:WSAGetLastError()h_addr_list0;if(bind(sock,(PSOCKADDR)&host_addr,sizeof(host_ad

19、dr)=SOCKET_ERROR) coutendlbind 操作失敗:WSAGetLastError()endl;closesocket(sock); 綁定網(wǎng)卡WSACleanup();DWORD dwBufferLen10;DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;if(WSAIoctl(sock , IO_RCVALL,&dwBufferInLen, sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)=SOCKET_ERROR

20、) coutendlWSAIoctl 操作失敗:WSAGetLastError()endl;closesocket(sock); /將網(wǎng)卡設(shè)為混雜模式,以接受所有數(shù)據(jù)WSACleanup();coutendl開始解析 IP 包:endl;char buffer65535; 設(shè)置緩沖區(qū)int packsum=atoi(argv1); /字符串轉(zhuǎn)換為整形for(int i=0;i0) /四個參數(shù)分別是套接字描述符,緩沖區(qū)的地址,緩沖區(qū)大小, 附加標志ip_head ip=*(ip_head *)buffer;coutendl;cout版本:4)endl; /獲取頭部長度字段cout頭部長度:(ip

21、.HeadLen &0 x0f)*4)endl; 獲取頭部長度字段cout 服 務(wù) 類 型 :Priority5)”,Service1)&0 x0f)endl; /優(yōu)先級子域和 TOS 子域cout總長度:ip.TotalLenendl;/獲取總長度字段cout標識符:ip.Identifierendl;/獲取標識字段cout標志位:15)&0 x01)”,DF=”14)&0 x01)”,Mf=”13)&0 x01)endl; /獲得標志字段cout片偏移:(ip.FragOffset&0 x1fff)endl; /獲取分段偏移字段cout生存周期:(int)ip.TimeToLiveendl

22、; /獲取生存時間字段cout協(xié)議:Protocol(int)ip.Protocolendl; /獲取協(xié)議字段cout頭部校驗和:ip.HeadChecksumendl; 獲取頭校驗和字段cout原地址:inet_ntoa(*(in_addr *)&ip.SourceAddr)endl; /獲取源 IP 地址字段 cout目的 IP 地址:inet_ntoa(*(in_addr *)&ip.DestinAddr)endl; /獲取目的 IP 地址字段 outfileendl;outfile版本:4)endl;outfile頭部長度:(ip.HeadLen &0 x0f)*4)endl;outf

23、ile 服 務(wù) 類 型 :Priority5)”,Service1)&0 x0f)endl;outfile總長度:ip.TotalLenendl;outfile標識符:ip.Identifierendl;outfile標志位:15)&0 x01)”,DF=14)&0 x01),Mf=13)&0 x01)endl;outfile片偏移:(ip.FragOffset&0 x1fff)endl;outfile生存周期:(int)ip.TimeToLiveendl;outfile協(xié)議:Protocol(int)ip.Protocolendl;outfile頭部校驗和:ip.HeadChecksumen

24、dl;outfile原地址:inet_ntoa(*(in_addr *)&ip.SourceAddr)endl;outfile目的 IP 地址:inet_ntoa(*(in_addr *)&ip.DestinAddr)1)cksum+=*buffer+;size -=sizeof(USHORT);if(size )cksum += *(UCHAR*)buffer;cksum = (cksum 16) + (cksum & 0 xffff);cksum += (cksum 16);return (USHORT)(cksum);程序流程圖:源程序代碼:#include #include #incl

25、ude #include #include #include #include #include #pragma comment(lib,ws2_32.lib)#define IPVER 4/IP 協(xié)議預(yù)定#define MAX_BUFF_LEN 65500 發(fā)送緩沖區(qū)最大值typedef struct ip_hdrUCHAR h_verlen;UCHAR tos;USHORT total_len;USHORT ident;USHORT frag_and_flags;UCHAR ttl;UCHAR proto;typedef struct ip_hdrUCHAR h_verlen;UCHAR

26、tos;USHORT total_len;USHORT ident;USHORT frag_and_flags;UCHAR ttl;UCHAR proto;USHORT checksum;ULONG sourceIP;ULONG destIP;IP_HEADER;/定義IP首部/8位服務(wù)類型TOS/16位總長度(字節(jié))/16位標識/3位標志位/8位生存時間TTL/8位協(xié)議(TCP, UDP或其他)/16位IP首部校驗和/32位源IP地址/32位目的IP地址typedef struct tsd_hdr /定義 TCP 偽首部ULONG saddr;/源地址ULONG daddr;/目的地址UCH

27、AR mbz;沒用UCHAR ptcl;/協(xié)議類型USHORT tcpl; /TCP 長度PSD_HEADER;typedef struct tcp_hdr 定義 TCP 首部/16位源端口/16位源端口/16位目的端口/32位序列號/32位確認號/4位首部長度/6位保留字/6位標志位/16位窗口大小/16位校驗和/16位緊急數(shù)據(jù)偏移量USHORT th_dport;ULONG th_seq;ULONG th_ack;UCHAR th_lenres;UCHAR th_flag;USHORT th_win;USHORT th_sum;USHORT th_urp;TCP_HEADER;/Check

28、Sum:計算校驗和的子函數(shù)USHORT checksum(USHORT *buffer, int size)unsigned long cksum=0;while(size 1)cksum+=*buffer+;size -=sizeof(USHORT);if(size)cksum += *(UCHAR*)buffer;cksum = (cksum 16) + (cksum & 0 xffff);cksum += (cksum 16);return (USHORT)(cksum);int main(int argc, char* argv)WSADATA WSAData;SOCKET sock;

29、IP_HEADER ipHeader;TCP_HEADER tcpHeader;PSD_HEADER psdHeader;char Sendto_BuffMAX_BUFF_LEN; 發(fā)送緩沖區(qū)第12頁unsigned short check_BuffMAX_BUFF_LEN; /檢驗和緩沖區(qū)const char tcp_send_data=This is my homework of networt,I am happy!;BOOL flag;int rect,nTimeOver;if (argc!= 5)printf(Useage: SendTcp soruce_ip source_port

30、 dest_ip dest_port n);return false;if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0)printf(WSAStartup Error!n);return false;if(sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED)=INVALID_SOCKET)printf(Socket Setup Error!n);return false;flag=true;if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL

31、,(char*)&flag,sizeof(flag)=SO CKET_ERROR)printf(setsockopt IP_HDRINCL error!n);return false;nTimeOver=1000;if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOver,sizeof(nTimeOver)=SOCKET_ERROR)printf(setsockopt SO_SNDTIMEO error!n);return false;/填充IP首部ipHeader.h_verlen=(IPVER4 | sizeof(ipHe

32、ader)/sizeof(unsigned long);ipHeader.tos=(UCHAR)0;ipHeader.total_len=htons(unsignedshort)sizeof(ipHeader)+sizeof(tcpHeader)+sizeof(tcp_send_data);第13頁ipHeader.ident=0; /16 位標識ipHeader.frag_and_flags=0; /3 位標志位ipHeader.ttl=128; /8 位生存時間ipHto=IPPROTO_UDP; /|協(xié)議類型ipHeader.checksum=0; /檢驗和暫時為 0i

33、pHeader.sourceIP=inet_addr(argv1); /32 位源 IP 地址ipHeader.destIP=inet_addr(argv3); /32 位目的 IP 地址計算IP頭部檢驗和memset(check_Buff,0,MAX_BUFF_LEN);memcpy(check_Buff,&ipHeader,sizeof(IP_HEADER);ipHeader.checksum=checksum(check_Buff,sizeof(IP_HEADER);構(gòu)造TCP偽首部psdHeader.saddr=ipHeader.sourceIP;psdHeader.daddr=ipH

34、eader.destIP;psdHeader.mbz=0;psdHeader.ptcl=ipHto;psdHeader.tcpl=htons(sizeof(TCP_HEADER)+sizeof(tcp_send_data);/填充TCP首部tcpHeader.th_dport=htons(atoi(argv4); /16 位目的端口號tcpHeader.th_sport=htons(atoi(argv 2 ); /16 位源端口號tcpHeader.th_seq=0;/SYN 序列號tcpHeader.th_ack=0;/ACK 序列號置為 0/TCP長度和保留位tcpHea

35、der.th_lenres=(sizeof(tcpHeader)/sizeof(unsigned long)4|0);tcpHeader.th_flag=2; /修改這里來實現(xiàn)不同的標志位探測,2是SYN,1 是/FIN,16是ACK探測等等tcpHeader.th_win=htons(unsigned short)16384);窗口大小tcpHeader.th_urp=0;偏移大小tcpHeader.th_sum=0;檢驗和暫時填為0tcpHeader.th_sum=0;計算TCP校驗和memset(check_Buff,0,MAX_BUFF_LEN);memcpy(check_Buff,&psdHeader,sizeof(psdHeader);memcpy(check_Buff+sizeof(psdHeader),&tcpHeader,sizeof(tcpHeader);memcpy(check_Buff+sizeof(PSD_HEADER)+sizeof(TCP_HEADER),tcp_send_data,sizeof(tcp_send_data);tcpHeader.th_sum=checksum(check_Buff,sizeof(PSD_HEADER)+sizeof(TCP_HEADER

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論