付費下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、07 網(wǎng)絡(luò)工程本制作人:北-624 寢室負責(zé)人:賴文斌第四篇網(wǎng)絡(luò)編程第九章ping程序設(shè)計ping 命令是使用頻率極高的一個網(wǎng)絡(luò)測試命令,用以測試從一個主機到另一個主機間的網(wǎng)絡(luò)上否可達。 windows 自帶的 ping 命令具有強大的功能, 它有很多選項用于實現(xiàn)不同的測試目的。本章模仿 windows 的 ping 命令,用 c 語言實現(xiàn)了一個簡單的命令。本章著重講述 ping 命令的實現(xiàn)原理和 c 語言的網(wǎng)絡(luò)編程方法。讀者可以在本章的基礎(chǔ)上,對本章實現(xiàn)的 ping 命令進行擴展,開發(fā)出功能更強大、更完善的 ping 命令,并進一步掌握網(wǎng)絡(luò)編程的方法。9.1設(shè)計目的本章通過設(shè)計 Ping 程
2、序,講解 Ping 程序的實現(xiàn)原理,并初步講解了 c 語言網(wǎng)絡(luò)編程技術(shù)。本章涉及很多網(wǎng)絡(luò)編程函數(shù)和編程技巧。包括庫文件的導(dǎo)入;winsock 的初始化、注銷;socket的創(chuàng)建、關(guān)閉;設(shè)置 socket 選項;根據(jù)主機名獲取 IP 地址;從堆中分配一定數(shù)量的空間、釋放從堆中分配的空間;獲取當(dāng)前進程 ID 號;數(shù)據(jù)報的發(fā)送;數(shù)據(jù)報的接等。通過本程序的訓(xùn)練,使讀者對網(wǎng)絡(luò)編程有一定的了解,掌握 Ping 程序的設(shè)計方法,掌握網(wǎng)絡(luò)編程的方法和技巧,從而編寫出功能更強大的程序。9.2功能描述本章用 c 語言實現(xiàn)的 ping 命令,能用于測試一個主機到另一個主機間的聯(lián)通情況,程序還提供了幾個選項以實現(xiàn)不同
3、的功能。(1)實現(xiàn) ping 功能。程序能實現(xiàn)基本的 ping 操作,發(fā)送 ICMP 回顯請求報文,接收顯應(yīng)答報文。(2)能記錄路由。程序提供了“-r”選項,用以記錄從源主機到目的主機的路由。(3)能輸出指定條數(shù)的記錄。程序提供了“-n”選項,用以輸出指定條數(shù)的記錄。(4)能按照指定大小輸出每條記錄。程序提供了“datasize”選項,用以指定輸出的數(shù)據(jù)報的大小。(5)能輸出用戶幫助。程序提供了用戶幫助,顯示程序提供的選項以及選項格式等。9.3總體設(shè)計9.3.1 功能模塊設(shè)計f91.功能模塊圖本系統(tǒng)共有 4 個模塊, 分別是初始化模塊、 功能控制模塊、 數(shù)據(jù)控制模塊、 數(shù)據(jù)報解讀模塊和 pin
4、g測試模塊,如圖 9.1 所示。各模塊功能描述如下。Ping 程序設(shè)計圖 9.1 系統(tǒng)模塊圖( (1) )初始化模塊。改模塊用于初始化各個全局變量,為全局變量賦初始值;初始化,加載庫。(2)功能控制模塊。改模塊是被其它模塊調(diào)用,其功能包括獲取參數(shù)、計算校驗和填充數(shù)據(jù)報文、釋放占用資源和顯示用戶幫助。(3)數(shù)據(jù)報解讀模塊。改模塊用于解讀接收到的報文和選項。(4)測試模塊。改模塊是本程序的核心模塊,調(diào)用其他模塊實現(xiàn)其功能,主要是實現(xiàn)的功能。f91.系統(tǒng)流程圖系統(tǒng)執(zhí)行的流程圖 9.2 所示。程序首先調(diào)用 IniPing()函數(shù)初始化各全局變量,然后GetArgments()函數(shù)獲取用戶輸入的參數(shù),檢
5、查用戶輸入的參數(shù),如果參數(shù)不正確或者沒有輸入?yún)?shù),則顯示用戶幫助信息(Userhelp),并結(jié)束程序;如果參數(shù)正確,則對指定目的地執(zhí)行 Ping 命令,如果 Ping 通,則顯示 Ping 結(jié)果并釋放占用資源,如果沒有 Ping 通,則報告錯誤信息,并釋放占用資源。圖 9.2 系統(tǒng)流程圖f91.參數(shù)獲取(GetArgments()()函數(shù))流程圖獲取的參數(shù)包括“-r(記錄路由)、-n(記錄條數(shù)程序,任意的整數(shù))和 datasize(數(shù)據(jù)報大?。?。程序首先判斷每一個參數(shù)的第一字符,如果第一個字符是“-(短橫線),則認為是“-r”或者“-n”中的一個,然后作進一步判斷。如果該參數(shù)的第二個字符是數(shù)字
6、,則判斷該參數(shù)為記錄的條數(shù),如果該參數(shù)的第二個字符是r”,則判斷該參數(shù)為“-r”用于記錄路由;如果參數(shù)的第一個字符是數(shù)字,則認為參數(shù)是 IP 地址;或者 datasize,然后作進一步的判斷。如果該參數(shù)中不存在非數(shù)字的字符,則判斷該參數(shù)為 datasize;如果存在非數(shù)字的字符,則判斷該參數(shù)為 IP 地址;其他情況則判斷為主機名。參數(shù)獲取的流程如圖 9.3 所示。圖 9.3 參數(shù)獲取流程圖f91.ping()函數(shù)流程圖ping()函數(shù)是本程序的核心部分它調(diào)用其他模塊的函數(shù)來實現(xiàn),其主要步驟包括創(chuàng)建接字,設(shè)置路由選項(如果需要的話)、設(shè)置接收和發(fā)送超時值、名字解析(如果需要的話)、分配內(nèi)存、創(chuàng)建
7、 ICMP 報文、發(fā)送 ICMP 請求報文、接收 ICMP 應(yīng)答報文和解讀 ICMP 報文。其執(zhí)行流程如圖 9.4 所示。接收成功?圖 9.4Ping 函數(shù)流程圖9.3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計本程序定義了 3 個結(jié)構(gòu)體:-iphdr、-icmphdr、和-ipotionhdr,分別用于存放 IP 報頭信息、ICMP報頭信息和 IP 路由選項信息。.定義 IP 報頭結(jié)構(gòu)體Typedefstruct_iphdrUnsignedinth_len:4;Unsignedintversion:4;Unsignedchartos;Unsignedshorttotal_lenUnsignedshortident;Un
8、signedshortfrag_flags;Unsignedcharttl;Unsignedchorproto;Unsignedshortchecksum;UnsignedintsourceIP;UnsignedintdestIP;IpHeader;其中各字段表示意義如下。h-len:4:表示 IP 報頭長度,首部長度指的是首部占 32bit 字的數(shù)目,包括任何選項。由于它是一個 4bit 字段,因此首部最長為 60 個字節(jié),不包括任何選項的IP 報頭是 20 個字節(jié)。Version:4:表示 IP 的版本號,這里表示 Ipv4.。Top:表示服務(wù)的類型,可以表示最小時延,最大吞吐量,最高可靠
9、性和最小費用。TotalTen:整個 IP 數(shù)據(jù)報的總長度。Ident:唯一的標識符,標識主機發(fā)送的每一份數(shù)據(jù)報。Frag-flags:分段標志,表示過長的數(shù)據(jù)報是否要分段。Ttl:生存期,表示數(shù)據(jù)報可以經(jīng)過的最多路由器數(shù)。Proto:協(xié)議類型(TCP、UDP 等)。Checksum:校驗和。sourceIP:源 IP 地址。destIP:目的 IP 地址。.定義 ICMP 報頭結(jié)構(gòu)體TypedefstructTcmphdrBYTEi_type;BYTEi_code:USHORTi_cksum;USHORTi_id;USHORTi_seq;ULONGtimestamp;IcmpHeader;其
10、中各字段表示意義如下。I_tye:ICMP 報文類型。I_code:該類型中的代碼號,一種 ICMP 報文的類型號和該類型中的代碼號共同決定。、I_cksum:校驗和。I_seq:序列號,序列號從 0 開始,每發(fā)送一次新的回顯請求就加 1.Timestamp:時間。.定義 IP 選項結(jié)構(gòu)體Unsignedcharcode;Unsignedcharlen;Unsignedcharptr;Unsignedloangaddr9;IcmpHeader;其中各字段表示意義如下。Code:指明 IP 選項類型,對于路由記錄選項,它的值是 7。Typedefstruct_ipoptionhdrLen:選項頭
11、長度。Ptr:地址指針字段,是一個基于 1 的指針,指向存放下一個 IP 地址的位置。addr9:記錄的 Ip 地址列表,由于 IP 首部中選項的空間有限,所以可以記錄的 Ip 地址最多是 9 個。.33函數(shù)功能描述1)IntPing()函數(shù)原型:voidIntPing()IntPing()函數(shù)用于初始化 ping 所需的全局變量,為各個變量賦初始值。2)userHelp()函數(shù)原型:voiduserHelp()userHelp()函數(shù)用于顯示用戶幫助信息。當(dāng)程序檢查到參數(shù)錯誤或者沒有必要的參數(shù)(如主機 IP 地址或者主機名)時,則會調(diào)用此函數(shù)顯示幫助信息。3)GetArgments()函數(shù)原
12、型:voidGetArgments(intargc,char*argv)GetArgments()函數(shù)用于獲取用戶提交的參數(shù)。其中 argc 表示獲取的參數(shù)個數(shù),argv 用于存儲獲取的參數(shù),這兩個形參和主函數(shù)中的形參表示的意義一樣的。4)checkSum()函數(shù)原型:USHORTcheckSum(USHORT*buffer,intsize)checkSum()函數(shù)用于計算校驗和。計算過程是首先把數(shù)據(jù)報頭中的校驗和字段設(shè)置為 0,然后對首部中每個 16bit 進行二字段進制反碼求和(整個首部看成是由一串 16bit的字組成),結(jié)果存在校驗和字段中。其中 buffer 用于存放 ICMP 數(shù)據(jù),
13、size 表示 ICMP 報文大小。5)FillCMPData()函數(shù)原型:voidFillCMPData()FillCMPData()函數(shù)用于填充 ICMP 數(shù)據(jù)報中各個字段。其中 icmp_data 表示 ICMP 數(shù)據(jù),datasize 表示 ICMP 報文大小。6)reeRes()函數(shù)原型:voidreeRes()reeRes()函數(shù)用于釋放占用的資源,包括關(guān)閉初始化 socket和釋放分配的內(nèi)存等。7)DecodeIPOptions()函數(shù)原型:voidDecodeIPOptions()DecodeIPOptions()函數(shù)用于解讀 IP 選項, 從中讀出從源主機到目的主機經(jīng)過的路由
14、, 并輸出路由信息。socket 調(diào)用的函數(shù)的、關(guān)閉創(chuàng)建的Buf 表示存放接收到的 ICMP 報文的緩沖區(qū),bytes 表示接收到的字節(jié)數(shù)。8)DecodelICMPHeader()函數(shù)原型:voidDecodelICMPHeader(char*buf,intbytes,SOCKADDR_IN*from)DecodelICMPHeader()函數(shù)用于解讀 ICMP 報文信息。 Buf 表示存放接收到的 ICMP 報文的緩沖區(qū), bytes 表示接收到的字節(jié)數(shù), from表示發(fā)送 ICMP 回顯應(yīng)答的主機 IP 地址。9)PingTest()函數(shù)原型:voidPingTest(inttimeou
15、t)PingTest()函數(shù)用于進行 Ping 操作。其中 timeout 表示設(shè)定的發(fā)送超時值。9.4程序?qū)崿F(xiàn)9.1.4源碼分析.程序預(yù)處理/*導(dǎo)入庫文件*/#pragmacomment(lib,ws2_32.lib)/*加載頭文件*/#include#include#include#include#include/*定義常量*/*表示要記錄路由*/defineIP_RECORD_ROUTE0 x7/*默認數(shù)據(jù)報大小*/defineDEF_PACKET_SIZE32/*最大的 ICMP 數(shù)據(jù)報大小*/defineMAX_PACKET1024/*最大 IP 頭長度*/defineMAX_IP_
16、HDR_SIZE60/*ICMP 報文類型,回顯請求*/defineICMP_ECHO8/*ICMP 報文類型,回顯應(yīng)答*/defineICMP_ECHOREPLY0/*最小的 ICMP 數(shù)據(jù)報大小*/#defineICMP_MIN/*自定義函數(shù)原型*/voidInitPing();voidUserHelp();voidGetArgments(intargc,char*argv);USHORTCheckSum(USHORT*buffer,intsize);voidFillICMPData(char*icmp_data,intdatasize);voidFreeRes();voidDecodeI
17、POptions(char*buf,intbytes);voidDecodeICMPHeader(char*buf,intbytes,SOCKADDR_IN*from);voidPingTest(inttimeout);/*IP 報頭字段數(shù)據(jù)結(jié)構(gòu)*/typedefstruct_iphdrunsignedinth_len:4;unsignedintversion:4;unsignedchartos;unsignedshorttotal_len;unsignedshortident;unsignedshortfrag_flags;unsignedcharttl;unsignedcharproto;
18、unsignedshortchecksum;unsignedintsourceIP;unsignedintdestIP;IpHeader;/*ICMP 報頭字段數(shù)據(jù)結(jié)構(gòu)*/typedefstruct_icmphdrBYTEi_type;BYTEi_code;USHORTi_cksum;USHORTi_id;USHORTi_seq;ULONGtimestamp;IcmpHeader;/*IP 報頭長度*/*IP 的版本號*/*服務(wù)的類型*/*數(shù)據(jù)報總長度*/*惟一的標識符*/*分段標志*/*生存期*/*協(xié)議類型(TCP、UDP 等)*/*校驗和*/*源 IP 地址*/*目的 IP 地址*/*IC
19、MP 報文類型*/*該類型中白代碼號*/*校驗和*/*惟一的標識符*/*序列號*/*時間戳*/*IP 選項頭字段數(shù)據(jù)結(jié)構(gòu)*/typedefstruct_ipoptionhdr(unsignedcharcode;unsignedcharlen;unsignedcharptr;unsignedlongaddr9;IpOptionHeader;/*定義全局變量*/SOCKETm_socket;IpOptionHeaderIpOption;SOCKADDR_INDestAddr;SOCKADDR_INSourceAddr;char*icmp_data;char*recvbuf;USHORTseq_no
20、;char*lpdest;intdatasize;BOOLRecordFlag;doublePacketNum;BOOLSucessFlag;.初始化模塊/*初始化變量函數(shù)*/voidInitPing()(WSADATAwsaData;icmp_data=NULL;seq_no=0;recvbuf=NULL;RecordFlag=FALSE;lpdest=NULL;datasize=DEF_PACKET_SIZE;PacketNum=5;SucessFlag=FALSE;/*Winsock 初始化*/if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)/*
21、選項類型*/*選項頭長度*/*地址偏移長度*/*記錄的 IP 地址列表*/(/*如果初始化不成功則報錯,GetLastError()返回發(fā)生的錯誤信息*/printf(WSAStartup()failed:%dn,GetLastError();return;m_socket=INVALID_SOCKET;.功能控制模塊/*顯示信息函數(shù)*/voidUserHelp()(printf(UserHelp:ping-rdatasizen);printf(-rrecordrouten);printf(-nrecordamountn);printf(hostremotemachinetopingn);pr
22、intf(datasizecanbeupto1KBn);ExitProcess(-1);/*獲取 ping 選項函數(shù)*/voidGetArgments(intargc,char*argv)(inti;intj;intexp;intlen;intm;/*如果沒有指定目的地地址和任何選項*/if(argc=1)(printf(nPleasespecifythedestinationIPaddressandthepingoptionfollow!n);UserHelp();for(i=1;i=1;j-,exp+)/*根據(jù) argvij中的 ASCII 值計算要獲取的記錄條數(shù)PacketNum+=(d
23、ouble)(argvij-48)*pow(10,exp);else(switch(tolower(argvi1)(/*選項指示要獲取路由信息*/caser:RecordFlag=TRUE;break;/*沒有按要求提供選項*/default:UserHelp();break;/*參數(shù)是數(shù)據(jù)報大小或者 IP 地址*/elseif(isdigit(argvi0)(for(m=1;m1)(cksum+=*buffer+;size-=sizeof(USHORT);)if(size)(cksum+=*(UCHAR*)buffer;)/*對每個 16bit 進行二進制反碼求和*/cksum=(cksum
24、16)+(cksum&0 xffff);cksum+=(cksum16);return(USHORT)(cksum);/*填充 ICMP 數(shù)據(jù)報字段函數(shù)*/voidFillICMPData(char*icmp_data,intdatasize)(IcmpHeader*icmp_hdr=NULL;icmp_hdr=(IcmpHeader*)icmp_data;/*ICMP 報文類型設(shè)置為回顯請求*/icmp_hdr-i_type=ICMP_ECHO;icmp_hdr-i_code=0;/*獲取當(dāng)前進程 IP 作為標識符*/icmp_hdr-i_id=(USHORT)GetCurrentP
25、rocessId();icmp_hdr-i_cksum=0;icmp_hdr-i_seq=0;datapart=icmp_data+sizeof(IcmpHeader);/*以數(shù)字 0 填充剩余空間*/memset(datapart,0,datasize-sizeof(IcmpHeader);/*釋放資源函數(shù)*/voidFreeRes()(/*關(guān)閉創(chuàng)建的套接字*/if(m_socket!=INVALID_SOCKET)closesocket(m_socket);/*釋放分配的內(nèi)存*/char*datapart=NULL;HeapFree(GetProcessHeap(),0,recvbuf);
26、HeapFree(GetProcessHeap(),0,icmp_data);/*注銷 WSAStartup()調(diào)用*/WSACleanup();return;.數(shù)據(jù)報解讀模塊/*解讀 IP 選項頭函數(shù)*/voidDecodeIPOptions(char*buf,intbytes)(IpOptionHeader*ipopt=NULL;IN_ADDRinaddr;inti;HOSTENT*host=NULL;/*獲取路由信息白地址入口*/ipopt=(IpOptionHeader*)(buf+20);printf(RR:);for(i=0;iptr/4)-1;i+)(inaddr.S_un.S_
27、addr=ipopt-addri;if(i!=0)printf();/*根據(jù) IP 地址獲取主機名*/host=gethostbyaddr(char*)&inaddr.S_un.S_addr,sizeof(inaddr.S_un.S_addr),AF_INET);/*如果獲取到了主機名,則輸出主機名*/if(host)printf(%-15s)%sn”,inet_ntoa(inaddr),host-h_name);/*否則輸出 IP 地址*/elseprintf(%-15s)n,inet_ntoa(inaddr);)return;)/*解讀 ICMP 報頭函數(shù)*/voidDecodeI
28、CMPHeader(char*buf,intbytes,SOCKADDR_IN*from)IpHeader*iphdr=NULL;IcmpHeader*icmphdr=NULL;unsignedshortiphdrlen;DWORDtick;staticinticmpcount=0;iphdr=(IpHeader*)buf;/*計算 IP 報頭的長度*/iphdrlen=iphdr-h_len*4;tick=GetTickCount();/*如果 IP 報頭的長度為最大長度( (基本長度是 20 字節(jié)),則認為有 IP 選項,需要解讀 IP 選項*/if(iphdrlen=MAX_IP_HDR
29、_SIZE)&(!icmpcount)/*解讀 IP 選項,即路由信息*/DecodeIPOptions(buf,bytes);/*如果讀取的數(shù)據(jù)太小*/if(bytessin_addr);)icmphdr=(IcmpHeader*)(buf+iphdrlen);/*如果收到的不是回顯應(yīng)答報文則報錯*/if(icmphdr-i_type!=ICMP_ECHOREPLY)printf(nonechotype%drecvdn,icmphdr-i_type);return;)/*核實收到的 ID 號和發(fā)送的是否一致*/if(icmphdr-i_id!=(USHORT)GetCurrentPr
30、ocessId()printf(someoneelsespacket!n);return;)SucessFlag=TRUE;/*輸出記錄信息*/printf(%dbytesfrom%s:,bytes,inet_ntoa(from-sin_addr);printf(icmp_seq=%d.,icmphdr-i_seq);printf(time:%dms,tick-icmphdr-timestamp);printf(n);icmpcount+;return;.Ping 測試模塊/*ping 函數(shù)*/voidPingTest(inttimeout)intret;intreadNum;intfroml
31、en;structhostent*hp=NULL;/*創(chuàng)建原始套接字,該套接字用于 ICMP 協(xié)議*/m_socket=WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,WSA_FLAG_OVERLAPPED);/*如果套接字創(chuàng)建不成功*/if(m_socket=INVALID_SOCKET)printf(WSASocket()failed:%dn,WSAGetLastError();return;/*若要求記錄路由選項*/if(RecordFlag)/*IP 選項每個字段用 0 初始化*/ZeroMemory(&IpOption,sizeo
32、f(IpOption);/*為每個 ICMP 包設(shè)置路由選項*/IpOption.code=IP_RECORD_ROUTE;IpOption.ptr=4;IpOption.len=39;ret=setsockopt(m_socket,IPPROTO_IP,IP_OPTIONS,(char*)&IpOption,sizeof(IpOption);if(ret=SOCKET_ERROR)printf(setsockopt(IP_OPTIONS)failed:%dn”,WSAGetLastError();/*設(shè)置接收的超時值*/readNum=setsockopt(m_socket,SOL_
33、SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout);if(readNum=SOCKET_ERROR)printf(setsockopt(SO_RCVTIMEO)failed:%dn,WSAGetLastError();return;/*設(shè)置發(fā)送的超時值*/timeout=1000;readNum=setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout);if(readNum=SOCKET_ERROR)printf(setsockopt(S
34、O_SNDTIMEO)failed:%dn,WSAGetLastError();return;/*用 0 初始化目的地地址*/memset(&DestAddr,0,sizeof(DestAddr);/*設(shè)置地址族,這里表示使用 IP 地址族*/DestAddr.sin_family=AF_INET;if(DestAddr.sin_addr.s_addr=inet_addr(lpdest)=INADDR_NONE)/*名字解析,根據(jù)主機名獲取 IP 地址*/if(hp=gethostbyname(lpdest)!=NULL)/*將獲取到的 IP 值賦給目的地地址中的相應(yīng)字段*/memcp
35、y(&(DestAddr.sin_addr),hp-h_addr,hp-h_length);/*將獲取到的地址族值賦給目的地地址中的相應(yīng)字段*/DestAddr.sin_family=hp-h_addrtype;printf(DestAddr.sin_addr=%sn,inet_ntoa(DestAddr.sin_addr);/*獲取不成功*/elseprintf(gethostbyname()failed:%dn,WSAGetLastError();return;/*數(shù)據(jù)報文大小需要包含 ICMP 報頭*/datasize+=sizeof(IcmpHeader);/*根據(jù)默認堆句柄,
36、從堆中分配 MAX_PACKET 內(nèi)存塊,新分配內(nèi)存的內(nèi)容將被初始化為 0*/HEAP_ZERO_MEMORY,MAX_PACKET);HEAP_ZERO_MEMORY,MAX_PACKET);/*如果分配內(nèi)存不成功*/if(!icmp_data)(printf(HeapA110c()failed:%dn,GetLastError();return;/*創(chuàng)建 ICMP 報文*/memset(icmp_data,0,MAX_PACKET);Fi11ICMPData(icmp_data,datasize);whi1e(1)(staticintnCount=0;intwriteNum;/*超過指定的記錄條數(shù)則退出*/if(nCount+=PacketNum)break;/*計算校驗和前要把校驗和字段設(shè)置為 0*/(IcmpHea
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 46810-2025電力北斗時間同步系統(tǒng)安全防護技術(shù)要求
- 養(yǎng)老院醫(yī)療保健服務(wù)管理制度
- 企業(yè)員工獎懲與激勵制度
- 會議信息發(fā)布與宣傳推廣制度
- 2026年房地產(chǎn)經(jīng)紀人從業(yè)資格題庫與答案
- 2026年營養(yǎng)師專業(yè)能力與知識考試題集
- 2026年移動支付與金融科技產(chǎn)品實操試題
- 2026年財務(wù)管理高級筆試模擬卷
- 2026年軟件測試專家知識技能水平認證題目
- 2026年新版原代細胞合同
- 2026 年初中英語《狀語從句》專項練習(xí)與答案 (100 題)
- 2026年遼寧省盤錦市高職單招語文真題及參考答案
- 農(nóng)投集團安全生產(chǎn)制度
- 近五年貴州中考物理真題及答案2025
- 2025年黑龍江省大慶市中考數(shù)學(xué)試卷
- 第20課 《美麗的小興安嶺》 三年級語文上冊同步課件(統(tǒng)編版)
- 糖尿病基礎(chǔ)知識培訓(xùn)2
- 研學(xué)旅行概論第六章
- GB/T 22176-2023二甲戊靈乳油
- 根據(jù)信用證制作商業(yè)發(fā)票、裝箱單、裝船通知
- GB/T 28046.4-2011道路車輛電氣及電子設(shè)備的環(huán)境條件和試驗第4部分:氣候負荷
評論
0/150
提交評論