計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)IP數(shù)據(jù)包解析實(shí)驗(yàn)報(bào)告_第1頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)IP數(shù)據(jù)包解析實(shí)驗(yàn)報(bào)告_第2頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)IP數(shù)據(jù)包解析實(shí)驗(yàn)報(bào)告_第3頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)IP數(shù)據(jù)包解析實(shí)驗(yàn)報(bào)告_第4頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)IP數(shù)據(jù)包解析實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩13頁(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、成都信息工程學(xué)院解析ip數(shù)據(jù)報(bào)實(shí)驗(yàn)報(bào)告目錄目錄21、課程設(shè)計(jì)目的22、課程設(shè)計(jì)要求23、相關(guān)知識(shí)24、課程設(shè)計(jì)分析64.1 網(wǎng)卡設(shè)置64.2 使用套接字74.2.2 接收數(shù)據(jù)包74.3 定義ip頭部的數(shù)據(jù)結(jié)構(gòu)84.4 ip包的解析94.5 協(xié)議的定義94.6捕獲處理95、運(yùn)行結(jié)果106、總結(jié)117、課程設(shè)計(jì)參考資料118、源程序代碼111、課程設(shè)計(jì)目的本課程設(shè)計(jì)的目的就是設(shè)計(jì)一個(gè)解析ip數(shù)據(jù)包的程序,并根據(jù)這個(gè)程序,說(shuō)明ip數(shù)據(jù)包的結(jié)構(gòu)及ip協(xié)議的相關(guān)問(wèn)題,從而對(duì)ip層的工作原理有更好的理解和認(rèn)識(shí)。2、課程設(shè)計(jì)要求 本設(shè)計(jì)的目標(biāo)是捕獲網(wǎng)絡(luò)中的ip數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標(biāo)準(zhǔn)輸出上

2、,并同時(shí)寫(xiě)入日志文件。程序的具體要求如下:1)以命令行形式運(yùn)行:ipparse logfile,其中ipparse是程序名, 而logfile則代表記錄結(jié)果的日志文件。 2)在標(biāo)準(zhǔn)輸出和日志文件中寫(xiě)入捕獲的ip包的版本、頭長(zhǎng)度、服務(wù)類型、數(shù)據(jù)包總長(zhǎng)度、數(shù)據(jù)包標(biāo)識(shí)、分段標(biāo)志、分段偏移值、生存時(shí)間、上層協(xié)議類型、頭校驗(yàn)和、源ip地址和目的ip地址等內(nèi)容。3)當(dāng)程序接收到鍵盤(pán)輸入ctrl+c時(shí)退出。3、相關(guān)知識(shí)互聯(lián)網(wǎng)絡(luò)層是tcp/ip協(xié)議參考模型中的關(guān)鍵部分.ip協(xié)議把傳輸層送來(lái)的消息組裝成ip數(shù)據(jù)包,并把ip數(shù)據(jù)包傳送給數(shù)據(jù)鏈層.ip協(xié)議在tcp/ip協(xié)議族中處于核心地位,ip協(xié)議制定了統(tǒng)一的ip

3、數(shù)據(jù)包格式,以消除個(gè)通信子網(wǎng)中的差異,從而為信息發(fā)送方和接收方提供了透明的傳輸通道.編制本程序前,首先要對(duì)ip包的格式有一定了解,圖1給出了ip協(xié)議的數(shù)據(jù)包格式.ip數(shù)據(jù)包的第一個(gè)字段是版本字段,其度是4位,表示所使用的ip協(xié)議的版本.目前的版本是ipv4,版本字段的值是4,下一代版本是ipv6,版本字段值是6.本程序主要針對(duì)版本是ipv4的數(shù)據(jù)包的解析.報(bào)頭標(biāo)長(zhǎng)字段為4位,它定義了以4b為一個(gè)單位的ip包的報(bào)文長(zhǎng)度.報(bào)頭中除了選項(xiàng)字段和填充域字段外,其他各字段是定長(zhǎng)的.因此,ip數(shù)據(jù)包的頭長(zhǎng)度在2040b之間,是可變的.0 4 8 16 19 24 31版本報(bào)頭標(biāo)長(zhǎng)服務(wù)類型總長(zhǎng)度標(biāo)識(shí)標(biāo)志片偏

4、移生存時(shí)間協(xié)議頭校驗(yàn)和源ip地址目的ip地址選項(xiàng)填充域數(shù)據(jù)部分圖1 ip數(shù)據(jù)包的格式服務(wù)類型字段共8位,用于指示路由器如何處理該數(shù)據(jù)包.該字段長(zhǎng)度由4位服務(wù)類型(tos)子域和3位優(yōu)先級(jí)子域組成,1位為保留位,該字段結(jié)構(gòu)如圖2所示. b7 b6 b5 b4 b3 b2 b1 b0優(yōu)先級(jí)dtrc0圖2 服務(wù)類型字段結(jié)構(gòu)優(yōu)先級(jí)共有8種,優(yōu)先級(jí)越高表明數(shù)據(jù)包越重要.表1中列出了各種優(yōu)先級(jí)所代表的意義.表一 優(yōu)先子域的說(shuō)明位數(shù)(b7b6b5) 意義111 網(wǎng)絡(luò)控制110 網(wǎng)絡(luò)間控制101 重要(critic/ecp)100 即時(shí),優(yōu)先011 即時(shí)010 立刻001 優(yōu)先000 普通在4位服務(wù)類型子域中

5、b4,b3,b2,b1分別表示d(延遲),t(吞吐量),r(可靠性)與c(成本).表2列出了服務(wù)器類型自域的構(gòu)成.位數(shù)( b4b3b2b1)意義 1111 安全級(jí)最高 1000 延遲最小 0100 吞吐量最大 0001 金錢(qián)成本最小 0000 普通服務(wù)總長(zhǎng)度字段為2b,它定義了以字節(jié)為單位的數(shù)據(jù)包的總長(zhǎng)度.ip數(shù)據(jù)包的最大長(zhǎng)度為65535b.標(biāo)識(shí)字段的長(zhǎng)度為16位,用于識(shí)別ip數(shù)據(jù)包的編號(hào).每批數(shù)據(jù)都要有一個(gè)標(biāo)識(shí)值,用于讓目的主機(jī)判斷新來(lái)的數(shù)據(jù)屬于哪個(gè)分組.報(bào)頭中的標(biāo)志字段如圖7-3所示.標(biāo)志字段共3位,最高位是0.禁止分片標(biāo)志df(do not fragment)字段的值若為1,表示不能對(duì)數(shù)

6、據(jù)包分片;若df值為0,則表明可以分片.分片標(biāo)志mf(more fragment)的值為1,表示接收到的不是最后一個(gè)分片;若mf值為0,表示接收到的是最后一個(gè)分片.片偏移字段共13位,說(shuō)明分片在整個(gè)數(shù)據(jù)包中的相對(duì)位置.片偏移值是以8b為單位來(lái)記數(shù)的,因此選擇的分片長(zhǎng)度應(yīng)該是8b的整數(shù)倍.生存時(shí)間(ttl)字段為8位,用來(lái)設(shè)置數(shù)據(jù)包在互聯(lián)網(wǎng)絡(luò)的傳輸過(guò)程的壽命,通常是用一個(gè)數(shù)據(jù)包可以經(jīng)過(guò)的最多的路由器跳步數(shù)來(lái)限定的.協(xié)議字段為8位,表示使用此ip數(shù)據(jù)包的高層協(xié)議類型,常用的協(xié)議號(hào)如表3所示.序號(hào)協(xié)議名稱序號(hào)協(xié)議名稱12468icmpigmpip iniptcpegp17414689udpipv6r

7、svpospfa表3 典型的協(xié)議號(hào)頭校驗(yàn)和字段為16位,用于存放檢查報(bào)頭錯(cuò)誤的校驗(yàn)碼。檢驗(yàn)的范圍是整個(gè)ip包的報(bào)頭。校驗(yàn)和按如下方法計(jì)算:1)將頭校驗(yàn)和的字段置為0。2)將報(bào)頭部分的所有數(shù)據(jù)以16位為單位進(jìn)行累加,累加方式是求異或。3)將累加的結(jié)果取反碼,就是頭校驗(yàn)和。 當(dāng)收到一個(gè)ip包時(shí),要檢查報(bào)頭是否出錯(cuò),就把報(bào)頭中的所有數(shù)據(jù)以16位為單位進(jìn)行累加,若累加的結(jié)果為0,則報(bào)文沒(méi)有出錯(cuò)。 地址字段包括源地址和目的地址。源地址和目的地址的長(zhǎng)度都是32位,分別表示發(fā)送數(shù)據(jù)包的源主機(jī)和目的主機(jī)的ip地址。 選項(xiàng)字段的長(zhǎng)度范圍為040b,主要用于控制和測(cè)試。在使用選項(xiàng)字段的過(guò)程中,有可能出現(xiàn)報(bào)頭部分的

8、長(zhǎng)度不是32位的整數(shù)倍的情況。如果出現(xiàn)這種情況,就需要通過(guò)填充位來(lái)湊齊。4、課程設(shè)計(jì)分析4.1 網(wǎng)卡設(shè)置 為了獲取網(wǎng)絡(luò)中的ip數(shù)據(jù)包,必須對(duì)網(wǎng)卡進(jìn)行編程,在這里使用套接字(socket)進(jìn)行編程。但是,在通常情況下,網(wǎng)絡(luò)通信的套接字程序只能響應(yīng)與自己硬件地址相匹配的數(shù)據(jù)包或是以廣播形式發(fā)出的數(shù)據(jù)包。對(duì)于其他形式的數(shù)據(jù)包,如已到達(dá)網(wǎng)絡(luò)接口,但卻不是發(fā)送到此地址的數(shù)據(jù)包,網(wǎng)絡(luò)接口在騅投遞地址并非自身地址之后將不引起響應(yīng),也就是說(shuō)應(yīng)用程序無(wú)法收取與自己無(wú)關(guān)的數(shù)據(jù)包。我們要想獲取網(wǎng)絡(luò)設(shè)備的所有數(shù)據(jù)包,就是需要將網(wǎng)卡設(shè)置為混雜模式。4.2 使用套接字 套接字分為三種,即流套接字(stream socke

9、t)、數(shù)據(jù)報(bào)套接字(datagram socket)和原始套接字(raw socket)。要進(jìn)行ip層數(shù)據(jù)包的接收和發(fā)送,應(yīng)使用原始套接字。創(chuàng)建原始套接字的代碼如下:   socket sock;      sock = socket(af_inet,sock_raw,ipproto_ip);本設(shè)計(jì)不用考慮超時(shí)情況。創(chuàng)建套接后,ip頭就會(huì)包含在接收數(shù)據(jù)包中。然后,我可以設(shè)置ip頭操作選項(xiàng),調(diào)用setsockopt函數(shù)。其中flag設(shè)置為true,并設(shè)定ip-hdrincl選項(xiàng),表明用戶可以親自對(duì)ip頭進(jìn)行處理。最后

10、使用bind()函數(shù)將socket綁定到本地網(wǎng)卡上。綁定網(wǎng)卡后,需用wsaioctl()函數(shù)把網(wǎng)卡設(shè)置為混雜模式,使網(wǎng)卡能夠接收所有的網(wǎng)絡(luò)數(shù)據(jù)。如果接收的數(shù)據(jù)包中的協(xié)議類型和定義的原始套接字匹配,那么接收的數(shù)據(jù)就拷貝到套接字中,因此,網(wǎng)卡就可以接收所有經(jīng)過(guò)的ip包。4.2.2 接收數(shù)據(jù)包 在程序中可使用recv()函數(shù)接收經(jīng)過(guò)的ip包。該函數(shù)有四個(gè)參數(shù),第一個(gè)參數(shù)接收操作所用的套接字描述符;第二個(gè)參數(shù)接收緩沖區(qū)的地址;第三個(gè)參數(shù)接收緩沖區(qū)的大小,也就是所要接收的字節(jié)數(shù);第四個(gè)參數(shù)是一個(gè)附加標(biāo)志,如果對(duì)所發(fā)送的數(shù)據(jù)沒(méi)特殊要求,直接設(shè)為0。因?yàn)閕p數(shù)據(jù)包的最大長(zhǎng)度是65535b,因此緩沖區(qū)的大小不

11、能小于65535b。設(shè)置緩沖區(qū)后,可利用循環(huán)來(lái)反復(fù)監(jiān)聽(tīng)接收ip包,用recv()函數(shù)實(shí)現(xiàn)接收功能。4.3 定義ip頭部的數(shù)據(jù)結(jié)構(gòu)程序需要定義一個(gè)數(shù)據(jù)結(jié)構(gòu)表示ip頭部。其代碼如下:/* 定義ip頭部數(shù)據(jù)結(jié)構(gòu) */typedef struct _ip_headerunionbyte version; /版本(前4位)byte hdrlen; /報(bào)頭標(biāo)長(zhǎng)(后四位),ip頭長(zhǎng)度;byte servicetype; /服務(wù)類型word totallen; /總長(zhǎng)度word id; /標(biāo)識(shí)unionword flags;word fragoff;byte timetolive;byte protocol;

12、word hdrchksum;dword srcaddr;dword dstaddr;byte options;ip_header;4.4 ip包的解析 解析ip包的字段有兩種策略。針對(duì)長(zhǎng)度為8位、16位和32位的字段(或子字段)時(shí),可以利用ip-header的成員直接獲取。要解析長(zhǎng)度不是8位倍數(shù)的字段(或子字段)時(shí),可以利用c語(yǔ)言中的移位以人、及與、或操作完成。4.5 協(xié)議的定義(包含相應(yīng)的頭文件#include #include): dword dwiocontrolcode=sio_rcvall, /*接收所有的ip包*/dwprotocol=ipproto_ip; /*協(xié)議類

13、型為ip*/4.6捕獲處理1.加載 winsock;2.創(chuàng)建一個(gè)接收原始ip包的socket連接;3.綁定到一個(gè)接口;4.進(jìn)行wsaioctl設(shè)置,接收所有的ip數(shù)據(jù)包。代碼如下:if (wsaioctl(s, dwiocontrolcode, &optval, sizeof(optval),null, 0, &dwbytesret, null, null) = socket_error)5.接著設(shè)定一個(gè)線程進(jìn)行捕獲:(1)創(chuàng)建一個(gè)接收ip包的鏈表頭;(2)設(shè)置一個(gè)標(biāo)識(shí),為真,則不斷進(jìn)行ip包的捕獲;(3)建立一個(gè)新的結(jié)點(diǎn),將捕獲的數(shù)據(jù)包加入到該結(jié)點(diǎn);(4)如果鏈表的長(zhǎng)度達(dá)到指

14、定的長(zhǎng)度,創(chuàng)建一個(gè)線程對(duì)該鏈表的ip包進(jìn)行解析;再設(shè)置一個(gè)在ip數(shù)據(jù)包鏈表不足給定的長(zhǎng)度,而又中止ip捕獲時(shí),對(duì)鏈表的處理;(5)為下一個(gè)ip包鏈表創(chuàng)建一個(gè)鏈表頭。6.建立一個(gè)進(jìn)行ip包解析并顯示的線程,進(jìn)行解析ip數(shù)據(jù)包,然后顯示ip數(shù)據(jù)包。5、運(yùn)行結(jié)果截獲ip數(shù)據(jù)包程序運(yùn)行結(jié)果如下:6、總結(jié) 這次計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)是解析ip數(shù)據(jù)包,通過(guò)這次上機(jī)充分應(yīng)用了所學(xué)的計(jì)算機(jī)網(wǎng)絡(luò)和c語(yǔ)言的知識(shí),并上網(wǎng)搜索一部分相當(dāng)資料,粗略設(shè)計(jì)出該程序。 通過(guò)本次課程設(shè)計(jì),充分運(yùn)用了所學(xué)的計(jì)算機(jī)網(wǎng)絡(luò)知識(shí),設(shè)計(jì)出了如何解析ip數(shù)據(jù)包,從而更加深刻的了解到了ip數(shù)據(jù)包的結(jié)構(gòu)及ip協(xié)議的相關(guān)問(wèn)題,從而對(duì)ip層的工作原理有

15、更好的理解和認(rèn)識(shí)。 在課程設(shè)計(jì)的過(guò)程也碰到的不少問(wèn)題。該程序也存在著不少的缺陷,比如并不是所有的數(shù)據(jù)包都能捕獲,如:ip數(shù)據(jù)包以外的數(shù)據(jù)包都抓不到;只支持icmp、igmp、tcp、udp這些協(xié)議。7、課程設(shè)計(jì)參考資料1計(jì)算機(jī)網(wǎng)絡(luò)(第5版) 主編:謝希仁 出版社:電子工業(yè)出版社 出版時(shí)間:2009年11月2 數(shù)據(jù)通信與網(wǎng)絡(luò)(第四版)吳時(shí)霖 周正康 吳永輝 譯8、源程序代碼#include "winsock2.h"#include "ws2tcpip.h"#include "iostream.h"#include "

16、stdio.h"#pragma comment(lib, "ws2_32.lib")#define io_rcvall _wsaiow(ioc_vendor,1)#define buffer_size 65535/* 定義ip頭部數(shù)據(jù)結(jié)構(gòu) */typedef struct _ip_headerunionbyte version; /版本(前4位)byte hdrlen; /報(bào)頭標(biāo)長(zhǎng)(后四位),ip頭長(zhǎng)度;byte servicetype; /服務(wù)類型word totallen; /總長(zhǎng)度word id; /標(biāo)識(shí)unionword flags;word fragof

17、f;byte timetolive;byte protocol;word hdrchksum;dword srcaddr;dword dstaddr;byte options;ip_header;/逐位解析ip頭中的信息,獲取版本號(hào)void getversion(byte b,byte &version)version = b>>4;void getihl(byte b,byte &result)result = (b & 0x0f) *4;/解析服務(wù)類型char * parseservicetype_getprocedence(byte b)switch(

18、b>>5)case 7:return "network control"case 6:return "internet work control"case 5:return "critic/ecp"case 4:return "flash override"case 3:return "falsh"case 2:return "immediate"case 1:return "priority"case 0:return "routi

19、ne"default:return "unknown"char * parseservicetype_gettos(byte b)b=(b>>1)&0x0f;switch(b)case 0:return "normal service" case 1:return "minimize monetary cost"case 2:return "maximize reliability"case 4:return "maximize throughput"case 8:

20、return "minimize delay"case 15:return "maximize security"default:return "unknown"/* 獲取禁止分片標(biāo)志和分片標(biāo)志 */void getflags(word w,byte &df, byte &mf)df=(w>>14)&0x01;mf=(w>>13)&0x01;/* 獲取分片偏移量 */void getfragoff(word w,word &fragoff)fragoff=w&0x

21、1ffff;/獲取協(xié)議char * getprotocol(byte protocol)switch (protocol)case 1: return "icmp"case 2:return "igmp"case 3:return "ggp"case 4:return "ip in ip "case 6:return "tcp"case 8:return "egp"case 17:return "udp"case 41:return "ipv6&

22、quot;case 46:return "ospf"default:return "unknown"/* 解析ip數(shù)據(jù)包 */void ipparse(file * file,char *buffer)ip_header ip = *(ip_header *)buffer;fseek(file,0,seek_end);byte version;getversion(ip.version,version);fprintf(file,"版本=ipv%drn",version);byte headerlen;getihl(ip.hdrlen

23、,headerlen);fprintf(file,"頭長(zhǎng)度=%d(byte)rn",headerlen);fprintf(file,"服務(wù)類型=%s,%srn",parseservicetype_getprocedence(ip.servicetype),parseservicetype_gettos(ip.servicetype);fprintf(file,"數(shù)據(jù)報(bào)長(zhǎng)度=%d(byte)rn",ip.totallen);fprintf(file,"數(shù)據(jù)報(bào)id=%drn",ip.id);/* df表示禁止分片標(biāo)志,

24、mf表示分片標(biāo)記 */byte df,mf;getflags(ip.flags,df,mf);fprintf(file,"分段標(biāo)志 df=%d,mf=%drn",df,mf);word fragoff;getfragoff(ip.fragoff,fragoff);fprintf(file,"分段偏移值=%drn",fragoff);fprintf(file,"生存期=%d(hops)rn",ip.timetolive);fprintf(file,"協(xié)議=%srn",getprotocol(ip.protocol);

25、fprintf(file,"頭校驗(yàn)和=0x%0xrn",ip.hdrchksum);fprintf(file,"源ip地址=%srn",inet_ntoa(*(in_addr*)&ip.srcaddr);fprintf(file,"目的ip地址=%srn",inet_ntoa(*(in_addr*)&ip.dstaddr);fprintf(file,"_rn");/* 程序入口 */int main(int argc,char *argv)/* cmd參數(shù) */if(argc!=2)printf(&

26、quot;usage error!n");return -1;file *file;/* 以讀寫(xiě)的方式建立一個(gè)文本文件logfile.txt */if(file=fopen(argv1,"w+")=null)printf("fail to open file %s","logfile.txt");return -1;wsadata wsdata;/* 啟動(dòng)2.2版本的socket,并將socket版本信息保存到wsdata中 */if(wsastartup(makeword(2,2),&wsdata)!=0)prin

27、tf("wsa startup failed!n");return -1;fprintf(file,"socket初始化.rn");fprintf(file,"=rn");fprintf(file,"描述:%srn",wsdata.szdescription);fprintf(file,"狀態(tài):%srn",wsdata.szsystemstatus);fprintf(file,"=rn");socket sock;/* 創(chuàng)建原始套接字 */if(sock=socket(af_

28、inet,sock_raw,ipproto_ip)=invalid_socket)printf("can not create socket!n");return -1;bool flag=true;/* 設(shè)置ip頭操作選項(xiàng) */if(setsockopt(sock,ipproto_ip,ip_hdrincl,(char*)&flag,sizeof(flag)=socket_error)printf("setsockopt failed!n");return -1;char hostname128;/* 獲取本地主機(jī)名 */if(gethostname(hostname,100)=socket_error)printf("gethostname failed!n");return -1;hostent *phostip;/* 根據(jù)主機(jī)名獲取主機(jī)信息 */if(phostip=gethostbyname(hostname)=null)printf("gethostbyname failed!n");return -1;printf("hostname: %srn",phostip-&g

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論