版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 WORD格式可編輯滁州學(xué)院課程設(shè)計(jì)報(bào)告課程名稱: 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì) 設(shè)計(jì)題目: ping程序的設(shè)計(jì)與實(shí)現(xiàn) 系 別: 計(jì)算機(jī)與信息工程學(xué)院 專 業(yè): 計(jì)算科學(xué)與技術(shù) 組 別: 第五小組 起止日期: 2011年12月1日2011年12月8日 指導(dǎo)教師: 計(jì)算機(jī)科學(xué)與技術(shù)系二一一年制課程設(shè)計(jì)題目Ping程序的設(shè)計(jì)與實(shí)現(xiàn)組長學(xué)號2011220125班級計(jì)專(2)班系別計(jì)算機(jī)與信息工程學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)組員指導(dǎo)教師課程設(shè)計(jì)目的通過設(shè)計(jì)Ping程序,理解Ping程序的實(shí)現(xiàn)原理,并初步講解了c語言網(wǎng)絡(luò)編程技術(shù)。本章涉及很多網(wǎng)絡(luò)編程函數(shù)和編程技巧,包括庫文件的導(dǎo)入;winsock的初始化、注銷;so
2、cket的創(chuàng)建、關(guān)閉;設(shè)置socket選項(xiàng);根據(jù)主機(jī)名獲取IP地址; 從堆中分配一定數(shù)量的空間、釋放從堆中分配的空間;數(shù)據(jù)報(bào)的發(fā)送;數(shù)據(jù)報(bào)的接等。課程設(shè)計(jì)所需環(huán)境WindowsXP+Visual C+6.0課程設(shè)計(jì)任務(wù)要求實(shí)現(xiàn)ping的基本功能,實(shí)現(xiàn)ping -t課程設(shè)計(jì)工作進(jìn)度計(jì)劃序號起止日期工 作 內(nèi) 容分工情況012011-12-12011-12-2展開思路討論工作并搜集相關(guān)資料022011-12-32011-12-6具體制作,編寫相關(guān)代碼,制作相關(guān)窗口并實(shí)現(xiàn),美化界面。032011-12-72011-12-8編寫并完成課程設(shè)計(jì)報(bào)告指導(dǎo)教師簽字: 年 月 日教研室審核意見:教研室主任簽字
3、: 年 月 日課程設(shè)計(jì)任務(wù)書一Ping 程序運(yùn)行原理在網(wǎng)絡(luò)層, 除了IP協(xié)議之外, 還有一些控制協(xié)議, 如ICMP, ARP, DHCP等。1. ping的基礎(chǔ)知識原始套接字原始套接字是允許訪問底層傳輸協(xié)議的一種套接字類型。使用原始套接字操作IP數(shù)據(jù)報(bào), 可以進(jìn)行路由跟蹤, Ping等。另外, 使用原始套接字需要知道許多下層協(xié)議結(jié)構(gòu)的知識,所以下面討論ICMP,IP, UDP, TCP格式。原始套接字有兩種類型, 第一種類型是在IP頭種使用預(yù)定義的協(xié)議, 如ICMP;第二種類型是在IP頭種使用自定義的協(xié)議。下面使用創(chuàng)建原始套接字的方法。創(chuàng)建套接字的函數(shù)是socket()或者WSASocket(
4、),只不過要將套接字類型指定為SOCK_RAW,代碼如下:SOCKET sraw = :socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);創(chuàng)建原始套接字時(shí)socket函數(shù)的第三個(gè)參數(shù)protocol值將成為IP頭中得協(xié)議域的值。IPPROTO_ICMP指定要使用ICMP。原始套解釋提供管理下層傳輸?shù)哪芰?。他們可能會被惡意利用?因此, 僅Administrator組的成員能夠創(chuàng)建SOCK_RAW類型的套接字。 任何人在Windows NT下都可以創(chuàng)建原始套接字,但是沒有Administrator權(quán)限的人不能用它來做任何事情, 因?yàn)閎ind函數(shù)將會失敗, 出錯碼WS
5、AEACCES.在上面的套接字創(chuàng)建代碼種,我們使用ICMP,也可以使用IIGMP, UDP, IP或者原始IP,對應(yīng)的宏定義分別是IPPROTO_IGMP, IPROTO_UDP, IPPROTO_IP或者IPPROTO_RAW。其中協(xié)議標(biāo)志IPPROTO_UDP, IPPROTO_IP, 和IPPROTO_RAW 需要啟動IP_HDRINCL選項(xiàng)。使用恰當(dāng)?shù)膮f(xié)議標(biāo)志創(chuàng)建原始套接字之后,便可以在發(fā)送和接受調(diào)用種使用此套接字句柄了。無論IP_HDRINCL選項(xiàng)是否設(shè)置, 在原始套接字上接收到的數(shù)據(jù)種都會將包含IP頭。2. ICMP協(xié)議與校驗(yàn)和的計(jì)算互聯(lián)網(wǎng)上得操作由路由器緊緊地監(jiān)控著。當(dāng)有異常飯送
6、時(shí)候,具體事件通過ICMP報(bào)道,如目的不可到達(dá),TTL超時(shí)等。這個(gè)協(xié)議也用來測試互聯(lián)網(wǎng)。每個(gè)ICMP消息都封裝在IP封包中, 所以使用IP尋址,ICMP消息的格式如下:首8位表示ICMP的類型,通??梢苑譃檎埱笙⒑湾e誤報(bào)告消息兩類。接下來的八位表示ICMP代碼,這個(gè)域進(jìn)一步定義了請求或者是消息的類型。接下來八位表示icmp的校驗(yàn)和。它提供了ICMP頭和他的實(shí)際數(shù)據(jù)。3.校驗(yàn)和的計(jì)算發(fā)送ICMP報(bào)文時(shí), 必須由程序自己計(jì)算校驗(yàn)和,并將它填入ICMP頭部的對應(yīng)域中。校驗(yàn)和的計(jì)算方法是:將數(shù)據(jù)以資為單位累加到一個(gè)雙字中,如果數(shù)據(jù)長度為奇數(shù),最后一個(gè)字節(jié)將被擴(kuò)展到字, 累加的結(jié)果是一個(gè)雙字,最后將這
7、個(gè)雙字的高16bit和低16bit相加后取反,便得到了校驗(yàn)和。u_short checksum(u_short *buffer, int len)register int nleft = len;register u_short *w = buffer;register u_short answer;register int sum = 0;/使用32位累加器,進(jìn)行16位的反饋計(jì)算while ( nleft 1 )sum += *w+;nleft -= 2;/補(bǔ)全奇數(shù)位if ( nleft = 1 )u_short u = 0;*(u_char *)(&u) = *(u_char*)w;sum
8、 += u;/將反饋的16位從高位移到低位sum = (sum 16) + (sum & 0xffff);sum += (sum 16);answer = sum;return (answer);3.Ping程序設(shè)計(jì)思路:要實(shí)現(xiàn)ping程序,需要實(shí)現(xiàn)以下步驟:(1) 創(chuàng)建協(xié)議類型為IPPROTO_ICMP的原始套接字,設(shè)置套接字屬性。(2) 創(chuàng)建并初始化ICMP封包。(3) 調(diào)用sendto函數(shù)向遠(yuǎn)程主機(jī)發(fā)送ICMP請求。(4) 調(diào)用recfrom函數(shù)接受ICMP響應(yīng)。初始化ICMP頭時(shí)先初始化消息類型和代碼域, 之后是回顯請求頭。程序首先定義了ICMP頭的數(shù)據(jù)結(jié)構(gòu)IMCP_HDR.。ICMP
9、_HDR的定義如下:typedef struct _ICMPHeaderu_char Type; /類型u_char Code; /代碼u_short Checksum; /首部校驗(yàn)和u_short ID; /標(biāo)識u_short Seq; /序列號char Data; /數(shù)據(jù)ICMPHDR, *PICMPHDR;4.編程時(shí),需要用到一些windows函數(shù),說明如下:(1).int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);函數(shù)說明:為了在應(yīng)用程序當(dāng)中調(diào)用任何一個(gè)Winsock API函數(shù),首先第一件事情就是必須通過WSASta
10、rtup函數(shù)完成對Winsock服務(wù)的初始化,因此需要調(diào)用WSAStartup函數(shù)。使用Socket的程序在使用Socket之前必須調(diào)用WSAStartup函數(shù)。該函數(shù)的第一個(gè)參數(shù)指明程序請求使用的Socket版本,其中高位字節(jié)指明副版本、低位字節(jié)指明主版本;操作系統(tǒng)利用第二個(gè)參數(shù)返回請求的Socket的版本信息。當(dāng)一個(gè)應(yīng)用程序調(diào)用WSAStartup函數(shù)時(shí),操作系統(tǒng)根據(jù)請求的Socket版本來搜索相應(yīng)的Socket庫,然后綁定找到的Socket庫到該應(yīng)用程序中。以后應(yīng)用程序就可以調(diào)用所請求的Socket庫中的其它Socket函數(shù)了。(2).SOCKET socket( int af, int
11、 type, int protocol ); 函數(shù)說明:應(yīng)用程序調(diào)用socket函數(shù)來創(chuàng)建一個(gè)能夠進(jìn)行網(wǎng)絡(luò)通信的套接字。 第一個(gè)參數(shù)指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,對于TCP/IP協(xié)議族,該參數(shù)置AF_INET; 第二個(gè)參數(shù)指定要創(chuàng)建的套接字類型,流套接字類型為SOCK_STREAM、數(shù)據(jù)報(bào)套接字類型為SOCK_DGRAM、 原始套接字SOCK_RAW(WinSock接口并不適用某種特定的協(xié)議去封裝它,而是由程序自行處理數(shù)據(jù)包以 及協(xié)議首部); 第三個(gè)參數(shù)指定應(yīng)用程序所使用的通信協(xié)議。(3).int sendto( SOCKET s, const char FAR *buf, int le
12、n, int flags, const struct sockaddr FAR *to, int tolen);函數(shù)說明:返回值:實(shí)際發(fā)送數(shù)據(jù)的長度。 parameter : s 套接字 buff 待發(fā)送數(shù)據(jù)的緩沖區(qū) size 緩沖區(qū)長度 Flags 調(diào)用方式標(biāo)志位, 一般為0, 改變Flags,將會改變Sendto發(fā)送的形式 addr (可選)指針,指向目的套接字的地址 len addr所指地址的長度(4)int recvfrom(SOCKET s, char FAR* buf, int len, int flags, struct sockaddr FAR *from, int FAR *
13、fromlen );函數(shù)說明:recvfrom( )用來接收遠(yuǎn)程主機(jī)經(jīng)指定的socket傳來的數(shù)據(jù),并把數(shù)據(jù)傳到由參數(shù)buf指向的內(nèi)存空間,參數(shù)len為可接收數(shù)據(jù)的最大長度.參數(shù)flags一般設(shè)0,其他數(shù)值定義參考recv().參數(shù)from用來指定欲傳送的網(wǎng)絡(luò)地址,結(jié)構(gòu)sockaddr請參考bind()函數(shù).參數(shù)fromlen為sockaddr的結(jié)構(gòu)長度.二程序的流程圖和源碼Ping程序的設(shè)計(jì)與實(shí)現(xiàn)大致可分為四個(gè)模塊(見圖1-1),分別是:初始化模塊、功能控制模塊、ping模塊、mian測試模塊。Ping程序的設(shè)計(jì)與實(shí)現(xiàn)初始化模塊功能控制模塊Ping模塊main測試模塊圖1-11.初始化模塊:
14、該模塊用于定義及初始化各個(gè)全局變量,為winsock加載winsock體。(見圖1-2)主要包括定義IP首部格式、定義ICMP首部格式、定義ICMP回應(yīng)請求、定義ICMP回應(yīng)答復(fù)。初始化模塊定義IP首部格式定義ICMP首部格式定義ICMP回應(yīng)請求定義ICMP回應(yīng)答復(fù)圖1-22.功能控制模塊:該模塊是被其他模塊調(diào)用,其功能包括計(jì)算校驗(yàn)和、發(fā)送回應(yīng)請求函數(shù)、接收應(yīng)答回復(fù)并進(jìn)行解析、等待回應(yīng)答復(fù)(主是要select模型)。(見圖1-3,1-4,1-5,1-6)計(jì)算校驗(yàn)和函數(shù)源碼:否 (將反饋的16位從高位移到低位)是(使用32位累加器,進(jìn)行16位的反饋計(jì)算)Checksum()開始定義初始化一些變量
15、Nleft1sum += *w+;nleft -= 2;Nleft=1是(補(bǔ)全奇數(shù)位)sum += u;sum = (sum 16) + (sum & 0xffff);sum += (sum 16);answer = sum;返回answer結(jié)束圖1-3是SendEchoRequest()開始定義初始化一些變量填充要發(fā)送的數(shù)據(jù)存儲發(fā)送的時(shí)間計(jì)算回應(yīng)請求的校驗(yàn)和發(fā)送回應(yīng)請求返回nRet調(diào)用發(fā)送錯誤函數(shù)結(jié)束圖1-4WaitForEchoReply ()開始定義初始化一些變量返回timeout結(jié)束是RecvEchoReply ()開始定義初始化一些變量接收應(yīng)答回復(fù)檢驗(yàn)接收結(jié)果返回應(yīng)答時(shí)間調(diào)用發(fā)送錯誤
16、函數(shù)結(jié)束圖1-6圖1-53.Ping模塊功能模塊:該模塊是本程序的核心模塊,調(diào)用其他模塊實(shí)現(xiàn)其功能,進(jìn)而實(shí)現(xiàn)Ping的功能。s否是是開始定義初始化各個(gè)局部變量判斷WSAGetLastError()是否調(diào)用成功否檢測目標(biāo)主機(jī)是否為NULL設(shè)置目標(biāo)主機(jī)的IP地址,開始ping發(fā)起四次ping測試發(fā)送ICMP回應(yīng)請求等待回復(fù)的數(shù)據(jù)接收回復(fù)計(jì)算花費(fèi)時(shí)間Loop是否為0 輸出平均次數(shù)輸出ping結(jié)果清除殘余結(jié)束4.main()函數(shù)模塊:向指定的域名或IP地址發(fā)送Echo 請求報(bào)文;根據(jù)響應(yīng)報(bào)文顯示出Ping的結(jié)果;程序僅支持-t選項(xiàng)即可。否開始WSAStartup() 是否成功截取后三位字符調(diào)用ping
17、()釋放資源加載失敗結(jié)束為了實(shí)現(xiàn)-t圖1-8三運(yùn)行操作及結(jié)果在VC中運(yùn)行程序后會出現(xiàn)如圖4.1所示,提示你輸入IP或網(wǎng)址;2、我們先輸入校園網(wǎng)機(jī)房主機(jī)命令,看能否ping通3.試著使用ping t命令,如下:4、再輸入外部網(wǎng)主機(jī)命令,看能否ping通,上圖為網(wǎng)絡(luò)ping不通的情形。源代碼源代碼如下:#include #include #include #include#pragma comment(lib, ws2_32.lib)/導(dǎo)入庫文件#define ICMP_ECHOREPLY 0 /ICMP回應(yīng)答復(fù)#define ICMP_ECHOREQ 8 /ICMP回應(yīng)請求#define REQ
18、_DATASIZE 32 /請求數(shù)據(jù)報(bào)大小#include /*/using namespace std;/定義IP首部格式typedef struct _IPHeader u_char VIHL; /版本和首部長度u_char ToS; /服務(wù)類型u_short TotalLen; /總長度u_short ID; /標(biāo)識號u_short Frag_Flags; /片偏移量u_char TTL; /生存時(shí)間u_char Protocol; /協(xié)議u_short Checksum; /首部校驗(yàn)和struct in_addr SrcIP; /源IP地址struct in_addr DestIP;
19、/目的地址IPHDR, *PIPHDR;/定義ICMP首部格式typedef struct _ICMPHeaderu_char Type; /類型u_char Code; /代碼u_short Checksum; /首部校驗(yàn)和u_short ID; /標(biāo)識u_short Seq; /序列號char Data; /數(shù)據(jù)ICMPHDR, *PICMPHDR; /定義ICMP回應(yīng)請求typedef struct _ECHOREQUESTICMPHDR icmpHdr;DWORD dwTime;char cDataREQ_DATASIZE;ECHOREQUEST, *PECHOREQUEST;/定義I
20、CMP回應(yīng)答復(fù)typedef struct _ECHOREPLYIPHDR ipHdr;ECHOREQUEST echoRequest;char cFiller256;ECHOREPLY, *PECHOREPLY;/*/計(jì)算校驗(yàn)和u_short checksum(u_short *buffer, int len)register int nleft = len;register u_short *w = buffer;register u_short answer;register int sum = 0;/使用32位累加器,進(jìn)行16位的反饋計(jì)算while ( nleft 1 )sum +=
21、*w+;nleft -= 2;/補(bǔ)全奇數(shù)位if ( nleft = 1 )u_short u = 0;*(u_char *)(&u) = *(u_char*)w;sum += u;/將反饋的16位從高位移到低位sum = (sum 16) + (sum & 0xffff);sum += (sum 16);answer = sum;return (answer);/*/發(fā)送回應(yīng)請求函數(shù)int SendEchoRequest(SOCKET s, struct sockaddr_in *lpstToAddr)static ECHOREQUEST echoReq;static nId = 1;stat
22、ic nSeq = 1;int nRet;/填充回應(yīng)請求消息echoReq.icmpHdr.Type = ICMP_ECHOREQ;echoReq.icmpHdr.Code = 0;echoReq.icmpHdr.Checksum = 0;echoReq.icmpHdr.ID = nId+;echoReq.icmpHdr.Seq = nSeq+;/填充要發(fā)送的數(shù)據(jù)for (nRet = 0; nRet h_addr); /設(shè)置目標(biāo)IPdestIP.sin_family = AF_INET; /地址規(guī)格destIP.sin_port = 0;/提示開始進(jìn)行PINGprintf(nPinging
23、%s %s with %d bytes of data:n,pstrHost,inet_ntoa(destIP.sin_addr),REQ_DATASIZE);/發(fā)起多次PING測試for (nLoop=0; nLoopmaximum)maximum=dwElapsed;if(dwElapsedminimum)minimum=dwElapsed;average+=dwElapsed;printf(nReply from %s: bytes = %d time = %ldms TTL = %d, inet_ntoa(srcIP.sin_addr),REQ_DATASIZE,dwElapsed,c
24、TTL);if(_kbhit() /* Use _getch to throw key away. */ if (c=_getch()=0x2) /crrl -b break; else Sleep(1000);printf(nn);printf(Ping statistics for %s:n,inet_ntoa(srcIP.sin_addr);printf( Packets: Sent = %d, Received = %d, Lost = %d (%.f% loss),n,sent,reveived,lost,(float)(lost*1.0/sent)*100);if(lost=0)p
25、rintf(Approximate round trip times in milli-seconds:n); printf( Minimum = %dms, Maximum = %dms, Average = %dmsn,minimum,maximum,average/sent);printf(nn);nRet = closesocket(rawSocket);if (nRet = SOCKET_ERROR)printf(closesocket() error:%dn, WSAGetLastError();/主程序void main()printf(Welcome to the Ping T
26、estn);while(1)WSADATA wsd;/檢測輸入的參數(shù)/初始化Winsockif (WSAStartup(MAKEWORD(1, 1), &wsd) != 0)/第一個(gè)函數(shù)說明 WSAStartup()printf(加載 Winsock 失敗!n);char opt1100;char *ptr=opt1;bool log=false;printf(Ping );cin.getline(opt1,100,n);/ping的地址 字符串if(strstr(opt1, -t)!=NULL)log=true;strncpy(ptr,opt1+0,strlen(opt1)-3);/把原字符
27、串的最后三位截取ptrstrlen(opt1)-2=0; /printf(%s, ptr);/開始PINGPing(ptr,log);/程序釋放 Winsock 資源WSACleanup();/*函數(shù)說明為了在應(yīng)用程序當(dāng)中調(diào)用任何一個(gè)Winsock API函數(shù),首先第一件事情就是必須通過WSAStartup函數(shù)完成對Winsock服務(wù)的初始化,因此需要調(diào)用WSAStartup函數(shù)。使用Socket的程序在使用Socket之前必須調(diào)用WSAStartup函數(shù)。該函數(shù)的第一個(gè)參數(shù)指明程序請求使用的Socket版本,其中高位字節(jié)指明副版本、低位字節(jié)指明主版本;操作系統(tǒng)利用第二個(gè)參數(shù)返回請求的Sock
28、et的版本信息。當(dāng)一個(gè)應(yīng)用程序調(diào)用WSAStartup函數(shù)時(shí),操作系統(tǒng)根據(jù)請求的Socket版本來搜索相應(yīng)的Socket庫,然后綁定找到的Socket庫到該應(yīng)用程序中。以后應(yīng)用程序就可以調(diào)用所請求的Socket庫中的其它Socket函數(shù)了。*/*函數(shù)說明SOCKET socket( int af, int type, int protocol ); 應(yīng)用程序調(diào)用socket函數(shù)來創(chuàng)建一個(gè)能夠進(jìn)行網(wǎng)絡(luò)通信的套接字。 第一個(gè)參數(shù)指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,對于TCP/IP協(xié)議族,該參數(shù)置AF_INET; 第二個(gè)參數(shù)指定要創(chuàng)建的套接字類型,流套接字類型為SOCK_STREAM、數(shù)據(jù)報(bào)套接字類
29、型為SOCK_DGRAM、 原始套接字SOCK_RAW(WinSock接口并不適用某種特定的協(xié)議去封裝它,而是由程序自行處理數(shù)據(jù)包以 及協(xié)議首部); 第三個(gè)參數(shù)指定應(yīng)用程序所使用的通信協(xié)議。心得體會通過仔細(xì)閱讀程序代碼,查找相關(guān)資料,我大概弄懂了程序的基本過程。程序通過發(fā)送一個(gè)ICMP回顯請求報(bào)文到目的地主機(jī),如果有IP選項(xiàng)途中的主機(jī)通過報(bào)文記錄各自的IP地址,目的地主機(jī)回發(fā)一個(gè)回顯應(yīng)答報(bào)文,然后發(fā)送主機(jī)通過解析回顯應(yīng)答報(bào)文,查看通過路由地址,并計(jì)算發(fā)送回收報(bào)文所用的傳送時(shí)間,以確定回顯報(bào)文是否超時(shí)。程序中很多算法值得我們借鑒,例如檢驗(yàn)和算法先把兩數(shù)通過取反相加,然后再次取反以防止上次取反數(shù)組溢出而出現(xiàn)錯誤。我們從中要學(xué)會代碼的重復(fù)使用,程序中usage(char *progname)反復(fù)使用來輸出信息,而不用每次輸出相關(guān)的信息的時(shí)候都需要重新寫實(shí)現(xiàn)代碼,這樣既節(jié)省程序編譯運(yùn)行所需的時(shí)間和內(nèi)存的開銷又易于以后程序的升級和添加其他功能,符合編程的發(fā)展趨勢。在
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版商業(yè)建筑外墻改造與拆除一體化服務(wù)合同3篇
- 2025版土地承包經(jīng)營權(quán)轉(zhuǎn)包合同(含農(nóng)業(yè)保險(xiǎn))2篇
- 二零二五版物流運(yùn)輸保證合同印花稅繳納規(guī)定2篇
- 2025年度木材產(chǎn)業(yè)鏈上下游合作發(fā)展合同4篇
- 2025年寬帶網(wǎng)絡(luò)安全協(xié)約
- 2025年壓瘡預(yù)防護(hù)理服務(wù)合同
- 2025年委托招標(biāo)合同
- 2025年卵巢囊腫手術(shù)協(xié)議
- 2025年度木材加工行業(yè)安全監(jiān)管合作協(xié)議3篇
- 2025年加盟運(yùn)營推廣合作協(xié)議
- 眼的解剖結(jié)構(gòu)與生理功能課件
- 小學(xué)網(wǎng)管的工作總結(jié)
- 2024年銀行考試-興業(yè)銀行筆試參考題庫含答案
- 泵站運(yùn)行管理現(xiàn)狀改善措施
- 2024屆武漢市部分學(xué)校中考一模數(shù)學(xué)試題含解析
- SYT 0447-2014《 埋地鋼制管道環(huán)氧煤瀝青防腐層技術(shù)標(biāo)準(zhǔn)》
- 浙教版七年級下冊科學(xué)全冊課件
- 弧度制及弧度制與角度制的換算
- 瓦楞紙箱計(jì)算公式測量方法
- DB32-T 4004-2021水質(zhì) 17種全氟化合物的測定 高效液相色譜串聯(lián)質(zhì)譜法-(高清現(xiàn)行)
- DB15T 2724-2022 羊糞污收集處理技術(shù)規(guī)范
評論
0/150
提交評論