2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論