本發(fā)明涉及通信領(lǐng)域,尤指一種信息獲取方法、客戶端設(shè)備和服務(wù)端設(shè)備。
背景技術(shù):
互聯(lián)網(wǎng)時(shí)代下,家庭網(wǎng)關(guān)依然已成為家庭內(nèi)計(jì)算機(jī)和各種移動(dòng)終端聯(lián)系的紐帶,然而,家庭網(wǎng)關(guān)設(shè)備是一個(gè)非常復(fù)雜的系統(tǒng),主要由底層操作系統(tǒng)和上層應(yīng)用協(xié)議組成。系統(tǒng)的復(fù)雜性必然帶來(lái)故障診斷的復(fù)雜性。
在網(wǎng)關(guān)設(shè)備的開發(fā)過程中,如果網(wǎng)關(guān)設(shè)備的調(diào)試運(yùn)行出現(xiàn)故障,開發(fā)人員通常通過shell命令方式對(duì)設(shè)備故障進(jìn)行診斷,shell命令方式是指通過操作系統(tǒng)的命令行工具輸入指令的方式。
具體地,開發(fā)人員從網(wǎng)關(guān)設(shè)備的串口以shell命令的方式輸入診斷命令,網(wǎng)關(guān)設(shè)備對(duì)診斷命令進(jìn)行處理和響應(yīng),并根據(jù)開發(fā)人員的需要,將當(dāng)前設(shè)備的上下文情況作為響應(yīng)信息通過串口進(jìn)行輸出,因此,開發(fā)人員可以通過串口了解當(dāng)前網(wǎng)關(guān)設(shè)備運(yùn)行的上下文情況,從而進(jìn)行故障診斷。
然而,網(wǎng)關(guān)設(shè)備可能會(huì)出現(xiàn)串口卡死的情況,在這種情況下,開發(fā)人員無(wú)法通過shell命令方式了解當(dāng)前設(shè)備運(yùn)行的上下文情況,給故障診斷帶來(lái)了困難。
此外,有些網(wǎng)關(guān)設(shè)備沒有設(shè)置串口,例如,普通家庭使用的網(wǎng)關(guān)設(shè)備普遍沒有設(shè)置串口,如果這些網(wǎng)關(guān)設(shè)備出現(xiàn)故障,維修人員也無(wú)法通過串口了解當(dāng)前設(shè)備運(yùn)行的上下文情況,從而難以完成網(wǎng)關(guān)設(shè)備故障診斷。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述問題,本發(fā)明提出了一種信息獲取方法、客戶端設(shè)備和服 務(wù)端設(shè)備,能夠?qū)崿F(xiàn)串口卡死或無(wú)法使用串口的情況下的網(wǎng)關(guān)故障診斷中用戶輸入命令對(duì)應(yīng)的響應(yīng)信息的獲取,從而保證網(wǎng)關(guān)故障診斷的順利進(jìn)行。
為了達(dá)到上述目的,本發(fā)明提出了一種信息獲取方法,所述方法包括:
構(gòu)造ICMP Echo報(bào)文,將用戶輸入命令設(shè)置在ICMP Echo報(bào)文的數(shù)據(jù)區(qū);
將ICMP Echo報(bào)文發(fā)送給服務(wù)端;
接收服務(wù)端發(fā)送的與所述ICMP Echo報(bào)文對(duì)應(yīng)的ICMP Reply報(bào)文;
解析ICMP Reply報(bào)文的數(shù)據(jù)區(qū)攜帶的針對(duì)用戶輸入命令的響應(yīng)信息。
優(yōu)選地,在所述解析ICMP Reply報(bào)文的數(shù)據(jù)區(qū)攜帶的針對(duì)用戶輸入命令的響應(yīng)信息之后,所述信息獲取方法還包括:
將所述針對(duì)用戶輸入命令的響應(yīng)信息展示給用戶。
優(yōu)選地,所述ICMP Echo報(bào)文和ICMP Reply報(bào)文均為ICMP報(bào)文;ICMP報(bào)文包括報(bào)文頭部和數(shù)據(jù)區(qū),其中,報(bào)文頭部包括報(bào)文類型標(biāo)識(shí)和代碼字段;數(shù)據(jù)區(qū)包括:Magic字段、長(zhǎng)度字段和信息承載字段;
所述構(gòu)造ICMP Echo報(bào)文,將用戶輸入命令設(shè)置到ICMP Echo報(bào)文的數(shù)據(jù)區(qū)具體包括:
設(shè)置ICMP Echo報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段;
填充ICMP Echo報(bào)文的Magic字段;
計(jì)算用戶輸入命令的長(zhǎng)度,將計(jì)算得到的長(zhǎng)度填充到ICMP Echo報(bào)文的長(zhǎng)度字段,
將用戶輸入命令填充到ICMP Echo報(bào)文的信息承載字段。
優(yōu)選地,所述解析ICMP Reply報(bào)文的數(shù)據(jù)區(qū)攜帶的針對(duì)用戶輸入命令的響應(yīng)信息包括:
檢測(cè)ICMP Echo報(bào)文的Magic字段與ICMP Reply報(bào)文中的Magic字段是否匹配;
當(dāng)檢測(cè)結(jié)果為匹配時(shí),根據(jù)ICMP Reply報(bào)文的長(zhǎng)度字段,讀取ICMP Reply報(bào)文的信息承載字段中攜帶的響應(yīng)信息。
優(yōu)選地,所述將ICMP Echo報(bào)文發(fā)送給服務(wù)端具體包括:
通過網(wǎng)絡(luò)連接端口將ICMP Echo報(bào)文發(fā)送給服務(wù)端。
為了達(dá)到上述目的,本發(fā)明還提出了一種信息獲取方法,所述方法包括:
接收客戶端發(fā)送的ICMP Echo報(bào)文;
解析ICMP Echo報(bào)文中攜帶的用戶輸入命令;
對(duì)用戶輸入命令進(jìn)行處理,并生成針對(duì)用戶輸入命令的響應(yīng)信息;
構(gòu)造ICMP Reply報(bào)文,將針對(duì)用戶輸入命令的響應(yīng)信息設(shè)置在ICMP報(bào)文的數(shù)據(jù)區(qū);
將ICMP Reply報(bào)文發(fā)送給客戶端。
優(yōu)選地,所述解析ICMP Echo報(bào)文中攜帶的用戶輸入命令具體包括:
檢測(cè)ICMP Echo報(bào)文的Magic字段是否為指定的Magic字段;
當(dāng)測(cè)ICMP Echo報(bào)文的Magic字段是指定的Magic字段時(shí),根據(jù)ICMP Echo報(bào)文的長(zhǎng)度字段,讀取ICMP Echo報(bào)文的信息承載字段中攜帶的用戶輸入命令;
所述構(gòu)造ICMP Reply報(bào)文,將針對(duì)用戶輸入命令的響應(yīng)信息設(shè)置在ICMP報(bào)文的數(shù)據(jù)區(qū)具體包括:
設(shè)置ICMP Reply報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段;
填充ICMP Reply報(bào)文的Magic字段;
計(jì)算響應(yīng)信息的長(zhǎng)度,將計(jì)算得到的長(zhǎng)度填充到ICMP Reply報(bào)文的長(zhǎng)度字段,
將響應(yīng)信息填充到ICMP Reply報(bào)文的信息承載字段。
為了達(dá)到上述目的,本發(fā)明還提出了一種客戶端設(shè)備,設(shè)置在終端上,其特征在于,所述客戶端設(shè)備包括:
第一構(gòu)造單元,用于構(gòu)造ICMP Echo報(bào)文,將用戶輸入命令設(shè)置在ICMP Echo報(bào)文的數(shù)據(jù)區(qū);
第一發(fā)送單元,用于將ICMP Echo報(bào)文發(fā)送給服務(wù)端;
第一接收單元,用于接收服務(wù)端發(fā)送的與所述ICMP Echo報(bào)文對(duì)應(yīng)的ICMP Reply報(bào)文;
第一解析單元,用于解析ICMP Reply報(bào)文的數(shù)據(jù)區(qū)攜帶的針對(duì)用戶輸入命令的響應(yīng)信息。
優(yōu)選地,還包括:
展示單元,用于將所述針對(duì)用戶輸入命令的響應(yīng)信息展示給用戶。
優(yōu)選地,所述ICMP Echo報(bào)文和ICMP Reply報(bào)文均為ICMP報(bào)文;ICMP報(bào)文包括報(bào)文頭部和數(shù)據(jù)區(qū),其中,報(bào)文頭部包括報(bào)文類型標(biāo)識(shí)和代碼字段;數(shù)據(jù)區(qū)包括:Magic字段、長(zhǎng)度字段和信息承載字段;
所述第一構(gòu)造單元具體用于:
設(shè)置ICMP Echo報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段;
填充ICMP Echo報(bào)文的Magic字段;
計(jì)算用戶輸入命令的長(zhǎng)度,將計(jì)算得到的長(zhǎng)度填充到ICMP Echo報(bào)文的長(zhǎng)度字段,
將用戶輸入命令填充到ICMP Echo報(bào)文的信息承載字段。
優(yōu)選地,所述第一解析單元具體包括:
第一檢測(cè)模塊,用于檢測(cè)ICMP Echo報(bào)文的Magic字段與ICMP Reply報(bào)文中的Magic字段是否匹配;
第一讀取模塊,用于當(dāng)檢測(cè)結(jié)果為匹配時(shí),根據(jù)ICMP Reply報(bào)文的長(zhǎng)度字段,讀取ICMP Reply報(bào)文的信息承載字段中攜帶的響應(yīng)信息。
優(yōu)選地,所述第一發(fā)送單元具體用于:通過網(wǎng)絡(luò)連接端口將ICMP Echo報(bào)文發(fā)送給服務(wù)端。
為了達(dá)到上述目的,本發(fā)明還提出了一種服務(wù)端設(shè)備,設(shè)置在網(wǎng)關(guān)設(shè)備 上,其特征在于,所述服務(wù)端設(shè)備包括:
第二接收單元,用于接收客戶端發(fā)送的ICMP Echo報(bào)文;
第二解析單元,用于解析ICMP Echo報(bào)文中攜帶的用戶輸入命令;
處理單元,用于對(duì)用戶輸入命令進(jìn)行處理,并生成針對(duì)用戶輸入命令的響應(yīng)信息;
第二構(gòu)造單元,用于構(gòu)造ICMP Reply報(bào)文,將針對(duì)用戶輸入命令的響應(yīng)信息設(shè)置在ICMP報(bào)文的數(shù)據(jù)區(qū);
第二發(fā)送單元,用于將ICMP Reply報(bào)文發(fā)送給客戶端。
優(yōu)選地,所述第二解析單元具體包括:
第二檢測(cè)模塊,用于檢測(cè)ICMP Echo報(bào)文的Magic字段是否為指定的Magic字段;
第二讀取模塊,用于當(dāng)測(cè)ICMP Echo報(bào)文的Magic字段是指定的Magic字段時(shí),根據(jù)ICMP Echo報(bào)文的長(zhǎng)度字段,讀取ICMP Echo報(bào)文的信息承載字段中攜帶的用戶輸入命令;
所述第二構(gòu)造單元具體用于:
設(shè)置ICMP Reply報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段;
填充ICMP Reply報(bào)文的Magic字段;
計(jì)算響應(yīng)信息的長(zhǎng)度,將計(jì)算得到的長(zhǎng)度填充到ICMP Reply報(bào)文的長(zhǎng)度字段,
將響應(yīng)信息填充到ICMP Reply報(bào)文的信息承載字段。
與現(xiàn)有技術(shù)相比,本發(fā)明提供的技術(shù)方案包括:構(gòu)造ICMP Echo報(bào)文,將用戶輸入命令設(shè)置在ICMP Echo報(bào)文的數(shù)據(jù)區(qū);將ICMP Echo報(bào)文發(fā)送給服務(wù)端;接收服務(wù)端發(fā)送的與所述ICMP Echo報(bào)文對(duì)應(yīng)的ICMP Reply報(bào)文;解析ICMP Reply報(bào)文的數(shù)據(jù)區(qū)攜帶的針對(duì)用戶輸入命令的響應(yīng)信息。通過本發(fā)明的方案,根據(jù)ICMP協(xié)議,通信網(wǎng)絡(luò)中的設(shè)備在收到ICMP Echo報(bào)文時(shí),將對(duì)應(yīng)回復(fù)ICMP Reply報(bào)文,本發(fā)明方案中,基于ICMP協(xié)議的Reply 和Echo報(bào)文的交互方式,將用戶輸入命令承載到ICMP Echo報(bào)文的數(shù)據(jù)區(qū)中,在網(wǎng)關(guān)的服務(wù)器解析完診斷命令后,將用戶輸入命令的響應(yīng)信息承載到ICMP Reply報(bào)文的數(shù)據(jù)區(qū),從而利用通過網(wǎng)絡(luò)傳輸?shù)腎CMP報(bào)文實(shí)現(xiàn)用戶輸入命令對(duì)應(yīng)的響應(yīng)信息的傳輸,從而能夠通過響應(yīng)信息完成網(wǎng)關(guān)故障診斷,通過上述技術(shù)方案,提供了一種串口卡死或無(wú)法使用串口的情況下的網(wǎng)關(guān)故障診斷中用戶輸入命令對(duì)應(yīng)的響應(yīng)信息的獲取方法,從而保證網(wǎng)關(guān)故障診斷的順利進(jìn)行。
附圖說明
下面對(duì)本發(fā)明實(shí)施例中的附圖進(jìn)行說明,實(shí)施例中的附圖是用于對(duì)本發(fā)明的進(jìn)一步理解,與說明書一起用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明保護(hù)范圍的限制。
圖1為現(xiàn)有技術(shù)中ICMP報(bào)文格式定義示意圖;
圖2為本發(fā)明提出了一種信息獲取方法的流程示意圖;
圖3為本發(fā)明提出的另一種信息獲取方法的流程示意圖;
圖4A為應(yīng)用實(shí)例中根據(jù)ICMP Echo報(bào)文據(jù)構(gòu)造的IP報(bào)文的結(jié)構(gòu)示意圖;
圖4B為應(yīng)用實(shí)例中根據(jù)ICMP Reply報(bào)文據(jù)構(gòu)造的IP報(bào)文的結(jié)構(gòu)示意圖;
圖5為本發(fā)明實(shí)施例提出的客戶端設(shè)備的結(jié)構(gòu)示意圖;
圖6為本發(fā)明實(shí)施例提出的服務(wù)端設(shè)備的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了便于本領(lǐng)域技術(shù)人員的理解,下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的描述,并不能用來(lái)限制本發(fā)明的保護(hù)范圍。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的各種方式可以相互組合。
在介紹本發(fā)明實(shí)施例提出的信息獲取方法之前,首先對(duì)ICMP(Internet Control Message Protocol,Internet控制報(bào)文協(xié)議)報(bào)文進(jìn)行簡(jiǎn)單介紹。ICMP協(xié)議是TCP/IP協(xié)議族的一個(gè)子協(xié)議,用于在IP(Internet Protocol,網(wǎng)絡(luò)互聯(lián)協(xié)議)主機(jī)、路由器之間傳遞控制消息。控制消息是指網(wǎng)絡(luò)通不通、主機(jī)是否可達(dá)、路由是否可用等網(wǎng)絡(luò)本身的消息,這些控制消息并不傳輸用戶數(shù)據(jù)。根據(jù)ICMP協(xié)議,通信網(wǎng)絡(luò)中的設(shè)備在收到ICMP Echo報(bào)文時(shí),將對(duì)應(yīng)回復(fù)ICMP Reply報(bào)文,其中一個(gè)典型應(yīng)用就是Ping診斷,通過Ping命令可以查看網(wǎng)絡(luò)的是否聯(lián)通,具體地,為了判斷設(shè)備A和設(shè)備B之間的網(wǎng)絡(luò)聯(lián)通性,設(shè)備A向設(shè)備B發(fā)送ICMP Echo報(bào)文之后,如果設(shè)備A能夠收到設(shè)備B發(fā)送的ICMP Reply報(bào)文,則說明判斷設(shè)備A和設(shè)備B之間的網(wǎng)絡(luò)聯(lián)通。。ICMP Echo報(bào)文和ICMP Reply報(bào)文都是ICMP報(bào)文中的一種,和其他類型的ICMP報(bào)文不同的是,ICMP Echo報(bào)文和ICMP Reply報(bào)文的數(shù)據(jù)區(qū)為隨機(jī)數(shù)據(jù)。
參見圖1A,為現(xiàn)有技術(shù)中ICMP報(bào)文格式定義示意圖。如圖1所示,ICMP報(bào)文包括報(bào)文頭部和數(shù)據(jù)區(qū)(ICMP數(shù)據(jù)),其中,報(bào)文頭部包括報(bào)文類型標(biāo)識(shí)(8位類型)、代碼字段(8位代碼),以及16位的校驗(yàn)和。當(dāng)ICMP報(bào)文的報(bào)文頭部的報(bào)文類型標(biāo)識(shí)和代碼字段均設(shè)置為0時(shí),ICMP報(bào)文為ICMP Echo報(bào)文或ICMP Reply報(bào)文。當(dāng)ICMP報(bào)文為ICMP Echo報(bào)文或ICMP Reply報(bào)文時(shí),其數(shù)據(jù)區(qū)為隨機(jī)數(shù)據(jù),不包含有效信息。
參見圖2,本發(fā)明提出了一種信息獲取方法,包括:
步驟110,構(gòu)造ICMP Echo報(bào)文,將用戶輸入命令設(shè)置在ICMP Echo報(bào)文的數(shù)據(jù)區(qū);
其中,ICMP Echo報(bào)文為ICMP報(bào)文的一種;參見圖1B,為本發(fā)明實(shí)施例提供的ICMP報(bào)文格式定義示意圖。如圖1所示,本發(fā)明實(shí)施例提供的ICMP報(bào)文包括報(bào)文頭部和數(shù)據(jù)區(qū)(ICMP數(shù)據(jù)),ICMP報(bào)文包括報(bào)文頭部和數(shù)據(jù)區(qū),其中,報(bào)文頭部包括報(bào)文類型標(biāo)識(shí)和代碼字段,還包括16位的校驗(yàn)和;數(shù)據(jù)區(qū)包括:Magic字段、長(zhǎng)度字段和信息承載字段。在圖1B中示例性的,報(bào)文類型標(biāo)識(shí)為8位類型,代碼字段為8位代碼,對(duì)于用于診斷命令請(qǐng)求的ICMP Echo報(bào)文,信息承載字段中攜帶相應(yīng)的診斷命令。ICMP報(bào)文前加上IP首部構(gòu)成IP報(bào)文。
步驟110中,構(gòu)造ICMP Echo報(bào)文,將用戶輸入命令設(shè)置到ICMP Echo報(bào)文的數(shù)據(jù)區(qū)具體包括:
設(shè)置ICMP Echo報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段;
填充ICMP Echo報(bào)文的Magic字段;
計(jì)算用戶輸入命令的長(zhǎng)度,將計(jì)算得到的長(zhǎng)度填充到ICMP Echo報(bào)文的長(zhǎng)度字段,
將用戶輸入命令填充到ICMP Echo報(bào)文的信息承載字段。
其中,設(shè)置ICMP Echo報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段具體為將報(bào)文類型標(biāo)識(shí)和代碼字段均設(shè)置為0。
通過步驟110上述過程,實(shí)現(xiàn)了將用戶輸入命令設(shè)置到ICMP Echo報(bào)文的數(shù)據(jù)區(qū)中,通過Magic字段,使得服務(wù)端能夠獲知該ICMP Echo報(bào)文攜帶有用戶輸入指令,通過長(zhǎng)度字段,使得服務(wù)端能夠正確地解析ICMP Echo報(bào)文攜帶的用戶輸入指令。
其中,在執(zhí)行網(wǎng)關(guān)故障診斷之前,客戶端可以和服務(wù)端事先約定一個(gè)指定的Magic字段,在客戶端構(gòu)造ICMP Echo報(bào)文時(shí),將指定的Magic字段設(shè)置在ICMP Echo報(bào)文的Magic字段位置,在服務(wù)端接收到ICMP Echo報(bào)文時(shí),通過判斷ICMP Echo報(bào)文的Magic字段是否為指定的Magic字段,來(lái)判斷是否需要解析數(shù)據(jù)區(qū)中的用戶輸入命令,如果沒有Magic字段,則按照普通的ICMP Echo報(bào)文進(jìn)行處理即可。
本實(shí)施例中的用戶輸入命令尤其指用于故障診斷的診斷命令。在步驟110之前,信息獲取方法還包括,接收用戶輸入的用戶輸入命令。
步驟120,將ICMP Echo報(bào)文發(fā)送給服務(wù)端;
步驟130,接收服務(wù)端發(fā)送的與ICMP Echo報(bào)文對(duì)應(yīng)的ICMP Reply報(bào)文;
步驟140,解析ICMP Reply報(bào)文的數(shù)據(jù)區(qū)攜帶的針對(duì)用戶輸入命令的響應(yīng)信息。
步驟140中,ICMP Reply報(bào)文為ICMP報(bào)文的一種。解析ICMP Reply報(bào)文的數(shù)據(jù)區(qū)攜帶的針對(duì)用戶輸入命令的響應(yīng)信息包括:
檢測(cè)ICMP Echo報(bào)文的Magic字段與ICMP Reply報(bào)文中的Magic字段是否匹配;
當(dāng)檢測(cè)結(jié)果為匹配時(shí),根據(jù)ICMP Reply報(bào)文的長(zhǎng)度字段,讀取ICMP Reply報(bào)文的信息承載字段中攜帶的響應(yīng)信息。
當(dāng)檢測(cè)結(jié)果為不匹配時(shí),將接收的ICMP Reply報(bào)文丟棄。
同樣地,當(dāng)用戶接收到ICMP Reply報(bào)文時(shí),通過ICMP Reply報(bào)文中的Magic字段,能夠獲知該ICMP Reply報(bào)文中攜帶有用戶輸入指令對(duì)應(yīng)的響應(yīng)信息,通過長(zhǎng)度字段,使得服務(wù)端能夠正確地解析ICMP Echo報(bào)文攜帶的用戶輸入指令對(duì)應(yīng)的響應(yīng)信息。
優(yōu)選的,在步驟140之后,該信息獲取方法還包括:
步驟150,將針對(duì)用戶輸入命令的響應(yīng)信息展示給用戶。
本發(fā)明實(shí)施例中,上述將ICMP Echo報(bào)文發(fā)送給服務(wù)端具體包括:
通過網(wǎng)絡(luò)連接端口將ICMP Echo報(bào)文發(fā)送給服務(wù)端。
基于與上述方法實(shí)施例相同或相似的構(gòu)思,本發(fā)明實(shí)施例還提供一種信息獲取方法,參見圖3,為本發(fā)明提出的信息獲取方法的流程示意圖,如圖3所示,所述信息獲取方法包括:
步驟210,接收客戶端發(fā)送的ICMP Echo報(bào)文;
步驟220,解析ICMP Echo報(bào)文中攜帶的用戶輸入命令;
步驟220中,所述解析ICMP Echo報(bào)文中攜帶的用戶輸入命令具體包括:
檢測(cè)ICMP Echo報(bào)文的Magic字段是否為指定的Magic字段;
當(dāng)測(cè)ICMP Echo報(bào)文的Magic字段是指定的Magic字段時(shí),根據(jù)ICMP Echo報(bào)文的長(zhǎng)度字段,讀取ICMP Echo報(bào)文的信息承載字段中攜帶的用戶輸入命令。
其中,在執(zhí)行網(wǎng)關(guān)故障診斷之前,客戶端可以和服務(wù)端事先約定一個(gè)指定的Magic字段,在客戶端構(gòu)造ICMP Echo報(bào)文時(shí),將指定的Magic字段設(shè)置在ICMP Echo報(bào)文的Magic字段位置,在服務(wù)端接收到ICMP Echo報(bào)文時(shí),通過判斷ICMP Echo報(bào)文的Magic字段是否為指定的Magic字段,來(lái)判斷是否需要解析數(shù)據(jù)區(qū)中的用戶輸入命令,如果沒有Magic字段,則按照普通的ICMP Echo報(bào)文進(jìn)行處理即可。
步驟230,對(duì)用戶輸入命令進(jìn)行處理,并生成針對(duì)用戶輸入命令的響應(yīng)信息;本步驟根據(jù)現(xiàn)有技術(shù)的處理方法對(duì)用戶輸入命令進(jìn)行處理。
步驟240,構(gòu)造ICMP Reply報(bào)文,將針對(duì)用戶輸入命令的響應(yīng)信息設(shè)置在ICMP報(bào)文的數(shù)據(jù)區(qū);
步驟240中,所述構(gòu)造ICMP Reply報(bào)文,將針對(duì)用戶輸入命令的響應(yīng)信息設(shè)置在ICMP報(bào)文的數(shù)據(jù)區(qū)具體包括:
設(shè)置ICMP Reply報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段;
填充ICMP Reply報(bào)文的Magic字段;
計(jì)算響應(yīng)信息的長(zhǎng)度,將計(jì)算得到的長(zhǎng)度填充到ICMP Reply報(bào)文的長(zhǎng)度字段,
將響應(yīng)信息填充到ICMP Reply報(bào)文的信息承載字段。
在圖1B中,示例性的,對(duì)于用于實(shí)現(xiàn)診斷命令輸出的ICMP Reply報(bào)文,信息承載字段中攜帶有診斷命令對(duì)應(yīng)的響應(yīng)信息。
其中,設(shè)置ICMP Reply報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段具體為將報(bào)文類型標(biāo)識(shí)和代碼字段均設(shè)置為0。
步驟250,將ICMP Reply報(bào)文發(fā)送給客戶端。
其中,通過網(wǎng)絡(luò)連接端口將ICMP Reply報(bào)文發(fā)送給客戶端。
下面,結(jié)合一個(gè)具體的示例進(jìn)行說明。
網(wǎng)管設(shè)備的場(chǎng)景模擬系統(tǒng)在運(yùn)行某些業(yè)務(wù)一段時(shí)間后,會(huì)出系統(tǒng)重啟的情況,推測(cè)可能系統(tǒng)內(nèi)存不足導(dǎo)致,因此開發(fā)人員希望了解網(wǎng)關(guān)設(shè)備中系統(tǒng) 各個(gè)進(jìn)程內(nèi)存占用情況,可以由客戶端通過本發(fā)明提供的信息獲取方法來(lái)了解系統(tǒng)各個(gè)進(jìn)程內(nèi)存占用情況。診斷命令的約定為,用戶輸入PS,服務(wù)端回應(yīng)當(dāng)前系統(tǒng)進(jìn)程列表以及狀態(tài)。
參見圖4A,為上述應(yīng)用實(shí)例中根據(jù)ICMP Echo報(bào)文據(jù)構(gòu)造的IP報(bào)文的結(jié)構(gòu)示意圖。如圖4A所示,將ICMP Echo報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段均設(shè)置為0,將Magic字段填充為33448899共兩個(gè)字節(jié),將ICMP Echo報(bào)文的長(zhǎng)度字段設(shè)置為2共1個(gè)字節(jié),將診斷命令ps填充到數(shù)據(jù)區(qū)的剩余部分,數(shù)據(jù)區(qū)剩余不足的補(bǔ)0,就完成了ICMP Echo報(bào)文的構(gòu)造,然后根據(jù)ICMP Echo報(bào)文據(jù)構(gòu)造IP報(bào)文,具體為將構(gòu)造的ICMP Echo報(bào)文承載到IP報(bào)文的數(shù)據(jù)部分并發(fā)送。根據(jù)ICMP Echo報(bào)文據(jù)構(gòu)造的IP報(bào)文的內(nèi)容如圖4A所示。其中,33448899即為指定的Magic字段,該數(shù)值為示例性說明,Magic字段也可以是其他的數(shù)值。
服務(wù)端收到ICMP Echo報(bào)文之后,解析并處理ICMP Echo報(bào)文,具體地,檢查Magic字段是否為指定的Magic字段33448899,如果與指定的Magic字段不一致,則走協(xié)議棧正常ICMP流程,否則,對(duì)用戶輸入命令進(jìn)行提取,根據(jù)命令長(zhǎng)度字段,提取對(duì)應(yīng)的用戶輸入命令,本示例中,長(zhǎng)度字段為2,根據(jù)兩個(gè)字節(jié)提取的用戶輸入命令為ps,然后,根據(jù)查詢注冊(cè)到系統(tǒng)的服務(wù)端命令處理函數(shù),如果找到,直接調(diào)用命令處理函數(shù)(遍歷內(nèi)核進(jìn)程表,記錄每個(gè)任務(wù)的上下文信息,包含內(nèi)存占用、進(jìn)程標(biāo)識(shí)符、名稱等)對(duì)用戶輸入命令ps進(jìn)行處理,將處理結(jié)果作為響應(yīng)信息,然后,服務(wù)端構(gòu)造ICMP Reply報(bào)文,其中,將ICMP Reply報(bào)文的Magic字段填充為指定的Magic字段33448899,計(jì)算命令執(zhí)行結(jié)果長(zhǎng)度,本示例中為512,并保存到長(zhǎng)度字段,拷貝處理結(jié)果到ICMP數(shù)據(jù)區(qū)命令輸出部分。構(gòu)造的ICMP Reply報(bào)文內(nèi)容如圖4B所示,同樣,將構(gòu)造的ICMP Reply報(bào)文承載到IP報(bào)文的數(shù)據(jù)部分并發(fā)送。
客戶端接收到服務(wù)端發(fā)送的ICMP Reply報(bào)文之后,檢查Magic字段是否33448899,如果不一致,則丟棄,否則,提取ICMP Reply報(bào)文的長(zhǎng)度字段,根據(jù)ICMP Reply報(bào)文的長(zhǎng)度字段,讀取ICMP Reply報(bào)文的信息承載字段中攜帶的響應(yīng)信息,并格式化顯示到命令行工具上供用戶查看。用戶分析 PS命令輸出的進(jìn)程信息,查看各個(gè)進(jìn)程vmsize,檢查是否有異常數(shù)據(jù)值,即可大致分析出哪個(gè)進(jìn)程執(zhí)行不太正常。
本發(fā)明實(shí)施例提供的基于ICMP協(xié)議的信息獲取方法實(shí)現(xiàn)簡(jiǎn)單,通過對(duì)命令的擴(kuò)展可以更多的了解網(wǎng)關(guān)內(nèi)部系統(tǒng)的運(yùn)行情況,對(duì)于診斷網(wǎng)關(guān)設(shè)備的運(yùn)行情況有很好的實(shí)用性。
基于與上述方法實(shí)施例相同或相似的構(gòu)思,本發(fā)明實(shí)施例還提供一種客戶端設(shè)備,設(shè)置在終端上,用于網(wǎng)關(guān)故障診斷,參見圖5,為本發(fā)明實(shí)施例提出的客戶端設(shè)備的結(jié)構(gòu)示意圖,如圖5所示,該客戶端設(shè)備包括:
第一構(gòu)造單元11,用于構(gòu)造ICMP Echo報(bào)文,將用戶輸入命令設(shè)置在ICMP Echo報(bào)文的數(shù)據(jù)區(qū);
第一發(fā)送單元12,用于將ICMP Echo報(bào)文發(fā)送給服務(wù)端;
第一接收單元13,用于接收服務(wù)端發(fā)送的與所述ICMP Echo報(bào)文對(duì)應(yīng)的ICMP Reply報(bào)文;
第一解析單元14,用于解析ICMP Reply報(bào)文的數(shù)據(jù)區(qū)攜帶的針對(duì)用戶輸入命令的響應(yīng)信息。
本發(fā)明實(shí)施例中,所述客戶端設(shè)備還包括:
展示單元15,用于將所述針對(duì)用戶輸入命令的響應(yīng)信息展示給用戶。
本發(fā)明實(shí)施例中,所述ICMP Echo報(bào)文和ICMP Reply報(bào)文均為ICMP報(bào)文;ICMP報(bào)文包括報(bào)文頭部和數(shù)據(jù)區(qū),其中,報(bào)文頭部包括報(bào)文類型標(biāo)識(shí)和代碼字段;數(shù)據(jù)區(qū)包括:Magic字段、長(zhǎng)度字段和信息承載字段;
第一構(gòu)造單元11具體用于:
設(shè)置ICMP Echo報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段;
填充ICMP Echo報(bào)文的Magic字段;
計(jì)算用戶輸入命令的長(zhǎng)度,將計(jì)算得到的長(zhǎng)度填充到ICMP Echo報(bào)文的長(zhǎng)度字段,
將用戶輸入命令填充到ICMP Echo報(bào)文的信息承載字段。
本發(fā)明實(shí)施例中,所述第一解析單元14具體包括:
第一檢測(cè)模塊141,用于檢測(cè)ICMP Echo報(bào)文的Magic字段與ICMP Reply報(bào)文中的Magic字段是否匹配;
第一讀取模塊142,用于當(dāng)檢測(cè)結(jié)果為匹配時(shí),根據(jù)ICMP Reply報(bào)文的長(zhǎng)度字段,讀取ICMP Reply報(bào)文的信息承載字段中攜帶的響應(yīng)信息。
本發(fā)明實(shí)施例中,所述第一發(fā)送單元12具體用于:通過網(wǎng)絡(luò)連接端口將ICMP Echo報(bào)文發(fā)送給服務(wù)端。
基于與上述方法實(shí)施例相同或相似的構(gòu)思,本發(fā)明實(shí)施例還提供一種服務(wù)端設(shè)備,設(shè)置在網(wǎng)關(guān)設(shè)備上,用于網(wǎng)關(guān)故障診斷,參見圖6,為本發(fā)明實(shí)施例提出的服務(wù)端設(shè)備的結(jié)構(gòu)示意圖,如圖6所示,該服務(wù)端設(shè)備包括:
第二接收單元21,用于接收客戶端發(fā)送的ICMP Echo報(bào)文;
第二解析單元22,用于解析ICMP Echo報(bào)文中攜帶的用戶輸入命令;
處理單元23,用于對(duì)用戶輸入命令進(jìn)行處理,并生成針對(duì)用戶輸入命令的響應(yīng)信息;
第二構(gòu)造單元24,用于構(gòu)造ICMP Reply報(bào)文,將針對(duì)用戶輸入命令的響應(yīng)信息設(shè)置在ICMP報(bào)文的數(shù)據(jù)區(qū);
第二發(fā)送單元25,用于將ICMP Reply報(bào)文發(fā)送給客戶端。
本發(fā)明實(shí)施例中,所述第二解析單元22具體包括:
第二檢測(cè)模塊221,用于檢測(cè)ICMP Echo報(bào)文的Magic字段是否為指定的Magic字段;
第二讀取模塊222,用于當(dāng)測(cè)ICMP Echo報(bào)文的Magic字段是指定的Magic字段時(shí),根據(jù)ICMP Echo報(bào)文的長(zhǎng)度字段,讀取ICMP Echo報(bào)文的信息承載字段中攜帶的用戶輸入命令;
所述第二構(gòu)造單元24具體用于:
設(shè)置ICMP Reply報(bào)文的報(bào)文類型標(biāo)識(shí)和代碼字段;
填充ICMP Reply報(bào)文的Magic字段;
計(jì)算響應(yīng)信息的長(zhǎng)度,將計(jì)算得到的長(zhǎng)度填充到ICMP Reply報(bào)文的長(zhǎng)度字段,
將響應(yīng)信息填充到ICMP Reply報(bào)文的信息承載字段。
其中,第二發(fā)送單元25具體用于通過網(wǎng)絡(luò)連接端口將ICMP Reply報(bào)文發(fā)送給客戶端。
需要說明的是,以上所述的實(shí)施例僅是為了便于本領(lǐng)域的技術(shù)人員理解而已,并不用于限制本發(fā)明的保護(hù)范圍,在不脫離本發(fā)明的發(fā)明構(gòu)思的前提下,本領(lǐng)域技術(shù)人員對(duì)本發(fā)明所做出的任何顯而易見的替換和改進(jìn)等均在本發(fā)明的保護(hù)范圍之內(nèi)。