本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別地涉及一種基于libpcap的HTTP包分析方法及裝置。
背景技術(shù):
在軟件測(cè)試和開發(fā)過程中,經(jīng)常會(huì)需要對(duì)應(yīng)用程序發(fā)送的HTTP請(qǐng)求進(jìn)行抓包和分析,就是將網(wǎng)絡(luò)傳輸發(fā)送與接收的數(shù)據(jù)包進(jìn)行截獲、重發(fā)、編輯、轉(zhuǎn)存等操作,以進(jìn)行數(shù)據(jù)截取和分析。目前常用的抓包工具有多種,例如tcpdump等。Tcpdump抓包后生成libpcap等通用格式的抓包文件。
目前,對(duì)于libpcap格式的抓包文件進(jìn)行分析時(shí),一般是通過使用現(xiàn)有工具(例如wireshark)解析tcp包,同時(shí)借助excel等工具進(jìn)行統(tǒng)計(jì)和分析。
在使用過程中,手動(dòng)通過wireshark工具查看每個(gè)tcp包,對(duì)分析人員的技術(shù)要求較高,分析效率低,且易出錯(cuò)。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供一種基于libpcap的HTTP包分析方法及裝置,能夠降低HTTP抓包文件的分析門檻,提升分析的效率,同時(shí)還提供了跨平臺(tái)格式數(shù)據(jù)自動(dòng)導(dǎo)出功能,便于擴(kuò)展。本發(fā)明提供的一種基于libpcap的HTTP包分析方法及裝置,可對(duì)libpcap抓包文件進(jìn)行分析,自動(dòng)生成報(bào)告。報(bào)告從多維度出發(fā),對(duì)HTTP包的請(qǐng)求和響應(yīng)做出統(tǒng)計(jì)和分析,以文字、圖表和表格的形式展現(xiàn),并提供用戶互動(dòng)操作的功能,讓用戶可以在報(bào)告上直接操作進(jìn)行過濾、查看詳情等功能。
為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種基于libpcap的HTTP包分析方法。
本發(fā)明的基于libpcap的HTTP包分析方法包括:保存用于分析HTTP包內(nèi)數(shù)據(jù)的多項(xiàng)分析規(guī)則;從libpcap文件中獲取多個(gè)HTTP包;獲取各個(gè)所述HTTP包內(nèi)的請(qǐng)求包和響應(yīng)包;根據(jù)所述多項(xiàng)分析規(guī)則對(duì)所述請(qǐng)求包和響應(yīng)包進(jìn)行分析,然后輸出分析結(jié)果。
可選地,所述多項(xiàng)分析規(guī)則用于如下中的幾種:通過分析圖片請(qǐng)求的HTTP響應(yīng)包是否包含緩存頭,判斷圖片是否被緩存;通過分析URL中包含版本請(qǐng)求字符串的Javascript的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;通過分析URL中包含版本請(qǐng)求字符串的CSS的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;通過分析同一請(qǐng)求的間隔時(shí)間是否大于5秒,判斷同一請(qǐng)求頻率是否高于每5秒一次;通過分析各個(gè)請(qǐng)求包和響應(yīng)包的大小,判斷請(qǐng)求包或者響應(yīng)包是否大于10KB;通過分析URL中不包含版本請(qǐng)求字符串的Javascript的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;通過分析URL中不包含版本請(qǐng)求字符串的CSS的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;通過分析各個(gè)響應(yīng)包,判斷是否有非正常響應(yīng);通過分析同一連接的請(qǐng)求包與響應(yīng)包的發(fā)出時(shí)間,判斷是否請(qǐng)求超過5秒仍未返回響應(yīng);通過分析圖片詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷圖片詳細(xì)類型頭是否存在異常;通過分析HTML詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷HTML詳細(xì)類型頭是否存在異常;通過分析Javascript詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷Javascript詳細(xì)類型頭是否存在異常;通過分析CSS詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷CSS詳細(xì)類型頭是否存在異常。
可選地,從libpcap文件中獲取多個(gè)HTTP包的步驟包括:將libpcap文件進(jìn)行拆包,得到TCP包;判斷所述TCP包中的數(shù)據(jù)是否為HTTP 包,如果是則獲取該HTTP包。
可選地,在獲取各個(gè)所述HTTP包內(nèi)的請(qǐng)求包和響應(yīng)包之前,還包括:刪除指定內(nèi)容的HTTP包。
可選地,在輸出分析結(jié)果的步驟之前,還包括:對(duì)所述請(qǐng)求包和響應(yīng)包序列化以生成跨平臺(tái)格式的數(shù)據(jù)。
根據(jù)本發(fā)明的另一方面,提供了一種基于libpcap的HTTP包分析裝置。
本發(fā)明的基于libpcap的HTTP包分析裝置,包括:參數(shù)設(shè)置模塊,用于保存用于分析HTTP包內(nèi)數(shù)據(jù)的多項(xiàng)分析規(guī)則;基礎(chǔ)拆包模塊,用于從libpcap文件中獲取多個(gè)HTTP包;數(shù)據(jù)解析模塊,用于獲取各個(gè)所述HTTP包內(nèi)的請(qǐng)求包和響應(yīng)包;報(bào)告生成模塊,用于根據(jù)所述多項(xiàng)分析規(guī)則對(duì)所述請(qǐng)求包和響應(yīng)包進(jìn)行分析,然后輸出分析結(jié)果。
可選地,多項(xiàng)分析規(guī)則用于如下中的幾種:通過分析圖片請(qǐng)求的HTTP響應(yīng)包是否包含緩存頭,判斷圖片是否被緩存;通過分析URL中包含版本請(qǐng)求字符串的Javascript的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;通過分析URL中包含版本請(qǐng)求字符串的CSS的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;通過分析同一請(qǐng)求的間隔時(shí)間是否大于5秒,判斷同一請(qǐng)求頻率是否高于每5秒一次;通過分析各個(gè)請(qǐng)求包和響應(yīng)包的大小,判斷請(qǐng)求包或者響應(yīng)包是否大于10KB;通過分析URL中不包含版本請(qǐng)求字符串的Javascript的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;通過分析URL中不包含版本請(qǐng)求字符串的CSS的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;通過分析各個(gè)響應(yīng)包,判斷是否有非正常響應(yīng);通過分析同一連接的請(qǐng)求包與響應(yīng)包的發(fā)出時(shí)間,判斷是否請(qǐng)求超過5秒仍未返回響應(yīng);通過分析圖片詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷圖片 詳細(xì)類型頭是否存在異常;通過分析HTML詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷HTML詳細(xì)類型頭是否存在異常;通過分析Javascript詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷Javascript詳細(xì)類型頭是否存在異常;通過分析CSS詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷CSS詳細(xì)類型頭是否存在異常。
可選地,所述基礎(chǔ)拆包模塊還用于:將libpcap文件進(jìn)行拆包,得到TCP包;判斷所述TCP包中的數(shù)據(jù)是否為HTTP包,如果是則獲取該HTTP包。
可選地,所述數(shù)據(jù)解析模塊還用于:刪除指定內(nèi)容的HTTP包。
可選地,所述報(bào)告生成模塊還用于:對(duì)所述請(qǐng)求包和響應(yīng)包序列化以生成跨平臺(tái)格式的數(shù)據(jù)。
根據(jù)本發(fā)明的技術(shù)方案,預(yù)先將用于分析HTTP包內(nèi)數(shù)據(jù)的分析規(guī)則保存,并根據(jù)該分析規(guī)則對(duì)libpcap文件中獲取的HTTP包內(nèi)的請(qǐng)求包和響應(yīng)包進(jìn)行分析,可實(shí)現(xiàn)自動(dòng)分析HTTP包內(nèi)數(shù)據(jù)并將異常信息標(biāo)記顯示的功效,從而降低了抓包文件分析的技術(shù)門檻,降低了分析錯(cuò)誤率。同時(shí),該方法在進(jìn)行數(shù)據(jù)分析時(shí)可先過濾刪除不關(guān)注的HTTP會(huì)話,且能幫助使用者快速發(fā)現(xiàn)一些HTTP抓包分析中常見的問題,從而提升了對(duì)libpcap包中HTTP包的分析效率,使用更加靈活。
附圖說明
附圖用于更好地理解本發(fā)明,不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。其中:
圖1是根據(jù)本發(fā)明實(shí)施例的基于libpcap的HTTP包分析方法的主要步驟示意圖;
圖2是根據(jù)本發(fā)明實(shí)施例的基于libpcap的HTTP包分析方法的TCP包解析過程流程圖;
圖3是根據(jù)本發(fā)明實(shí)施例的基于libpcap的HTTP包分析裝置的主 要模塊示意圖。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明的示范性實(shí)施例做出說明,其中包括本發(fā)明實(shí)施例的各種細(xì)節(jié)以助于理解,應(yīng)當(dāng)將它們認(rèn)為僅僅是示范性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)認(rèn)識(shí)到,可以對(duì)這里描述的實(shí)施例做出各種改變和修改,而不會(huì)背離本發(fā)明的范圍和精神。同樣,為了清楚和簡(jiǎn)明,以下的描述中省略了對(duì)公知功能和結(jié)構(gòu)的描述。
圖1是根據(jù)本發(fā)明實(shí)施例的基于libpcap的HTTP包分析方法的主要步驟示意圖。如圖1所示,本發(fā)明實(shí)施例的基于libpcap的HTTP包分析方法主要包括如下的步驟S11至步驟S14。
步驟S11:保存用于分析HTTP包內(nèi)數(shù)據(jù)的多項(xiàng)分析規(guī)則。本發(fā)明中分析規(guī)則是以代碼的形式出現(xiàn)的,且分析規(guī)則可用于實(shí)際所需的各種功能,例如:
通過分析圖片請(qǐng)求的HTTP響應(yīng)包是否包含緩存頭,判斷圖片是否被緩存;
通過分析URL中包含版本請(qǐng)求字符串的Javascript的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;
通過分析URL中包含版本請(qǐng)求字符串的CSS的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;
通過分析同一請(qǐng)求的間隔時(shí)間是否大于5秒,判斷同一請(qǐng)求頻率是否高于每5秒一次;
通過分析各個(gè)請(qǐng)求包和響應(yīng)包的大小,判斷請(qǐng)求包或者響應(yīng)包是否大于10KB;
通過分析URL中不包含版本請(qǐng)求字符串的Javascript的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;
通過分析URL中不包含版本請(qǐng)求字符串的CSS的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;
通過分析各個(gè)響應(yīng)包,判斷是否有非正常響應(yīng);
通過分析同一連接的請(qǐng)求包與響應(yīng)包的發(fā)出時(shí)間,判斷是否請(qǐng)求超過5秒仍未返回響應(yīng);
通過分析圖片詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷圖片詳細(xì)類型頭是否存在異常;
通過分析HTML詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷HTML詳細(xì)類型頭是否存在異常;
通過分析Javascript詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷Javascript詳細(xì)類型頭是否存在異常;
通過分析CSS詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷CSS詳細(xì)類型頭是否存在異常。
步驟S12:從libpcap文件中獲取多個(gè)HTTP包。在該步驟中,具體可以先將libpcap文件進(jìn)行拆包,得到TCP包;然后判斷該TCP包中的數(shù)據(jù)是否為HTTP包,如果是,則獲取該HTTP包。
在將libpcap文件進(jìn)行拆包時(shí)可選用常用的拆包軟件,如PCAP.NET就可以提供基礎(chǔ)的pcap拆包功能。對(duì)libpcap文件拆包后獲得多個(gè)TCP包,對(duì)每個(gè)TCP包中的數(shù)據(jù)進(jìn)行分析,通過檢查傳送HTTP報(bào)文前是否有TCP的三次握手或者判斷數(shù)據(jù)中是否包含HTTP協(xié)議特有的一些字符串等方式,獲取HTTP包。
步驟S13:獲取各個(gè)所述HTTP包內(nèi)的請(qǐng)求包和響應(yīng)包。通過步驟S12獲取HTTP包后,需要對(duì)每個(gè)HTTP包進(jìn)行分析,判斷當(dāng)前的HTTP包是請(qǐng)求包還是響應(yīng)包,并將其存入內(nèi)存中的一個(gè)字典A中,以便進(jìn)行進(jìn)一步的統(tǒng)計(jì)與分析。
在進(jìn)行該步驟S13之前,可判斷是否需要根據(jù)預(yù)先設(shè)置的過濾條件進(jìn)行過濾,將不關(guān)心的HTTP包內(nèi)容刪除,以便更直接地分析相關(guān)的HTTP包,從而可減少不必要的工作量。
步驟S14:根據(jù)所述多項(xiàng)分析規(guī)則對(duì)所述請(qǐng)求包和響應(yīng)包進(jìn)行分析,然后輸出分析結(jié)果。在輸出分析結(jié)果之前,可先對(duì)所述請(qǐng)求包和響應(yīng)包序列化以生成跨平臺(tái)格式的數(shù)據(jù),便于在其他平臺(tái)上呈現(xiàn)。在本步驟中,按照步驟S11中預(yù)先保存的分析規(guī)則,對(duì)HTTP包數(shù)據(jù)中的請(qǐng)求包和響應(yīng)包進(jìn)行分析,然后將分析結(jié)果以文字、圖表等形式展現(xiàn)在報(bào)告中。
另外,本發(fā)明所生成的結(jié)果報(bào)告中,還可以包括一些其他內(nèi)容,例如:將原始數(shù)據(jù)經(jīng)過轉(zhuǎn)換后,每個(gè)HTTP請(qǐng)求或者響應(yīng)數(shù)據(jù)的詳細(xì)信息;按照類型、詳細(xì)信息、域名等多個(gè)維度,對(duì)HTTP包數(shù)據(jù)進(jìn)行分組、聚集、排序等操作生成的多維度統(tǒng)計(jì)數(shù)據(jù);對(duì)相應(yīng)內(nèi)容的單條HTTP會(huì)話數(shù)據(jù)的詳情瀏覽;以及根據(jù)相應(yīng)的過濾條件過濾之后的數(shù)據(jù)等。
從步驟S11至步驟S14可以看出,預(yù)先將用于分析HTTP包內(nèi)數(shù)據(jù)的分析規(guī)則保存,并根據(jù)該分析規(guī)則對(duì)libpcap文件中獲取的HTTP包內(nèi)的請(qǐng)求包和響應(yīng)包進(jìn)行分析,可實(shí)現(xiàn)自動(dòng)分析HTTP包內(nèi)數(shù)據(jù)并將異常信息標(biāo)記顯示的功效,從而降低了抓包文件分析的技術(shù)門檻,降低了分析錯(cuò)誤率。同時(shí),該方法在進(jìn)行數(shù)據(jù)分析時(shí)可先過濾刪除不關(guān)注的HTTP會(huì)話,且能幫助使用者快速發(fā)現(xiàn)一些HTTP抓包分析中常見的問題,從而提升了對(duì)libpcap包中HTTP包的分析效率,使用更加靈活。
圖2是根據(jù)本發(fā)明實(shí)施例的基于libpcap的HTTP包分析方法的TCP包解析過程流程圖。
如圖2所示,將libpcap文件經(jīng)過拆包后得到TCP包,獲取一個(gè)TCP包并對(duì)其進(jìn)行解析(步驟S20)。首先是從TCP包中將本發(fā)明研究?jī)?nèi)容的HTTP包篩選出來,亦即判斷當(dāng)前的包是否是HTTP包(步 驟S21),可通過檢查傳送HTTP報(bào)文前是否有TCP的三次握手或者根據(jù)當(dāng)前的數(shù)據(jù)中是否包含HTTP協(xié)議特有的一些字符串等方式來判斷是否是HTTP包。若不是,則將其丟掉,若是,則對(duì)其進(jìn)行解析。之后,根據(jù)需要對(duì)前述的HTTP包進(jìn)行過濾,判斷其是否滿足過濾條件(步驟S22),并刪除不關(guān)注的HTTP包內(nèi)容,例如:只顯示指定域名的請(qǐng)求/響應(yīng);不顯示指定域名的請(qǐng)求/響應(yīng);只顯示User-Agent頭中包含指定字符串的請(qǐng)求/響應(yīng);不顯示URL中包含指定字符串的請(qǐng)求/響應(yīng)等,用戶可根據(jù)自己的需要設(shè)置過濾條件。經(jīng)過過濾后,將滿足過濾條件的數(shù)據(jù)包進(jìn)行解析,不滿足過濾條件的數(shù)據(jù)包則丟棄,可以減少工作量。
對(duì)過濾后的HTTP數(shù)據(jù)包,首先判斷其是否是一個(gè)連接的第一個(gè)請(qǐng)求包(步驟S23),如果是,將該請(qǐng)求包作為鍵名(Key)加入內(nèi)存中的字典A(步驟S26);如果不是,則繼續(xù)判斷該HTTP數(shù)據(jù)包是否是該連接的第一個(gè)響應(yīng)包(步驟S24),如果是,將該響應(yīng)包作為鍵值(Value)加入內(nèi)存中的字典A(步驟S27);如果不是,則繼續(xù)判斷該HTTP包是否是后續(xù)的響應(yīng)包(步驟S25),如果是,將該數(shù)據(jù)包拼接到字典A中對(duì)應(yīng)的響應(yīng)包(步驟S28);如果不是,則該數(shù)據(jù)包是該連接的后續(xù)請(qǐng)求包,將此包拼接到字典A中對(duì)應(yīng)的請(qǐng)求包(步驟S29)。經(jīng)過上述過程后,單個(gè)TCP包即解析完成。之后,可讀取下一個(gè)TCP包,按照同樣的方法進(jìn)行解析,并將相應(yīng)的HTTP數(shù)據(jù)包根據(jù)請(qǐng)求及響應(yīng)信息分類,再進(jìn)行拼接、存儲(chǔ)等。
圖3是根據(jù)本發(fā)明實(shí)施例的基于libpcap的HTTP包分析裝置的主要模塊示意圖。如圖3所示,本發(fā)明實(shí)施例中的基于libpcap的HTTP包分析裝置3主要包括參數(shù)設(shè)置模塊31、基礎(chǔ)拆包模塊32、數(shù)據(jù)解析模塊33和報(bào)告生成模塊34。
參數(shù)設(shè)置模塊31,用于保存用于分析HTTP包內(nèi)數(shù)據(jù)的多項(xiàng)分析規(guī)則,分析規(guī)則主要包括如下中的幾種:
通過分析圖片請(qǐng)求的HTTP響應(yīng)包是否包含緩存頭,判斷圖片是否被緩存;
通過分析URL中包含版本請(qǐng)求字符串的Javascript的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;
通過分析URL中包含版本請(qǐng)求字符串的CSS的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;
通過分析同一請(qǐng)求的間隔時(shí)間是否大于5秒,判斷同一請(qǐng)求頻率是否高于每5秒一次;
通過分析各個(gè)請(qǐng)求包和響應(yīng)包的大小,判斷請(qǐng)求包或者響應(yīng)包是否大于10KB;
通過分析URL中不包含版本請(qǐng)求字符串的Javascript的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;
通過分析URL中不包含版本請(qǐng)求字符串的CSS的HTTP響應(yīng)包是否包含緩存頭,判斷其是否被緩存;
通過分析各個(gè)響應(yīng)包,判斷是否有非正常響應(yīng);
通過分析同一連接的請(qǐng)求包與響應(yīng)包的發(fā)出時(shí)間,判斷是否請(qǐng)求超過5秒仍未返回響應(yīng);
通過分析圖片詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷圖片詳細(xì)類型頭是否存在異常;
通過分析HTML詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷HTML詳細(xì)類型頭是否存在異常;
通過分析Javascript詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷Javascript詳細(xì)類型頭是否存在異常;
通過分析CSS詳細(xì)類型頭對(duì)應(yīng)的請(qǐng)求包和響應(yīng)包,判斷CSS詳細(xì)類型頭是否存在異常。
前述的分析規(guī)則,都是以代碼的形式進(jìn)行保存的,在實(shí)際應(yīng)用中,用戶可根據(jù)需要自行設(shè)置。
基礎(chǔ)拆包模塊32,用于從libpcap文件中獲取多個(gè)HTTP包。具體 可用于:將libpcap文件進(jìn)行拆包,得到TCP包;判斷所述TCP包中的數(shù)據(jù)是否為HTTP包,如果是則獲取該HTTP包。
數(shù)據(jù)解析模塊33,用于獲取各個(gè)所述HTTP包內(nèi)的請(qǐng)求包和響應(yīng)包,還用于刪除指定內(nèi)容的所述HTTP包。數(shù)據(jù)解析模塊33通過對(duì)每個(gè)HTTP包進(jìn)行分析,判斷當(dāng)前的HTTP包是請(qǐng)求包還是響應(yīng)包,并將其存入內(nèi)存中的字典A中,以便進(jìn)行進(jìn)一步的統(tǒng)計(jì)與分析。在判斷當(dāng)前的HTTP包是請(qǐng)求包還是響應(yīng)包之前,可判斷是否需要根據(jù)預(yù)先設(shè)置的過濾條件進(jìn)行過濾,將不關(guān)心的內(nèi)容刪除,以便更直接地分析相關(guān)的HTTP包,從而可減少不必要的工作量。
報(bào)告生成模塊34,用于根據(jù)所述多項(xiàng)分析規(guī)則對(duì)所述請(qǐng)求包和響應(yīng)包進(jìn)行分析,然后輸出分析結(jié)果。在輸出分析結(jié)果之前,可先對(duì)所述請(qǐng)求包和響應(yīng)包序列化以生成跨平臺(tái)格式的數(shù)據(jù),例如:JSON、XML等,便于在其他平臺(tái)上呈現(xiàn)。分析結(jié)果報(bào)告可以文字、圖表或者表格的形式呈現(xiàn),且報(bào)告的展現(xiàn)部分可以使用HTML、客戶端App、移動(dòng)端App、Flash、Excel、Word、郵件等方式,可根據(jù)需要進(jìn)行選擇。
上述具體實(shí)施方式,并不構(gòu)成對(duì)本發(fā)明保護(hù)范圍的限制。本領(lǐng)域技術(shù)人員應(yīng)該明白的是,取決于設(shè)計(jì)要求和其他因素,可以發(fā)生各種各樣的修改、組合、子組合和替代。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)范圍之內(nèi)。