IP地址合法性判斷及子網(wǎng)檢測(cè)_大學(xué)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁(yè)
IP地址合法性判斷及子網(wǎng)檢測(cè)_大學(xué)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁(yè)
IP地址合法性判斷及子網(wǎng)檢測(cè)_大學(xué)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁(yè)
IP地址合法性判斷及子網(wǎng)檢測(cè)_大學(xué)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁(yè)
IP地址合法性判斷及子網(wǎng)檢測(cè)_大學(xué)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩18頁(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é)院實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)名稱IP地址合法性判斷及子網(wǎng)檢驗(yàn)課程名稱計(jì)算機(jī)科學(xué)與技術(shù)姓名成績(jī)班級(jí)學(xué)號(hào)日期2013年1月地點(diǎn)計(jì)算機(jī)學(xué)院一. 實(shí)驗(yàn)?zāi)康谋驹O(shè)計(jì)要求編輯寫程序,判斷一個(gè)ip地址是否合法,并判斷該地址是否屬于一個(gè)給定子網(wǎng),從而考察讀者是否對(duì)ip地址概念及其子網(wǎng)劃分有非常清楚的認(rèn)識(shí)。1加深對(duì)IP地址及subnet的認(rèn)識(shí);2了解IP地址的劃分;3. 了解subnet的作用和產(chǎn)生因素,subnet的劃分;4. 實(shí)際操作編寫規(guī)則,匹配IP和subnet,加深理解二. 設(shè)計(jì)要求在掌握ip地址表示方法及子網(wǎng)劃分方法的基礎(chǔ)上,按如下要求完成程序。1:命令格式:ip_test subnet/mask

2、ip_addr其中,ip_test為程序名;subnet為子網(wǎng)號(hào),mask是一個(gè)數(shù)值,代表子網(wǎng)掩碼連續(xù)1的個(gè)數(shù),ip_addr是要測(cè)試的ip地址。2:判斷subnet和ip_addr的合法性。在判斷ip地址合法性時(shí)要自行編代碼,不要使用任何inet函數(shù)。判斷時(shí)要考慮全面。3:判斷掩碼的合法性。4:在ip地址合法的前提下,判斷ip_addr是否屬于子網(wǎng)subnet。5:輸出命令行中的ip是否合法,掩碼是否合法,以及ip_addr是否屬于子網(wǎng)subnet.三. 實(shí)驗(yàn)環(huán)境(軟件、硬件及條件)1軟件操作系統(tǒng):Windows xp(Windows NT以上版本皆可)編程環(huán)境:Microsoft Visu

3、al Studio 2008(兼容MS VS2005,亦可使用VC6.0等)編程語(yǔ)言:C+測(cè)試環(huán)境: MS-DOS2硬件現(xiàn)階段常見PC四. 實(shí)驗(yàn)方法Part 1 實(shí)驗(yàn)原理我們說(shuō)過(guò)因特網(wǎng)是把全世界的無(wú)數(shù)個(gè)網(wǎng)絡(luò)連接起來(lái)的一個(gè)龐大的網(wǎng)間網(wǎng),每個(gè)網(wǎng)絡(luò)中的計(jì)算機(jī)通過(guò)其自身的IP地址而被唯一標(biāo)識(shí)的,據(jù)此我們也可以設(shè)想,在Internet上這個(gè)龐大的網(wǎng)間網(wǎng)中,每個(gè)網(wǎng)絡(luò)也有自己的標(biāo)識(shí)符。我們把計(jì)算機(jī)的IP地址也分成兩部分,分別為網(wǎng)絡(luò)標(biāo)識(shí)和主機(jī)標(biāo)識(shí)。同一個(gè)物理網(wǎng)絡(luò)上的所有主機(jī)都用同一個(gè)網(wǎng)絡(luò)標(biāo)識(shí),網(wǎng)絡(luò)上的一個(gè)主機(jī)(包括網(wǎng)絡(luò)上工作站、服務(wù)器和路由器等)都有一個(gè)主機(jī)標(biāo)識(shí)與其對(duì)應(yīng)IP地址的4個(gè)字節(jié)劃分為2個(gè)部分,一部分

4、用以標(biāo)明具體的網(wǎng)絡(luò)段,即網(wǎng)絡(luò)標(biāo)識(shí);另一部分用以標(biāo)明具體的節(jié)點(diǎn),即主機(jī)標(biāo)識(shí),也就是說(shuō)某個(gè)網(wǎng)絡(luò)中的特定的計(jì)算機(jī)號(hào)碼。另一方面,只有在一個(gè)網(wǎng)絡(luò)號(hào)下的計(jì)算機(jī)之間才能"直接"互通,不同網(wǎng)絡(luò)號(hào)的計(jì)算機(jī)要通過(guò)網(wǎng)關(guān)(Gateway)才能互通。但這樣的劃分在某些情況下顯得并十分不靈活。為此IP網(wǎng)絡(luò)還允許劃分成更小的網(wǎng)絡(luò),稱為子網(wǎng)(Subnet),這樣就產(chǎn)生了子網(wǎng)掩碼1. IP的尋址規(guī)則 (1).ip分類規(guī)則 a、 網(wǎng)絡(luò)地址必須唯一。 b、 網(wǎng)絡(luò)標(biāo)識(shí)不能以數(shù)字127開頭。在A類地址的第一位為0,數(shù)字127保留給內(nèi)部回送函數(shù)。 B類地址的前兩位為10;C類地址的前三位為110;D類地址的前四位為

5、 1110;E類地址的前五位為 11110。c、 網(wǎng)絡(luò)標(biāo)識(shí)的第一個(gè)字節(jié)不能為255。數(shù)字255作為廣播地址。 d、 網(wǎng)絡(luò)標(biāo)識(shí)的第一個(gè)字節(jié)不能為“0”,“0”表示該地址是本地主機(jī),不能傳送。e、不合法的IP地址類型:123.2.1123.23$.2.1123.2345.2.1123.23.45.1 2.主機(jī)尋址規(guī)則 a、主機(jī)標(biāo)識(shí)在同一網(wǎng)絡(luò)內(nèi)必須是唯一的。 b、主機(jī)標(biāo)識(shí)的各個(gè)位不能都為“1”,如果所有位都為“1”,則該機(jī)地址是廣播地址,而非主機(jī)的地址。 c、主機(jī)標(biāo)識(shí)的各個(gè)位不能都為“0”,如果各個(gè)位都為“0”,則表示“只有這個(gè)網(wǎng)絡(luò)”,而這個(gè)網(wǎng)絡(luò)上沒(méi)有任何主機(jī)。3.確定子網(wǎng)掩碼數(shù) 用于子網(wǎng)掩碼的位數(shù)

6、決定于可能的子網(wǎng)數(shù)目和每個(gè)子網(wǎng)的主機(jī)數(shù)目。在定義子網(wǎng)掩碼前,必須弄清楚本來(lái)使用的子網(wǎng)數(shù)和主機(jī)數(shù)目。 定義子網(wǎng)掩碼的步驟為: a、確定哪些組地址歸我們使用。比如我們申請(qǐng)到的網(wǎng)絡(luò)號(hào)為 “128.73.a.b”,該網(wǎng)絡(luò)地址為B類IP地址,網(wǎng)絡(luò)標(biāo)識(shí)為“128.73”,主機(jī)標(biāo)識(shí)為“a.b”。 b、根據(jù)我們現(xiàn)在所需的子網(wǎng)數(shù)以及將來(lái)可能擴(kuò)充到的子網(wǎng)數(shù),用宿主機(jī)的一些位來(lái)定義子網(wǎng)掩碼。比如我們現(xiàn)在需要12個(gè)子網(wǎng),將來(lái)可能需要16個(gè)。用第三個(gè)字節(jié)的前四位確定子網(wǎng)掩碼。前四位都置為“1”,即第三個(gè)字節(jié)為“11110000”,這個(gè)數(shù)我們暫且稱作新的二進(jìn)制子網(wǎng)掩碼。 c、把對(duì)應(yīng)初始網(wǎng)絡(luò)的各個(gè)位都置為“1”,即前兩個(gè)字

7、節(jié)都置為“1”,第四個(gè)字節(jié)都置為“0”,則子網(wǎng)掩碼的間斷二進(jìn)制形式為:“11111111.11111111.11110000.00000000” d、把這個(gè)數(shù)轉(zhuǎn)化為間斷十進(jìn)制形式為:“255.255.240.0” 這個(gè)數(shù)為該網(wǎng)絡(luò)的子網(wǎng)掩碼。4.IP掩碼的標(biāo)注 A、無(wú)子網(wǎng)的標(biāo)注法 對(duì)無(wú)子網(wǎng)的IP地址,可寫成主機(jī)號(hào)為0的掩碼。如IP地址210.73.140.5,掩碼為255.255.255.0,也可以缺省掩碼,只寫IP地址。 B、有子網(wǎng)的標(biāo)注法 有子網(wǎng)時(shí),一定要二者配對(duì)出現(xiàn)。以C類地址為例。IP地址中的前3個(gè)字節(jié)表示網(wǎng)絡(luò)號(hào),后一個(gè)字節(jié)既表明子網(wǎng)號(hào),又說(shuō)明主機(jī)號(hào),還說(shuō)明兩個(gè)IP地址是否屬于一個(gè)網(wǎng)段。

8、如果屬于同一網(wǎng)絡(luò)區(qū)間,這兩個(gè)地址間的信息交換就不通過(guò)路由器。如果不屬同一網(wǎng)絡(luò)區(qū)間,也就是子網(wǎng)號(hào)不同,兩個(gè)地址的信息交換就要通過(guò)路由器進(jìn)行。例如:假設(shè)maskwe為27,對(duì)于IP地址為210.73.140.5的主機(jī)來(lái)說(shuō),其主機(jī)標(biāo)識(shí)為00000101,對(duì)于IP地址為210.73.140.16的主機(jī)來(lái)說(shuō)它的主機(jī)標(biāo)識(shí)為00010000,以上兩個(gè)主機(jī)標(biāo)識(shí)的前面三位全是000,說(shuō)明這兩個(gè)IP地址在同一個(gè)網(wǎng)絡(luò)區(qū)域中,這兩臺(tái)主機(jī)在交換信息時(shí)不需要通過(guò)路由器進(jìn)行;210.73.60.1的主機(jī)標(biāo)識(shí)為00000001,210.73.60.252的主機(jī)標(biāo)識(shí)為11111100,這兩個(gè)主機(jī)標(biāo)識(shí)的前面三位000與011不同

9、,說(shuō)明二者在不同的網(wǎng)絡(luò)區(qū)域,要交換信息需要通過(guò)路由器。其子網(wǎng)上主機(jī)號(hào)各為1和252。Part 2 具體實(shí)現(xiàn)通過(guò)以上的原理,我們就知道了在檢驗(yàn)IP地址和子網(wǎng)檢驗(yàn)時(shí)應(yīng)該明確的問(wèn)題,關(guān)鍵的兩點(diǎn)就是把輸入的IP分解成各段,然后判斷子網(wǎng)號(hào),掩碼和ip地址的基本格式是否合法,其次:如果三者的基本格式都合法,才調(diào)用斷定,ip地址是否為子網(wǎng)成員,的函數(shù)。該函數(shù)同時(shí)判別子網(wǎng)號(hào)與掩碼是否匹配,子網(wǎng)號(hào)為全0或全1,主機(jī)號(hào)為全0、全1。1. 實(shí)現(xiàn)流程制定規(guī)則分別判斷子網(wǎng)號(hào),掩碼,ip是否合法設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)算法實(shí)現(xiàn)調(diào)試 測(cè)試數(shù)據(jù)分析2. 編程本部分的編程的主要目的是算法的實(shí)現(xiàn),主要的方法是C+中字符串處理。(1)類設(shè)計(jì)a

10、.屬性char ip15; /用于存放ip地址char ip_Temp15; /用于存放ip地址char subnet_mask18; /用于存放subnet_mask地址char subnet18; /用于存放subnet地址char subnet_Temp18; /用于存放subnet地址int mask; /用于存放mask(1的個(gè)數(shù))bool maskIsValid; /用于判斷的個(gè)數(shù)是否合適,或是否與subnet匹配b.方法構(gòu)造函數(shù),析構(gòu)函數(shù):ipTest(char *,char *); /自定義初始化類函數(shù)ipTest(); /析構(gòu)函數(shù) 主判斷函數(shù) (即主要的方法):void Al

11、lJudgment(); /判斷mask,subnet,ip的合法性問(wèn)題bool ipIsValid(char *); /判斷ip是否合法Bool subnetIsValid(char *); /判斷子網(wǎng)號(hào)subnet是否合法bool NoIllegalChar(char *); /ip,subnet地址中非法字符的判斷bool maskIsMatSubnet(int,char *);/判斷mask與subnet是否匹配工具函數(shù): void print(); /判斷ip是否為子網(wǎng)成員,并輸出判斷結(jié)果void split(char *,int *); /把單個(gè)字符地址轉(zhuǎn)換為十進(jìn)制數(shù)值型地址(含四

12、段)Int toBinary(int a); /十進(jìn)制int型數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制int型數(shù)據(jù)char * toString(int *a);/把二進(jìn)制int型數(shù)據(jù)轉(zhuǎn)換為一個(gè)整體的二進(jìn)制字符型數(shù)據(jù) (2)主函數(shù)int main(int argc,char *argv) 函數(shù) 1.獲取參數(shù) 2.簡(jiǎn)單判斷參數(shù)格式(長(zhǎng)度) 3.若是正常參數(shù),實(shí)例化 ipTest類 4.調(diào)用主判斷函數(shù)void AllJudgment() 判斷 5.輸出結(jié)果 (3)程序流程(4)頭文件#include <iostream>#include <stdlib.h>#include <stdio.h

13、>#include <string.h>#include <math.h>#include <ctype.h>using namespace std;五. 實(shí)驗(yàn)分析及測(cè)試本部分測(cè)試了正常輸入和非法輸入時(shí),程序?qū)斎氲呐袛?,編程的環(huán)境為VS2008,在解決方案文件夾下面的Debug文件夾里面生成可執(zhí)行文件;運(yùn)行MS-DOS,進(jìn)入Debug文件夾進(jìn)行測(cè)試。1.算法正確性檢測(cè)(1)用正確格式和合法的數(shù)據(jù)的輸入,測(cè)試Mask和IP的匹配測(cè)試數(shù)據(jù): IP:128.196.33.12 Mask:15和16分析:IP:128.196.33.12屬于B類IP地址,前1

14、6位位網(wǎng)絡(luò)段,后16位為主機(jī)段,所以Mask至少為16結(jié)果截圖:(2)用正確格式和合法的數(shù)據(jù)的輸入,測(cè)試主網(wǎng)和子網(wǎng)的匹配測(cè)試數(shù)據(jù): 主網(wǎng)IP:128.196.33.12子網(wǎng)IP:128.196.127.17 和128.196.63.17 Mask:18分析:主網(wǎng)IP 和子網(wǎng)IP都是屬于B類IP地址, 前8位為網(wǎng)絡(luò)段,后8位為主機(jī)段,Mask至少為16由于Mask為18,可知道在主機(jī)段中前兩位,也就是IP地址的第9,10位為子網(wǎng)號(hào)(18-16=2);而B 類IP地址的子網(wǎng)掩碼為255.255.0.0所以可知:IP:128.196.33.12 1000 0000.1100 0100.0010 00

15、01.0000 1100 2位相于,得:00Mask:255.255.0.0 1111 1111.1111 1111.0000 0000.0000 0000 2位相于,得:01IP:128.196.127.17 1000 0000.1000 0100.0111 1111.0001 0001結(jié)果為不匹配。截圖:IP:128.196.33.12 1000 0000.1100 0100.0010 0001.0000 1100 2位相于,得:00Mask:255.255.0.0 1111 1111.1111 1111.0000 0000.0000 0000 2位相于,得:00IP:128.196.63

16、.17 1000 0000.1000 0100.0011 1111.0001 0001結(jié)果為匹配。截圖:(3)補(bǔ)充說(shuō)明:i)主網(wǎng)和子網(wǎng)匹配的時(shí)候,實(shí)際上的與運(yùn)算的位數(shù)是Mask個(gè)數(shù),即Mask有多少,就相與前多少個(gè)位。而以上例子中可知,B類IP地址的子網(wǎng)掩碼為255.255.0.0,所以前8位全是1,所以無(wú)論IP是多少,相與結(jié)果都是1,即不用考慮網(wǎng)絡(luò)段,直接相與主機(jī)段的前n 段即可,n=(mask-所屬網(wǎng)絡(luò)分類的主機(jī)段位數(shù))。本測(cè)試?yán)又形?。ii)考慮(2)中的兩個(gè)3個(gè)IP地址可以發(fā)現(xiàn)當(dāng)主網(wǎng)IP為128.196.33.12,mask為18時(shí),IP和子網(wǎng)掩碼相與,主機(jī)號(hào)前兩位為00,所以可推出

17、,子網(wǎng)IP的只需要主機(jī)段的前兩位為00,則都可以匹配,即子網(wǎng)IP的第3節(jié)(第17位到第24位)為00XX XXXX ,轉(zhuǎn)化為十進(jìn)制就是小于63的整數(shù)就可以匹配。2.輸入合法性測(cè)試本實(shí)驗(yàn)程序規(guī)定輸入的標(biāo)準(zhǔn)參數(shù)輸入格式為:X.X.X.X/MASK X.X.X.X ,其中:X為0-255的十進(jìn)制整數(shù),mask為0-32的十進(jìn)制整數(shù),兩個(gè)IP地址中間用空格分開,IP地址的為4段,每一段都用 “.”分開,IP地址中允許出現(xiàn)空格或其他字符(1)輸入的IP地址中含有非法字符測(cè)試數(shù)據(jù): 主網(wǎng)IP:128.196.33.a2 子網(wǎng)IP:12e.196.127.17 Mask:1h結(jié)果截圖:(2)輸入的IP地址段

18、數(shù)不正確測(cè)試數(shù)據(jù): 主網(wǎng)IP:128.33.12 子網(wǎng)IP:126.196. Mask:18結(jié)果截圖:(3)沒(méi)有輸入mask測(cè)試數(shù)據(jù): 主網(wǎng)IP:128.196.33.12 子網(wǎng)IP:128.196.33.11 結(jié)果截圖: (4)輸入mask超出合法范圍測(cè)試數(shù)據(jù): 主網(wǎng)IP:128.196.33.12 子網(wǎng)IP:128.196.33.11 Mask:35結(jié)果截圖:(5)輸入IP超出合法范圍測(cè)試數(shù)據(jù): 主網(wǎng)IP:555.196.33.12 子網(wǎng)IP:128.999.33.11 Mask:25結(jié)果截圖:(6)特殊的IP地址測(cè)試數(shù)據(jù): 主網(wǎng)IP:0.0.0.0 子網(wǎng)IP:127.1.1.1 Mask

19、:0結(jié)果截圖: 測(cè)試數(shù)據(jù): 主網(wǎng)IP:0.0.0.0 子網(wǎng)IP:255.255.255.255 Mask:0結(jié)果截圖:六. 實(shí)驗(yàn)結(jié)論本實(shí)驗(yàn)根據(jù)現(xiàn)在通用的IP地址分配使用規(guī)則,設(shè)計(jì)實(shí)驗(yàn)算法,運(yùn)用C+字符轉(zhuǎn)函數(shù)處理,程序?qū)崿F(xiàn)了基本要求的功能,考慮到了多方面的因素;另一方面,設(shè)計(jì)之初的思路把此程序定位在接口工具程序,所以省略掉UI的設(shè)計(jì),考慮到了擴(kuò)展性的方面需要,程序提供簡(jiǎn)單、方便的接口和較為簡(jiǎn)單參數(shù),方便擴(kuò)展使用。仍存在的問(wèn)題:數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)不夠清晰簡(jiǎn)練和方便使用,可讀性不太好;主函數(shù)流程存在一定的問(wèn)題,理路不是很清晰,主要是類的各個(gè)方法的設(shè)計(jì)沒(méi)有總體考慮,設(shè)計(jì)之初沒(méi)有考慮,在需要時(shí)才加,導(dǎo)致程序

20、結(jié)構(gòu)有點(diǎn)亂,不易閱讀和檢查。七. 附錄 源代碼說(shuō)明:源文件語(yǔ)言:C+文件數(shù):1源文件名:ipTest.cpp#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <ctype.h>using namespace std;/ipTest類定義class ipTestchar ip15; /用于存放ip地址char ip_Temp15; /用于存放ip地址char subnet_m

21、ask18; /用于存放subnet_mask地址char subnet18; /用于存放subnet地址 char subnet_Temp18; /用于存放subnet地址int mask; /用于存放mask(1的個(gè)數(shù))bool maskIsValid; /用于判斷的個(gè)數(shù)是否合適,或是否與subnet匹配public:ipTest(char *,char *); /自定義初始化類函數(shù)ipTest(); /析構(gòu)函數(shù)bool ipIsValid(char *); /判斷ip是否合法bool subnetIsValid(char *); /判斷子網(wǎng)號(hào)subnet是否合法bool NoIllega

22、lChar(char *); /ip,subnet地址中非法字符的判斷bool maskIsMatSubnet(int,char *);/判斷mask與subnet是否匹配void AllJudgment(); /判斷mask,subnet,ip的合法性問(wèn)題 void print(); /判斷ip是否為子網(wǎng)成員,并輸出判斷結(jié)果void split(char *,int *); /把單個(gè)字符地址轉(zhuǎn)換為十進(jìn)制數(shù)值型地址(含四段)int toBinary(int a); /十進(jìn)制int型數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制int型數(shù)據(jù)char * toString(int *a);/把二進(jìn)制int型數(shù)據(jù)轉(zhuǎn)換為一個(gè)整體的

23、二進(jìn)制字符型數(shù)據(jù);/main主函數(shù)int main(int argc,char *argv) /自動(dòng)讀取數(shù)據(jù)/cout<<"目錄地址:"<<argv0<<endl; /argv0表示ipTest.exe的保存目錄地址cout<<"subnet_mask : "<<argv1<<endl; /argv1表示第二個(gè)參數(shù),即subnet/mask cout<<"ip地址: "<<argv2<<endl<<endl;/arg

24、v2表示第三個(gè)參數(shù),即ip/判斷段數(shù)是否輸入合法if(argc!=3) /argc表示輸入的參數(shù)個(gè)數(shù),無(wú)參數(shù)輸入時(shí),其值為,因?yàn)槟J(rèn)argv0總是有的cout<<"輸入非法!"return 0;else/先簡(jiǎn)單判斷subnet/mask的長(zhǎng)度if(strlen(argv1)>18)cout<<"subnet/mask 輸入非法!"system("pause");return 0;/先簡(jiǎn)單判斷ip的長(zhǎng)度if(strlen(argv2)>15)cout<<"ip 輸入非法!&quo

25、t;system("pause");return 0;ipTest test(argv1,argv2); /實(shí)例化類,傳入兩個(gè)參數(shù)test.AllJudgment();/調(diào)用函數(shù),判斷mask,subnet,ip的合法性問(wèn)題system("pause");/系統(tǒng)暫停return 0;/構(gòu)造函數(shù)ipTest:ipTest(char *subnet_mask,char *ip)maskIsValid=true; /設(shè)置maskIsValid默認(rèn)為合法char temp2;/定義變量int i,len;len=strlen(subnet_mask); /*從s

26、ubnet/mask中分離出subnet地址*/for(i=0;i<len && subnet_maski!='/'i+)this->subneti=subnet_maski;this->subnet_Tempi=subnet_maski;subnet_Tempi='0' subneti='0' /*判斷mask是否為數(shù)值*/if(len-(i+1)<3&&len-(i+1)>0) /判斷mask是否為一/二位字節(jié)if(len-(i+1)=1) /表明mask是一位temp0=subn

27、et_maski+1;/判斷字符是否為數(shù)值型字符if(!isdigit(temp0) /isdigit()為庫(kù)函數(shù),可以調(diào)用cout<<"mask中含有非數(shù)字的非法字符,error!"<<endl;maskIsValid=false; /mask不是數(shù)值,則設(shè)置為falseelse if(len-3)=i) /表明mask是二位 temp0=subnet_maski+1; temp1=subnet_maski+2; if(!(isdigit(temp0) && isdigit(temp1) cout<<"mask

28、中含有非數(shù)字的非法字符,error!"<<endl; maskIsValid=false; mask=atoi(temp); /自動(dòng)把數(shù)字字符轉(zhuǎn)換為對(duì)應(yīng)的十進(jìn)制數(shù)值的函數(shù)if(mask<0 | mask>32)maskIsValid=false;else /表明mask為空或字節(jié)超出范圍cout<<"mask為空或超出范圍,error!"<<endl;maskIsValid=false; /若mask是三位數(shù),則表明mask輸入非法(其實(shí)為32) /*/strcpy(this->subnet_mask,subn

29、et_mask); /給subnet_mask賦值strcpy(this->ip,ip); /給ip賦值strcpy(this->ip_Temp,ip); /給ip_temp賦值/判斷mask,subnet,ip的合法性問(wèn)題void ipTest:AllJudgment()/設(shè)置標(biāo)志subnet地址是否合法的bool型變量,并調(diào)用subnetIsValid函數(shù)判斷bool subnetIsV=subnetIsValid(subnet_Temp); /設(shè)置標(biāo)記ip地址是否合法的bool型變量,并調(diào)用ipIsValid函數(shù)判斷bool ipIsV=ipIsValid(ip_Temp);

30、 /設(shè)置標(biāo)記mask與subnet地址是否匹配的bool型變量,并調(diào)用maskIsMatSubnet函數(shù)判斷bool maskIsMatSub=maskIsMatSubnet(mask,subnet_Temp);cout<<endl; /*判斷返回的值是否為真*/if(!maskIsValid) /表示返回的maskIsValid是falsecout<<"mask輸入非法!(mask為整數(shù)并在-32范圍內(nèi))"<<endl;elsecout<<"mask合法!"<<endl;if(!maskIsM

31、atSub)/表示返回的maskIsMatSub是falsecout<<"mask與subnet不匹配,error!"<<endl;elsecout<<"mask與subnet匹配!"<<endl;if(!subnetIsV)/表示返回的subnetIsV是falsecout<<"subnet地址非法!"<<endl;elsecout<<"subnet地址合法!"<<endl;if(!ipIsV)/表示返回的ipIsV是

32、falsecout<<"ip地址非法!"<<endl;elsecout<<"ip地址合法!"<<endl;/都合法if(maskIsValid && maskIsMatSub && subnetIsV && ipIsV)print();/判斷mask與subnet是否匹配bool ipTest:maskIsMatSubnet(int mask,char *subnet_Temp)int nbsubnet4;/用于放十進(jìn)制的各段地址/調(diào)用把單個(gè)字符地址轉(zhuǎn)換為十進(jìn)

33、制數(shù)值型地址(含四段)的函數(shù),實(shí)現(xiàn)轉(zhuǎn)換split(subnet_Temp,nbsubnet); /subnet是A類地址if(nbsubnet0>0 && nbsubnet0<127 && mask<8)/mask的值小于cout<<"mask與subnet不匹配,error!"<<endl;return false;/subnet是B類地址if(nbsubnet0>=128 && nbsubnet0<=191 && mask<16) /mask的值小

34、于cout<<"mask與subnet不匹配,error!"<<endl;return false;/subnet是C類地址if(nbsubnet0>=192 && nbsubnet0<=223 && mask<24)/mask的值小于cout<<"mask與subnet不匹配,error!"<<endl;return false;/mask與subnet地址匹配return true;/把單個(gè)字符地址轉(zhuǎn)換為十進(jìn)制數(shù)值型地址(含四段)void ipTest:

35、split(char *chaddr,int *addr)char ch=" ."char *token,*dot4;int iplen=0;token=strtok(chaddr,ch);while(token!=NULL)dotiplen=token;addriplen=atoi(dotiplen);/atoi()函數(shù)把字符數(shù)值轉(zhuǎn)換為int型數(shù)值iplen+;token=strtok(NULL,ch);/ip,subnet地址中非法字符的判斷bool ipTest:NoIllegalChar(char *ch)int i,len=strlen(ch);for(i=0;i

36、<len;i+)if(chi-'0'>9 | chi-'0'<0)return false;return true;/判斷ip是否合法bool ipTest:ipIsValid(char *ip)/*把地址分為四段,保存在dot中*/char ch=" ."char ip_one18;strcpy(ip_one,ip);char *token,*dot4;int iplen=0;/庫(kù)函數(shù)strtok(),以ch為界限來(lái)分段token=strtok(ip_one,ch);while(token!=NULL)dotiplen=t

37、oken;iplen+;token=strtok(NULL,ch);/此時(shí),第一個(gè)參數(shù)必須換為NULL /*判斷地址中的段數(shù)*/if(iplen!=4)cout<<"地址"<<ip<<"的段數(shù)不是,error!"<<endl;return false; /*判斷地址中的'.'是否正確*/int j,t=0;for(j=0;j<=strlen(ip);j+)if(ipj='.')t+;if(t!=3)cout<<"地址"<<ip

38、<<"中的'.'不是,error!"<<endl;return false; /*判斷地址是否含有非法字符,每段地址數(shù)值溢出*/int i;for(i=0;i<iplen;i+)if(!NoIllegalChar(doti) | atoi(doti)>255)if(!NoIllegalChar(doti) /判斷含有非法字符cout<<"地址"<<ip<<"中含有非數(shù)字的非法字符,error!"<<endl;if(atoi(doti)&

39、gt;255) /判斷數(shù)值溢出cout<<"地址"<<ip<<"中含有不在-255間的數(shù)字,error!"<<endl;return false; /*判斷全或全的情況*/int flag=1;/首先設(shè)置為非法,即全for(i=0;i<iplen;i+)if(atoi(doti)!=0)/含有非的字段flag=0; if(flag=1)cout<<"地址"<<ip<<"全為全,error!"<<endl;retur

40、n false;flag=1;/首先設(shè)置為非法,即全for(i=0;i<iplen;i+)if(atoi(doti)!=255)flag=0;if(flag=1) cout<<"地址"<<ip<<"全為全,error!"<<endl; return false; /*以下判斷ip地址主機(jī)號(hào)*/ int j1=0,j2;/if(ip=ip_Temp)/首先判斷ip是哪類地址if(atoi(dot0)>0&&atoi(dot0)<127) /A類ip地址j1=1; /直接從開始

41、if(atoi(dot0)=127) /為的特殊號(hào)cout<<"ip地址"<<ip<<"網(wǎng)絡(luò)號(hào)為!,error!"<<endl;return false;if(atoi(dot0)>=128&&atoi(dot0)<=191) /B類ip地址j1=2;if(atoi(dot0)>=192&&atoi(dot0)<=223) /C類ip地址j1=3;if(atoi(dot0)>223&&atoi(dot0)<255)cout&

42、lt;<"請(qǐng)重新輸入ip地址"<<ip<<",僅限于A,B和C類ip地址,error!"<<endl;return false;/*if(atoi(dot0)=255) cout<<"ip地址"<<ip<<"網(wǎng)絡(luò)號(hào)全為,error!"<<endl;return false;*/j2=j1; /j1用于判斷全情況,j1用于判斷全情況的起始下標(biāo)int flag=1;/首先設(shè)置為非法,即主機(jī)號(hào)全 for(i=j1;i<iple

43、n;i+)if(atoi(doti)!=0) flag=0; if(flag=1) cout<<"ip地址"<<ip<<"的主機(jī)號(hào)全,error!"<<endl; return false;flag=1;/首先設(shè)置為非法,即全 for(i=j2;i<iplen;i+) if(atoi(doti)!=255)flag=0; if(flag=1) cout<<"ip地址"<<ip<<"的主機(jī)號(hào)全,error!"<<en

44、dl; return false;return true;/判斷子網(wǎng)號(hào)subnet是否合法bool ipTest:subnetIsValid(char *subnet)if(!ipIsValid(subnet) /調(diào)用判斷Ip的函數(shù)ipIsValid()進(jìn)行判斷return false;return true;/判斷ip是否為子網(wǎng)成員,并輸出判斷結(jié)果void ipTest:print() char subnet_one15,ip_one15; int nbip4,nbsubnet4,i;strcpy(subnet_one,subnet); /把subnet地址復(fù)制給subnet_onestrcpy(ip_one,ip); /把ipt地址復(fù)制給ip_one/split()函數(shù)把字符型的地址轉(zhuǎn)換為四段int型的地址split(subnet_one,nbsubnet); /用subnet_one而非subnet是為了保護(hù)subnet地址不被破壞split(ip_one,nbip);for(i=0;i<4;i+) nbipi=toBinary(nbipi);/將分離出來(lái)的十進(jìn)制轉(zhuǎn)換為二進(jìn)制nbsubneti=toBinary(nbsubn

溫馨提示

  • 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)論