版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第5講網(wǎng)絡(luò)安全編程講網(wǎng)絡(luò)安全編程2 2基于基于TCPTCP的的socketsocket編程編程服務(wù)器端程序:服務(wù)器端程序:1、創(chuàng)建套接字(socket);2、將套接字綁定到一個本地地址和端口上(bind);3、將套接字設(shè)為監(jiān)聽模式,準(zhǔn)備接收客戶請求(listen);4、等待客戶請求到來;當(dāng)請求到來后,接受連接請求,返回一個新的對應(yīng)于此次連接的套接字(accept);5、用返回的套接字和客戶端進(jìn)行通信(send/recv);6、返回,等待另一客戶請求;7、關(guān)閉套接字。3 3基于基于TCPTCP的的socketsocket編程編程客戶端程序:客戶端程序:1、創(chuàng)建套接字(socket);2、向服務(wù)
2、器發(fā)出連接請求(connect);3、和服務(wù)器端進(jìn)行通信(send/recv);4、關(guān)閉套接字。4 4基于基于C /SC /S模型的時序圖模型的時序圖5 5基于基于UDPUDP的的socketsocket編程編程服務(wù)器端(接收端)程序:服務(wù)器端(接收端)程序:1、創(chuàng)建套接字(socket);2、將套接字綁定到一個本地地址和端口上(bind);3、等待接收數(shù)據(jù)(recvfrom);4、關(guān)閉套接字。6 6基于基于UDPUDP的的socketsocket編程編程客戶端(發(fā)送端)程序:客戶端(發(fā)送端)程序:1、創(chuàng)建套接字(socket);2、向服務(wù)器發(fā)送數(shù)據(jù)(sendto);3、關(guān)閉套接字。7 7套接
3、字系統(tǒng)調(diào)用套接字系統(tǒng)調(diào)用創(chuàng)建套接字創(chuàng)建套接字socket( )指定本地地址指定本地地址bind( )建立套接字連接建立套接字連接connect( )接收連接請求接收連接請求listen( )和accept( )發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù)write( )、writev( )、send( )與 sendto( )、sendmsg( )接收數(shù)據(jù)接收數(shù)據(jù)read( )、readv( )、recv( )和recvfrom( )、recvmsg( )其他系統(tǒng)調(diào)用其他系統(tǒng)調(diào)用gethostbyname( )、getservbyname( )8 8WSAStartup( )WSAStartup( )函數(shù)說明函數(shù)說明in
4、t int WSAStartupWSAStartup( WORD ( WORD wVersionRequested, , LPWSADATA LPWSADATA lpWSAData ); );wVersionRequestedwVersionRequested:準(zhǔn)備加載的Winsock庫的版本。高位字節(jié)指定所需要的Winsock庫的副版本,而低位字節(jié)則是主版本??捎肕AKEWORDMAKEWORD(x,y)(其中,x是高位字節(jié),y是低位字節(jié))方便地獲得wVersionRequested的正確值。lpWSADatalpWSAData:指向WSADATA結(jié)構(gòu)的指針,WSAStartup用其加載的庫
5、版本有關(guān)的信息填在此結(jié)構(gòu)中。9 9typedef struct WSAData WORD wVersion; WORD wHighVersion; char szDescriptionWSADESCRIPTION_LEN+1; char szSystemStatusWSASYS_STATUS_LEN+1; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; WSADATA, *LPWSADATA; WSADATAWSADATA結(jié)構(gòu)結(jié)構(gòu)1010wVersionwVersion:設(shè)成要使用的W
6、insock版本wHighVersionwHighVersion :現(xiàn)有的Winsock庫的最高版本。szDescriptionszDescription和szSystemStatusszSystemStatus:由特定的Winsock實(shí)施方案設(shè)定,事實(shí)上沒有用。iMaxSocketsiMaxSockets:最多可打開多少套接字(建議不使用)iMaxUdpDgiMaxUdpDg:數(shù)據(jù)報的最大長度(建議不使用) (數(shù)據(jù)報的最大長度應(yīng)該通過WSAEnumProtocols來查詢協(xié)議信息。同時最多可打開套接字的數(shù)目不是固定的,與可用物理內(nèi)存的多少有關(guān)。lpVendorInfolpVendorInfo
7、:廠商信息預(yù)留WSADATAWSADATA結(jié)構(gòu)結(jié)構(gòu)1111如果WinSock.dll或底層網(wǎng)絡(luò)子系統(tǒng)沒有被正確初始化或沒有被找到,WSAStartup將返回WSASYSNOTREADY;此函數(shù)允許協(xié)商WinSock版本:若請求的版本等于或高于DLL所支持的最低版本,WSAData的wVersion所支持的最高版本與請求版本中較小的那個。如果請求的版本低于DLL所支持的最低版本,將返回WSAVERNOTSUPPORTED。成功調(diào)用返回一個成功調(diào)用返回一個0 0;在最后都對應(yīng)一個WSACleanUp以便釋放為該應(yīng)用程序分配的資源。 WSAStartup( )WSAStartup( )函數(shù)說明函數(shù)說
8、明1212函數(shù)函數(shù)SOCKET( )SOCKET( )說明說明SOCKET ( int afaf, int typetype, int protocolprotocol );AfAf:指定地址族,對于TCP/IP只能是AF_INET;TypeType:Socket類型,對于V1.1 ,只支持SOCK_STREAM及SOCK_DGRAM;ProtocolProtocol:與特定的地址家族相關(guān)的協(xié)議。如果指定為0,系統(tǒng)自動選擇合適的協(xié)議(推薦使用)函數(shù)調(diào)用成功,將返回一個新的SOCKET類型的套接字描述符如果調(diào)用失敗,返回INVALID_SOCKET。錯誤信息可以通過WSAGetLastError
9、函數(shù)返回。1313bind( )bind( )函數(shù)說明函數(shù)說明int bindbind( SOCKET s, const struct sockaddr FAR *name, int namelen );s s:指定要綁定的套接字;namename:指定該套接字的本地地址信息; 它是指向sockaddrsockaddr結(jié)構(gòu)的指針變量,該地址結(jié)構(gòu)是為所有的地址家族準(zhǔn)備的,與所使用的網(wǎng)絡(luò)協(xié)議有關(guān);namelennamelen:指定該地址結(jié)構(gòu)的長度。1414bind( )bind( )函數(shù)說明函數(shù)說明struct u_short sa_family; char sa_data14; ; sa_fam
10、ily:指定該地址族,在這里必須設(shè)為AF_INET;sa_data:僅僅表示要求一塊內(nèi)存分配區(qū),該區(qū)域中指定與協(xié)議相關(guān)的具體地址信息。對于不同的協(xié)議家族,用不同的結(jié)構(gòu)來替換sockaddr。除了sa_family外,sockaddr是按網(wǎng)絡(luò)字節(jié)順序表示的。在TCP/IP中,用sockaddr_in結(jié)構(gòu)替換sockaddr,以方便我們填寫地址信息。 1515struct short ; unsigned short ; struct in_addr ; char sin_zero8; ;:表示地址族,對于IP地址是AF_INET;:將要分配給套接字的端口;:主機(jī)IP地址;:只是一個填充數(shù),以使s
11、ockaddr_in結(jié)構(gòu)和sockaddr結(jié)構(gòu)的長度一樣。1616如果函數(shù)調(diào)用成功,返回0;若失敗返回SOCKET_ERROR。錯誤信息可以通過WSAGetLastError函數(shù)返回。 1 1、一般將IP地址指定為INADDR_ANYINADDR_ANY,允許套接字向任何分配給本地機(jī)器的IP地址發(fā)送或接收數(shù)據(jù)。 2 2、可用inet_addr( 6 ) 指定實(shí)際IP地址;inet_addr( )inet_addr( ) 返回一個適合分配給S_addr的u_long類型的數(shù)值inet_ntoa( )inet_ntoa( ) 完成相反的轉(zhuǎn)換,接受一個in_addr結(jié)構(gòu)體類型的
12、參數(shù)并返回一個以點(diǎn)分十進(jìn)制格式表示的IP地址字符串。bind( )bind( )函數(shù)說明函數(shù)說明1717面向連接的服務(wù)器進(jìn)程通過listen( )和accept( )兩個函數(shù)來接收并處理客戶進(jìn)程的連接請求。1isten( )是將指定的套接字設(shè)為監(jiān)聽狀態(tài)。int listen(SOCKET sockidlisten(SOCKET sockid,int backlog);int backlog);sockidsockid:套接字描述符(即前面創(chuàng)建的套接字);backlogbacklog:等待隊(duì)列的最大長度(注:并非在一個端口可同時連接的數(shù)目!)1818accept() 用于服務(wù)器進(jìn)程接收客戶進(jìn)程發(fā)
13、送的連接請求newsock=accept(newsock=accept(sockidsockid,clientaddrclientaddr,addrlenaddrlen) );sockidsockid:套接字描述符(前面已經(jīng)設(shè)為監(jiān)聽);clientaddrclientaddr:客戶的地址信息(同bind函數(shù));addrlenaddrlen:客戶的地址信息的長度。該函數(shù)調(diào)用成功后會返回一個新的套接字。1919clientaddrclientaddr:表示指向客戶套接字地址結(jié)構(gòu)的指針。clientaddr指向一個初始值為空的地址結(jié)構(gòu),當(dāng)accept()調(diào)用返回后,客戶進(jìn)程的套接字地址被填入該地址結(jié)
14、構(gòu)中。addrlenaddrlen的初始值為0,當(dāng)accept()調(diào)用返回后,保存了客戶進(jìn)程套接字地址的長度。當(dāng)accept()調(diào)用成功返回后,服務(wù)器進(jìn)程將在sockid指定的套接字上等待接收客戶進(jìn)程的連接請求,該連接請求是客戶進(jìn)程通過connect()系統(tǒng)調(diào)用發(fā)出的。2020accept( )調(diào)用成功后,將請求連接的客戶進(jìn)程的套接字地址填入clientaddrclientaddr、地址長度填入addrlenaddrlen,還將返回一個新的套接字號newsocknewsock;newsock用于服務(wù)器處理并發(fā)請求,對應(yīng)于一個從服務(wù)器。并利用新的套接字號與客戶進(jìn)程通信(舉例:10086);而主服
15、務(wù)器進(jìn)程繼續(xù)在原來的套接字(套接字號為sockid)上接收其他客戶進(jìn)程的連接請求;當(dāng)newsock的值小于0時,表明accept()調(diào)用出錯。2121int send(sockidint send(sockid,buffbuff,bufflenbufflen,flags)flags);可控緩沖發(fā)可控緩沖發(fā)送送:表示本地套接字號;:表示指向發(fā)送緩沖區(qū)的指針;:表示發(fā)送緩沖區(qū)大?。唬罕硎緜鬏斂刂茦?biāo)志,一般設(shè)為0。int recv(sockidint recv(sockid,buffbuff,bufflenbufflen,flags);flags);2222int sendto(sockidint
16、sendto(sockid,buffbuff,bufflenbufflen,flagsflags,dstaddrdstaddr,dstaddrlen);dstaddrlen); 緩沖無連接發(fā)送sockid、buff、bufflen、flags參數(shù)意義同前;dstaddr:表示指向信宿套接字地址的指針;dstaddrlen:表示信宿套接字地址長度。int recvfromint recvfrom(sockidsockid,buffbuff,bufflenbufflen,flagsflags,dstaddrdstaddr,dstaddrlendstaddrlen);緩沖無連接接收);緩沖無連接接收
17、23231、getservbyname( ):獲取Internet上各種標(biāo)準(zhǔn)服務(wù)器的端口號;2、gethostbyname( ):獲取服務(wù)器的IP地址;3、gethostname( ):獲取服務(wù)器的主機(jī)名;4、htons( ):把主機(jī)字節(jié)(2B)順序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序;5、htonl( ):把主機(jī)字節(jié)(4B)順序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序;6、ntohs( ):把網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)換成主機(jī)字節(jié)(2B)順序;h host ost toto n network etwork s shorthorthtonshtons! !2424struct hostent char FAR * h_name; /主機(jī)名 c
18、har FAR * FAR * h_aliases; /主機(jī)別名 short h_addrtype; /地址類型 short h_length; /地址長度 char FAR * FAR * h_addr_list; /地址列表指針;2525SocketSocket編程編程獲取獲取IPIP地址地址#include #include void CheckIP(void) /用于獲取本機(jī)IP地址 WORD wVersionRequested;/存放Winsock版本的值 WSADATA wsaData; char name255;/用于存放主機(jī)名 PHOSTENT hostinfo; wVersi
19、onRequested = MAKEWORD( 2, 2 ); /獲取Winsock的版本,用于加載Winsock庫 if ( WSAStartup( wVersionRequested, &wsaData ) = 0 ) /加載Winsock庫,如果返回值為0說明加載成功 if( gethostname (name, sizeof(name) = 0) /判斷是否成功的將本地主機(jī)名存放入由name參數(shù)指定的緩沖區(qū)中2626SocketSocket編程編程獲取獲取IPIP地址地址 if(hostinfo = gethostbyname(name) != NULL) /如果獲得主機(jī)名成功
20、的話,調(diào)用inet_ntoa()函數(shù)取得IP地址 LPCSTR ip = inet_ntoa (*(struct in_addr *)*hostinfo-h_addr_list); printf(本機(jī)的IP地址是:%sn,ip);/輸出IP地址 printf(本機(jī)的名稱是:%sn,name); WSACleanup( ); /卸載Winsock庫,并釋放所有資源 int main()CheckIP();/調(diào)用CheckIP()函數(shù)獲得并輸出IP地址return 0;ws2_32.lib示例示例62727基于基于TCPTCP的聊天程序編程的聊天程序編程 服務(wù)器端:服務(wù)器端:1、調(diào)用WSASTAR
21、TUP2、建立SOCKET3、用bind()綁定SOCKET4、使服務(wù)器處于監(jiān)聽listen()5、接受客戶端請求accept()6、用新的SOCKET發(fā)送數(shù)據(jù)send()7、用recv()接收數(shù)據(jù)8、不需要時調(diào)用WSACLEANUP 客戶端:客戶端:1、建立SOCKET2、用connect()發(fā)出請求3、用send()發(fā)送數(shù)據(jù)4、用recv()接收數(shù)據(jù)示例示例7示例示例82828注冊表在計算機(jī)中由鍵名和鍵值組成,注冊表中存儲了Window操作系統(tǒng)的所有配置。值的名稱值的名稱值無名稱值無名稱2929注冊表編程注冊表編程1 1、創(chuàng)建注冊表鍵、創(chuàng)建注冊表鍵LONG RegCreateKeyRegC
22、reateKey ( HKEY hKey, / 主鍵名稱 LPCTSTR lpSubKey, / 子鍵名稱或路徑 PHKEY phkResult, / 指向創(chuàng)建表項(xiàng)的句柄 );/ 此句柄是后面操作的依據(jù),比如用RegCloseKey( )關(guān)閉注冊表項(xiàng)2 2、開注冊表鍵、開注冊表鍵LONG RegOpenKeyRegOpenKey ( HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult);/ 各參數(shù)同上3030HKEY_CLASSES_ROOTHKEY_CURRENT_CONFIGHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY
23、_USERSWindows NT: HKEY_PERFORMANCE_DATA Windows 95 and Windows 98: HKEY_DYN_DATA 3131注冊表編程注冊表編程3 3、寫入注冊表、寫入注冊表(條目名稱為默認(rèn)或值為字符串時條目名稱為默認(rèn)或值為字符串時)LONG RegSetValueRegSetValue( HKEY , / 已打開的鍵的句柄 LPCTSTR, / 若為NULL,則條目名為默認(rèn)值 DWORD , / 變量的類型,必須是REG_SZ LPCTSTR , / 變量數(shù)據(jù)的地址,用于存儲內(nèi)容 DWORD / 變量的長度 ); 返回值:不成功返回非0,成功返回
24、ERROR_SUCCESS 3232注冊表編程注冊表編程4 4、從注冊表讀數(shù)據(jù)(、從注冊表讀數(shù)據(jù)(條目名稱為默認(rèn)或值為字符串時)條目名稱為默認(rèn)或值為字符串時)LONG RegQueryValue RegQueryValue ( HKEY , / 已打開的鍵的句柄 LPCTSTR, / 一般為NULL LPCTSTR , / 指向存儲變量內(nèi)容數(shù)據(jù)的指針 PLONG / 變量的長度 ); 返回值:不成功返回非0,成功返回ERROR_SUCCESS 3333舉例1:寫注冊表#include #include void main() HKEY hKey1; RegCreateKey(HKEY_LOCA
25、L_MACHINE, SOFTWAREMicrosoftHacker, &hKey1); /創(chuàng)建注冊表項(xiàng) RegSetValue(hKey1,NULL,REG_SZ,xiexin,strlen(xiexin); RegCloseKey(hKey1);示例示例93434舉例2:讀注冊表#include #include void main() LONG lValue; RegQueryValue(HKEY_LOCAL_MACHINE, SOFTWAREMicrosoftHacker, NULL,&lValue); /讀取注冊表的鍵值,先獲取長度,放入lValue char *pB
26、uf=new charlValue; RegQueryValue(HKEY_LOCAL_MACHINE, SOFTWAREMicrosoftHacker, pBuf,&lValue); printf(Value is %sn,pBuf);示例示例103535注冊表編程注冊表編程5 5、寫入注冊表、寫入注冊表LONG RegSetValueExRegSetValueEx( HKEY , / 已打開的鍵的句柄 LPCTSTR, / 要查詢值的名稱,若為NULL,則查詢該鍵下的默認(rèn)值或未命名值的類型與數(shù)據(jù) DWORD , / 保留,必須為0 DWORD , / 變量的類型,如REG_SZ或
27、REG_DWORD CONST BYTE *, / 變量數(shù)據(jù)的地址,用于存儲內(nèi)容 DWORD / 變量的長度 ); 返回值:不成功返回非0,成功返回ERROR_SUCCESS 3636注冊表編程注冊表編程6 6、從注冊表讀數(shù)據(jù)、從注冊表讀數(shù)據(jù)LONG RegQueryValueExRegQueryValueEx( HKEY , / 已打開的鍵的句柄 LPCTSTR, / 要查詢值的名稱,若為NULL,則查詢該鍵下的默認(rèn)值或未命名值的類型與數(shù)據(jù) LPDWORD , / 保留,必須為0 LPDWORD , / 變量的類型 LPBYTE , / 變量數(shù)據(jù)的地址,用于存儲內(nèi)容 LPDWORD / 變量
28、的長度 ); 返回值:不成功返回非0,成功返回ERROR_SUCCESS 3737舉例3:寫注冊表#include #include void main() HKEY hKey1; DWORD dwAge=30;RegCreateKey(HKEY_LOCAL_MACHINE, SOFTWAREMicrosoftHacker, &hKey1); /創(chuàng)建注冊表項(xiàng) RegSetValueEx(hKey1,Age,0,REG_DWORD, (CONST BYTE *) &dwAge,sizeof(dwAge); RegCloseKey(hKey1);如果讀寫的數(shù)據(jù)不是字符串型的(如整形
29、),或者該值本身有名稱,則要用帶Ex的擴(kuò)展函數(shù)示例示例113838舉例4:讀注冊表#include #include void main() HKEY hKey1; RegOpenKey(HKEY_LOCAL_MACHINE, SOFTWAREMicrosoftHacker, &hKey1); /打開注冊表項(xiàng) DWORD dwType,dwValue,dwAge; RegQueryValueEx(hKey1,Age,0,&dwType,(LPBYTE) &dwAge, &dwValue);/讀取后放入dwValue中printf(Age is %dn,dwAge
30、); RegCloseKey(hKey1);示例示例123939判斷是否中了判斷是否中了“冰河冰河” 中了“冰河”的計算機(jī),其注冊表中將擴(kuò)展名為txttxt的文件的打開方式。正常時是在HKEY_CLASSES_ROOT主鍵下的“txtfileshellopencommand”中有如下關(guān)聯(lián):4040判斷是否中了“冰河”#include #include int main()HKEY hkey;LPCTSTR lpSubKey=txtfileshellopencommand; LPCTSTR dest=%SystemRoot%system32NOTEPAD.EXE %1;LONG ret0=Reg
31、OpenKeyEx(HKEY_CLASSES_ROOT,lpSubKey, 0,KEY_READ,&hkey);if(ERROR_SUCCESS!=ret0)MessageBox(NULL,Open Failure,Error,MB_OK);return 0;4141判斷是否中了“冰河” LPBYTE lpData=new BYTE80; DWORD lpType=REG_EXPAND_SZ; DWORD lpcbData=80; LONGret1=RegQueryValueEx(hkey,NULL,NULL, &lpType,lpData,&lpcbData); if
32、(ERROR_SUCCESS!=ret1) MessageBox(NULL,read Failure,Error,MB_OK); return 0; if(strcmp(const char*)lpData,dest)=0) MessageBox(NULL,No IceRiver,Safety,MB_OK); else MessageBox(NULL,Maybe IceRiver,Warm,MB_OK); return 1;/main function4242舉例:更改登錄用戶名舉例:更改登錄用戶名 當(dāng)用戶登錄系統(tǒng)以后,注冊表中就會自動記下用戶名,下次登錄時再把登錄名顯示出來,當(dāng)非法入侵計算機(jī)
33、以后,同樣會留下非法登錄的用戶名,所以需要將用戶名修改會原來的值.它在HKEY_LOCAL_MACHINE主鍵下的SOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon鍵名:DefaultUserName;類型:REG_SZ;鍵值:Administrator4343更改系統(tǒng)登錄用戶 HKEY hKey1; LPCTSTR lpSubKey= SOFTWAREMicrosoftWindows NT CurrentVersionWinlogon ; RegO
34、penKeyEx ( HKEY_LOCAL_MACHINE, lpSubKey,0, KEY_WRITE, &hKey1); RegSetValueEx ( hKey1, DefaultUserName, 0, REG_SZ, (byte*)Hacker_sixage, 20); 4444文件系統(tǒng)編程文件系統(tǒng)編程 #include #include void main()char * szCMD = net user Hacker /add;BOOL bSuccess;PROCESS_INFORMATION piProcInfo;STARTUPINFO Info;Info.cb=siz
35、eof(STARTUPINFO);Info.lpReserved=NULL;Info.lpDesktop=NULL;4545文件系統(tǒng)編程文件系統(tǒng)編程Info.lpTitle=NULL;Info.cbReserved2=0;Info.lpReserved2=NULL;bSuccess=CreateProcess(NULL,szCMD,NULL,NULL,false ,NULL,NULL,NULL,&Info,&piProcInfo);if(!bSuccess)printf(創(chuàng)建進(jìn)程失??!);4646系統(tǒng)時間#include #include int main()SYSTEMTIME sysTime;GetLocalTime(&sysTime);printf(%d年%d月%d日%d時%d分%d秒n,sysTime.wYear,sysTi
溫馨提示
- 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年臺州市水利水電勘測設(shè)計院有限公司招聘5人備考題庫及一套完整答案詳解
- 油庫防火施工方案(3篇)
- 建公園施工方案(3篇)
- 福建電氣施工方案(3篇)
- 房屋抗滑樁施工方案(3篇)
- 按施工方案考慮(3篇)
- 應(yīng)急預(yù)案建立范本(3篇)
- 廣州醫(yī)科大學(xué)附屬第五醫(yī)院2025年人才招聘備考題庫(九)及答案詳解一套
- 抹灰施工方案圖文(3篇)
- 2025年內(nèi)江市川南幼兒師范高等??茖W(xué)校公開考核招聘11備考題庫及答案詳解一套
- 典型事故與應(yīng)急救援案例分析
- 數(shù)字鄉(xiāng)村綜合解決方案
- 豬肉推廣活動方案
- 電工職業(yè)道德課件教學(xué)
- 周杰倫介紹課件
- 學(xué)堂在線 雨課堂 學(xué)堂云 生活英語聽說 期末復(fù)習(xí)題答案
- 第十四屆全國交通運(yùn)輸行業(yè)“大象科技杯”城市軌道交通行車調(diào)度員(職工組)理論知識競賽題庫(1400道)
- 2025年希望杯IHC真題-二年級(含答案)
- T/CCT 002-2019煤化工副產(chǎn)工業(yè)氯化鈉
- 砂石運(yùn)輸施工方案
- 醫(yī)院如何規(guī)范服務(wù)態(tài)度
評論
0/150
提交評論