IP地址合法性判斷與子網(wǎng)檢測_大學(xué)課程設(shè)計實(shí)驗(yàn)報告_第1頁
IP地址合法性判斷與子網(wǎng)檢測_大學(xué)課程設(shè)計實(shí)驗(yàn)報告_第2頁
IP地址合法性判斷與子網(wǎng)檢測_大學(xué)課程設(shè)計實(shí)驗(yàn)報告_第3頁
IP地址合法性判斷與子網(wǎng)檢測_大學(xué)課程設(shè)計實(shí)驗(yàn)報告_第4頁
IP地址合法性判斷與子網(wǎng)檢測_大學(xué)課程設(shè)計實(shí)驗(yàn)報告_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

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

3、ows xp (Windows NT以上版本皆可)編程環(huán)境:Microsoft Visual Studio 2008 (兼容 MS VS2005 亦可使用 VC6.0 等)編程語言:C+測試環(huán)境:MS-DOS2硬件現(xiàn)階段常見PC四 . 實(shí) 驗(yàn)方法Part 1 實(shí)驗(yàn)原理每個網(wǎng)絡(luò)中的我們說過因特網(wǎng)是把全世界的無數(shù)個網(wǎng)絡(luò)連接起來的一個龐大的網(wǎng)間網(wǎng),計算機(jī)通過其自身的IP 地址而被唯一標(biāo)識的,據(jù)此我們也可以設(shè)想,在 Internet 上這個龐大的網(wǎng)間網(wǎng)中,每個網(wǎng)絡(luò)也有自己的標(biāo)識符。我們把計算機(jī)的IP 地址也分成兩部分,分別為網(wǎng)絡(luò)標(biāo)識和主機(jī)標(biāo)識。同一個物理網(wǎng)絡(luò)上的所有主機(jī)都用同一個網(wǎng)絡(luò)標(biāo)識,網(wǎng)絡(luò)上的一個

4、主機(jī)(包括網(wǎng)絡(luò)上工作站、服務(wù)器和路由器等)都有一個主機(jī)標(biāo)識與其對應(yīng)IP 地址的 4 個字節(jié)劃分為2 個部分,一部分用以標(biāo)明具體的網(wǎng)絡(luò)段,即網(wǎng)絡(luò)標(biāo)識;另一部分用以標(biāo)明具體的節(jié)點(diǎn), 即主機(jī)標(biāo)識,也就是說某個網(wǎng)絡(luò)中的特定的計算機(jī)。另一方面,只有在一個網(wǎng)絡(luò)號下的計算機(jī)之間才能"直接”互通,不同網(wǎng)絡(luò)號的計算機(jī)要通過網(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ù)字127 開頭。 在 A 類地

5、址的第一位為0, 數(shù)字 127 保留給部回送函數(shù)。 B 類地址的前兩位為10; C 類地址的前三位為110; D 類地址的前四位為1110; E類地址的前五位為11110。c、 網(wǎng)絡(luò)標(biāo)識的第一個字節(jié)不能為255。數(shù)字 255 作為廣播地址。d、 網(wǎng)絡(luò)標(biāo)識的第一個字節(jié)不能為“ 0, ” “ 0表示該地址是本地主機(jī),不能傳送。 ”e、不合法的IP地址類型:123.2.1123.23$.2.1123.2345.2.1123.23.45.12 .主機(jī)尋址規(guī)則a、主機(jī)標(biāo)識在同一網(wǎng)絡(luò)必須是唯一的。b、主機(jī)標(biāo)識的各個位不能都為“1,”如果所有位都為“1,”則該機(jī)地址是廣播地址,而非主機(jī)的地址。c、主機(jī)標(biāo)識的

6、各個位不能都為“0,”如果各個位都為“0,”則表示 只有這個網(wǎng)絡(luò)”,而這個網(wǎng)絡(luò)上沒有任何主機(jī)。3 .確定子網(wǎng)掩碼數(shù)用于子網(wǎng)掩碼的位數(shù)決定于可能的子網(wǎng)數(shù)目和每個子網(wǎng)的主機(jī)數(shù)目。在定義子網(wǎng)掩碼 前,必須弄清楚本來使用的子網(wǎng)數(shù)和主機(jī)數(shù)目。定義子網(wǎng)掩碼的步驟為:a、確定哪些組地址歸我們使用。比如我們申請到的網(wǎng)絡(luò)號為I28.73.a.b,”該網(wǎng)絡(luò)地址為B類IP地址,網(wǎng)絡(luò)標(biāo)識為 128.73",主機(jī)標(biāo)識為 “a.b?!眀、根據(jù)我們現(xiàn)在所需的子網(wǎng)數(shù)以及將來可能擴(kuò)充到的子網(wǎng)數(shù),用宿主機(jī)的一些位來定 義子網(wǎng)掩碼。比如我們現(xiàn)在需要12個子網(wǎng),將來可能需要16個。用第三個字節(jié)的前四位確 定子網(wǎng)掩碼。前四位

7、都置為“1;即第三個字節(jié)為“11110000;這個數(shù)我們暫且稱作新的二進(jìn)制子網(wǎng)掩碼。c、把對應(yīng)初始網(wǎng)絡(luò)的各個位都置為“ 1,”即前兩個字節(jié)都置為“1,”第四個字節(jié)都置為“ 0,” 則子網(wǎng)掩碼的間斷二進(jìn)制形式為:“11111111.11111111.11110000.00000000”d、把這個數(shù)轉(zhuǎn)化為間斷十進(jìn)制形式為:“255.255.240.0這個數(shù)為該網(wǎng)絡(luò)的子網(wǎng)掩碼。4.IP掩碼的標(biāo)注A、無子網(wǎng)的標(biāo)注法對無子網(wǎng)的IP地址,可寫成主機(jī)號為0的掩碼。如IP地址210.73.140.5,掩碼為255.255.255.0,也可以缺省掩碼,只寫 IP地址。B、有子網(wǎng)的標(biāo)注法有子網(wǎng)時,一定要二者配對出

8、現(xiàn)。以C類地址為例。IP地址中的前3個字節(jié)表示網(wǎng)絡(luò)號,后一個字節(jié)既表明子網(wǎng)號,又說明主機(jī)號,還說明兩個 IP地址是否屬于一個網(wǎng)段。如 果屬于同一網(wǎng)絡(luò)區(qū)間,這兩個地址間的信息交換就不通過路由器。如果不屬同一網(wǎng)絡(luò)區(qū)間, 也就是子網(wǎng)號不同,兩個地址的信息交換就要通過路由器進(jìn)行。例如:假設(shè)maskwe為27,對于IP地址為 210.73.140.5的主機(jī)來說,其主機(jī)標(biāo)識為00000101 ,對于IP地址為210.73.140.16的主機(jī)來說它的主機(jī)標(biāo)識為00010000,以上兩個主機(jī)標(biāo)識的前面三位全是000,說明這兩個IP地址在同一個網(wǎng)絡(luò)區(qū)域中,這兩臺主機(jī)在交換信息時不需要通過路由器進(jìn)行;210.73

9、.60.1的主機(jī)標(biāo)識為 00000001, 210.73.60.252的主機(jī)標(biāo)識為 11111100,這兩個 主機(jī)標(biāo)識的前面三位 000與011不同,說明二者在不同的網(wǎng)絡(luò)區(qū)域,要交換信息需要通過路由器。其子網(wǎng)上主機(jī)號各為1和252。Part 2具體實(shí)現(xiàn)通過以上的原理,我們就知道了在檢驗(yàn) IP地址和子網(wǎng)檢驗(yàn)時應(yīng)該明確的問題,關(guān)鍵的 兩點(diǎn)就是把輸入的IP分解成各段,然后判斷子網(wǎng)號,掩碼和 ip地址的基本格式是否合法, 其次:如果三者的基本格式都合法,才調(diào)用斷定, ip地址是否為子網(wǎng)成員,的函數(shù)。 該函數(shù)同時判別子網(wǎng)號與掩碼是否匹配,子網(wǎng)號為全0或全1,主機(jī)號為全0、全1。1 .實(shí)現(xiàn)流程制定規(guī)則分別

10、判斷子網(wǎng)號,掩碼,ip是否合法匚口設(shè)計數(shù)據(jù)結(jié)構(gòu)算法實(shí)現(xiàn)調(diào)試測試數(shù)據(jù)分析2 .編程本部分的編程的主要目的是算法的實(shí)現(xiàn),主要的方法是C+中字符串處理。(1)類設(shè)計a.屬性char ip15;/用于存放ip地址char ip_Temp15; 用于存放 ip 地址char subnet_mask18; / 用于存放 subnet_mask 地址char subnet18; / 用于存放 subnet 地址char subnet_Temp18; / 用于存放 subnet 地址int mask; /用于存放 mask(1的個數(shù))bool maskIsValid;用于判斷的個數(shù)是否合適,或是否與subne

11、t匹配b.方法構(gòu)造函數(shù),析構(gòu)函數(shù):ipTest(char *,char *);/自定義初始化類函數(shù)ipTest(); /析構(gòu)函數(shù)主判斷函數(shù)(即主要的方法):void AllJudgment(); 判斷 mask,subnet,ip 的合法性問題bool ipIsValid(char *);判斷 ip 是否合法BoolsubnetIsValid(char *);判斷子網(wǎng)號 subnet 是否合法boolNoIllegalChar(char *);/ip,subnet 地址中非法字符的判斷bool maskIsMatSubnet(int,char *);/ 判斷 mask 與subnet 是否匹配

12、工具函數(shù):void print();判斷ip是否為子網(wǎng)成員,并輸出判斷結(jié)果void split(char *,int *);把單個字符地址轉(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)換為一個整體的二進(jìn)制字符型數(shù)據(jù)(2)主函數(shù)int main(int argc,char *argv口)函數(shù)1 .獲取參數(shù)2 .簡單判斷參數(shù)格式(長度)3 .若是正常參數(shù),實(shí)例化 ipTest類4 .調(diào)用主判斷函數(shù)void AllJudgment() 判斷5 .輸出結(jié)果(3)

13、程序流程不合法主判斷退出 輸出 print <)合法為帽M鼓 iplsValid(;h - *): $ubnetlsVlid(char*); NolllegalCharfch3i r): masklsMatSubnet( ntbool bool bool bcol構(gòu)造函數(shù) 實(shí)例化ipTest類判斷參數(shù)arg* argv口的類型數(shù)量合法性輸出繼續(xù)subnet mask ipAll Judgment。工具由戮%oid print。;void split(Ghr*dnt *);I nt toBtnaryfirt a: char* feD&totngt nt *a):(4)頭文件#inc

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

15、匹配測試數(shù)據(jù):IP : 128.196.33.12Mask:15 和 16分析:IP: 128.196.33.12 屬于B類IP地址,前16位位網(wǎng)絡(luò)段,后 16位為主機(jī)段,所以Mask至少為16結(jié)果截圖:M l Wndcg何31M通2mldLem-|pfp 12A1SMJJ.12/16 IMIMlISJI.C;jpTc5tXDEbuj>i|pTesil:.l?fc . J3t2Z1 V 129 .lirh .Jj.il孰Lfetx I26196t93 i12/1S工口村址:Md.K.n.uki- &t. j,1 Ehl fi utro<r T匹!. 不會擦 打戶翻 I 瞿灌

16、 <±S.Nn .Lret址仃 k k M1不 MH*如8位為IP地類IP地址的子網(wǎng)掩碼為 255.255.0.00010 0001.0000 1100工位相于,得:000000 0000.0000 00002位相于,得:010111 1111.0001 0001C:MiTe£t XD£rbua>i«Te£t 12 tf.J3a 12X16 12K心達(dá)址=12S aHJ3.11i哈法!n-ask±j suhn>ct JT:H!曲b地址合法I工水站進(jìn)iMUkl凝,1引)邙LH屬-JL工也 亍網(wǎng) 子相任角傲世t.(2)用

17、正確格式和合法的數(shù)據(jù)的輸入,測試主網(wǎng)和子網(wǎng)的匹配測試數(shù)據(jù):主網(wǎng)IP: 128.196.33.12子網(wǎng) IP: 128.196.127.17 和 128.196.63.17Mask: 18分析:主網(wǎng)IP和子網(wǎng)IP都是屬于B類IP地址,前8位為網(wǎng)絡(luò)段,后 主機(jī)段,Mask至少為16由于Mask為18,可知道在主機(jī)段中前兩位,也就是 址的第9, 10位為子網(wǎng)號(18-16=2);而B所以可知:IP: 128.196.33.12 1000 0000.1100 0100. 2 Mask:255.255.0.0 1111 1111.1111 1111.IP: 128.196.127.17 1000 000

18、0.1000 0100.結(jié)果為不匹配。截圖:IP: 128.196.33.12 1000 0000.1100 0100.2Mask:255.255.0.0 1111 1111.1111 1111.IP: 128.196.63.17 1000 0000.1000 0100.0010 0001.0000 1100位相于,得:000000 0000.0000 00002位相于,得:000011 1111.0001 0001結(jié)果為匹配。截圖:補(bǔ)充說明:i)主網(wǎng)和子網(wǎng)匹配的時候,實(shí)際上的與運(yùn)算的位數(shù)是Mask個數(shù),即Mask有多少,就相與前多少個位。而以上例子中可知,B類IP地址的子網(wǎng)掩碼為 255.2

19、55.0.0,所以前8位全是1,所以無論IP是多少,相與結(jié)果都是1,即不用考慮網(wǎng)絡(luò)段,直接相與主 機(jī)段的前n段即可,n= (mask-所屬網(wǎng)絡(luò)分類的主機(jī)段位數(shù))。本測試?yán)又形?2。ii)考慮(2)中的兩個 3個IP地址可以發(fā)現(xiàn)當(dāng)主網(wǎng)IP為128.196.33.12 , mask為18時,IP和子網(wǎng)掩碼相與,主機(jī)號前兩位為00,所以可推出,子網(wǎng)IP的只需要主機(jī)段的前兩位為00,則都可以匹配,即子網(wǎng) IP的第3節(jié)(第17位到第24位)為00XX XXXX,轉(zhuǎn)化為十進(jìn)制就是小于63的整數(shù)就可以匹配。2 .輸入合法性測試本實(shí)驗(yàn)程序規(guī)定輸入的標(biāo)準(zhǔn)參數(shù)輸入格式為:X.X.X.X/MASK X.X.X.X

20、 ,其中:X為0-255的十進(jìn)制整數(shù),mask為0-32的十進(jìn)制整數(shù),兩個 IP地址中間用空格分開, IP地址的為4段,每一段都用 “.”分開,IP地址中允許出現(xiàn)空格或其他字符(1)輸入的IP地址中含有非法字符測試數(shù)據(jù):主網(wǎng)IP : 128.196.33.a2子網(wǎng) IP : 12e.196.127.17Mask : 1h結(jié)果截圖:測試數(shù)據(jù): 主網(wǎng)IP: 128.196.33.12mask(2)輸入的IP地址段數(shù)不正確測試數(shù)據(jù):主網(wǎng)IP : 128.33.12子網(wǎng) IP : 126.196.Mask : 18結(jié)果截圖:(3)沒有輸入測試數(shù)據(jù):主網(wǎng)IP : 128.196.33.12子網(wǎng) IP :

21、 128.196.33.11結(jié)果截圖:(4)輸入mask超出合法圍子網(wǎng) IP : 128.196.33.11Mask:35結(jié)果截圖:(5)輸入IP超出合法圍測試數(shù)據(jù):主網(wǎng)IP: 555.196.33.12子網(wǎng) IP : 128.999.33.11Mask:25結(jié)果截圖:|門利句0出中2 強(qiáng)mdm 口【一斗七9山W.1必 126.9WJ1111 I巴|一* (U、W扁只可口上 55SJ96.31.12/2S 111,199.39.11SLibnecjfUitik :555.19&ri3312/25力地址;L21_m.31.H期悴G;招.建生畬爰,p- je-255目E野芝/FMPt處ka

22、cM.41珅皆看了jin干泉-出小尸上eh(6)特殊的IP地址測試數(shù)據(jù):主網(wǎng)IP : 0.0.0.0子網(wǎng) IP : 127.1.1.1Mask:0結(jié)果截圖:* nd zim Ei'rt=-m _2rr-z c ::«? 回 士5r 衛(wèi) 二- -】一UEHDT.CXD.M/fliit157,1,1 ,1“mm Mull s柑,用r%m計r址 t 127.i.i.i地址明>>*為青,,EFt而地址1WT_:L_1廚嵬號為127f . a*f測試數(shù)據(jù):主網(wǎng)IP : 0.0.0.0子網(wǎng) IP : 255.255.255.255Mask:0結(jié)果截圖:CsM?lsEtMhib

23、ugiJlplEiEl工殳5-2&%國25%義il曲址 -255,255 -255-255J也址喳為金延才£5 $ /5寫»工55 0 255金為全1.vmrfI*% k百法!iwsn sitlbnv t 匹0 己 T'uJano七幺止三EW上P地址把法!就任亳彼建與一 六.實(shí)驗(yàn)結(jié)論本實(shí)驗(yàn)根據(jù)現(xiàn)在通用的 IP地址分配使用規(guī)則,設(shè)計實(shí)驗(yàn)算法,運(yùn)用C+字符轉(zhuǎn)函數(shù)處理,程序?qū)崿F(xiàn)了基本要求的功能,考慮到了多方面的因素;另一方面,設(shè)計之初 的思路把此程序定位在接口工具程序,所以省略掉UI的設(shè)計,考慮到了擴(kuò)展性的方面需要,程序提供簡單、方便的接口和較為簡單參數(shù),方便擴(kuò)展

24、使用。仍存在的問題:數(shù)據(jù)結(jié)構(gòu)的設(shè)計不夠清晰簡練和方便使用,可讀性不太好;主函數(shù)流程存在一定的問題,理路不是很清晰,主要是類的各個方法的設(shè)計沒有總體考慮, 設(shè)計之初沒有考慮,在需要時才加,導(dǎo)致程序結(jié)構(gòu)有點(diǎn)亂,不易閱讀和檢查。七.附錄源代碼說明:源文件語言:C+文件數(shù):1源文件名:ipTest.cpp#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <ctype.h> usin

25、g namespace std;/ipTest類定義class ipTestchar ip15;/用于存放ip地址char ip_Temp15; / 用于存放ip 地址char subnet_mask18; / 用于存放subnet_mask 地址char subnet18; / 用于存放subnet 地址char subnet_Temp18; / 用于存放subnet 地址int mask; / 用于存放mask(1 的個數(shù) )bool maskIsValid; / 用于判斷的個數(shù)是否合適,或是否與subnet 匹配public:ipTest(char *,char *);/ 自定義初始化類

26、函數(shù)ipTest();/ 析構(gòu)函數(shù)bool ipIsValid(char *); / 判斷 ip 是否合法bool subnetIsValid(char *); / 判斷子網(wǎng)號subnet 是否合法bool NoIllegalChar(char *); /ip,subnet 地址中非法字符的判斷bool maskIsMatSubnet(int,char *);/ 判斷 mask 與 subnet 是否匹配void AllJudgment(); / 判斷 mask,subnet,ip 的合法性問題void print();/ 判斷 ip 是否為子網(wǎng)成員,并輸出判斷結(jié)果void split(cha

27、r *,int *);/ 把單個字符地址轉(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)換為一個整體的二進(jìn)制字符型數(shù)據(jù);/main 主函數(shù)int main(int argc,char *argv) / 自動讀取數(shù)據(jù)/cout<<" 目錄地址:"<<argv0<<endl;/argv0 表示 ipTest.exe 的保存目錄地址cout<<"subnet_mask :

28、"<<argv1<<endl;/argv1 表示第二個參數(shù),即subnet/maskcout<<"ip 地址 : "<<argv2<<endl<<endl;/argv2表示第三個參數(shù),即ip/ 判斷段數(shù)是否輸入合法if(argc!=3) /argc 表示輸入的參數(shù)個數(shù),無參數(shù)輸入時,其值為,因?yàn)槟J(rèn)argv0 總是有的cout<<" 輸入非法!"return 0;else/ 先簡單判斷subnet/mask 的長度if(strlen(argv1)>18)

29、cout<<"subnet/mask 輸入非法!"system("pause");return 0;/ 先簡單判斷ip 的長度if(strlen(argv2)>15)cout<<"ip 輸入非法! system("pause");return 0;ipTest test(argv1,argv2); / 實(shí)例化類,傳入兩個參數(shù)test.AllJudgment();/ 調(diào)用函數(shù),判斷mask,subnet,ip 的合法性問題system("pause");/ 系統(tǒng)暫停return

30、 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);/* 從 subnet/mask 中分離出subnet 地址 */for(i=0;i<len && subnet_maski!='/'i+)this->subneti=subnet_maski;this->subnet_Tempi=subnet_maski;subne

31、t_Tempi='0'subneti='0'/*判斷 mask 是否為數(shù)值*/if(len-(i+1)<3&&len-(i+1)>0)/ 判斷 mask 是否為一/二位字節(jié)if(len-(i+1)=1)/ 表明 mask 是一位temp0=subnet_maski+1;/ 判斷字符是否為數(shù)值型字符if(!isdigit(temp0) /isdigit() 為庫函數(shù),可以調(diào)用 cout<<"mask 中含有非數(shù)字的非法字符,error!"<<endl;maskIsValid=false; /m

32、ask 不是數(shù)值,則設(shè)置為falseelse if(len-3)=i)/ 表明 mask 是二位temp0=subnet_maski+1;temp1=subnet_maski+2;if(!(isdigit(temp0) && isdigit(temp1) cout<<"mask 中含有非數(shù)字的非法字符,error!"<<endl;maskIsValid=false; mask=atoi(temp); / 自動把數(shù)字字符轉(zhuǎn)換為對應(yīng)的十進(jìn)制數(shù)值的函數(shù)if(mask<0 | mask>32)maskIsValid=false;e

33、lse / 表明 mask 為空或字節(jié)超出圍cout<<"mask 為空或超出圍,error!"<<endl;32 )maskIsValid=false; / 若 mask 是三位數(shù),則表明mask 輸入非法(其實(shí)為/*/strcpy(this->subnet_mask,subnet_mask); / 給 subnet_mask 賦值strcpy(this->ip,ip); / 給 ip 賦值strcpy(this->ip_Temp,ip); / 給 ip_temp 賦值/ 判斷 mask,subnet,ip 的合法性問題void

34、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);函數(shù)判斷/ 設(shè)置標(biāo)記mask 與 subnet 地址是否匹配的bool 型變量,并調(diào)用maskIsMatSubnetbool maskIsMatSub=maskIsMatSubnet(mask,subnet_Temp);cout

35、<<endl;/*判斷返回的值是否為真*/if(!maskIsValid) / 表示返回的maskIsValid 是 falsecout<<"mask 輸入非法!(mask 為整數(shù)并在-32 圍 )"<<endl; else cout<<"mask 合法! "<<endl;if(!maskIsMatSub)/ 表示返回的maskIsMatSub 是 falsecout<<"mask 與 subnet 不匹配 ,error!"<<endl;else co

36、ut<<"mask 與 subnet 匹配 !"<<endl;if(!subnetIsV)/ 表示返回的subnetIsV 是 falsecout<<"subnet 地址非法!"<<endl; else cout<<"subnet 地址合法!"<<endl;if(!ipIsV)/ 表示返回的ipIsV 是 falsecout<<"ip 地址非法!"<<endl;else cout<<"ip 地址合法

37、!"<<endl;/ 都合法if(maskIsValid && maskIsMatSub && subnetIsV && ipIsV)print();/ 判斷 mask 與 subnet 是否匹配bool ipTest:maskIsMatSubnet(int mask,char *subnet_Temp)int nbsubnet4;/ 用于放十進(jìn)制的各段地址/ 調(diào)用把單個字符地址轉(zhuǎn)換為十進(jìn)制數(shù)值型地址(含四段)的函數(shù),實(shí)現(xiàn)轉(zhuǎn)換split(subnet_Temp,nbsubnet);/subnet 是A類地址if(nbsubn

38、et0>0 && nbsubnet0<127 && mask<8)/mask 的值小于cout<<"mask 與 subnet 不匹配 ,error!"<<endl;return false;/subnet 是B類地址if(nbsubnet0>=128 && nbsubnet0<=191 && mask<16)/mask 的值小于cout<<"mask 與 subnet 不匹配 ,error!"<<endl;

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

40、ot;char *token,*dot4;int iplen=0;token=strtok(chaddr,ch);while(token!=NULL)dotiplen=token;addriplen=atoi(dotiplen);/atoi() 函數(shù)把字符數(shù)值轉(zhuǎn)換為 iplen+;token=strtok(NULL,ch);int型數(shù)值/ip,subnet 地址中非法字符的判斷bool ipTest:NoIllegalChar(char *ch) int i,len=strlen(ch);for(i=0;i<len;i+)if(chi-'0'>9 | chi-

41、9;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;/ 庫函數(shù) strtok(), 以 ch 為界限來分段token=strtok(ip_one,ch);while(token!=NULL)dotiplen=token;iplen+;token=strtok(NULL,ch)

42、;/ 此時,第一個參數(shù)必須換為NULL*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<<" 中的 '.' 不是 ,er

43、ror!"<<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)>255) / 判斷數(shù)值溢出cout<<&

44、quot; 地址"<<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;return false;flag=1;/ 首先

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

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

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

48、toi(doti)!=0)flag=0;if(flag=1)cout<<"ip 地址 "<<ip<<" 的主機(jī)號全,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ī)號全,error!"<<endl;return

49、false;return true;/ 判斷子網(wǎng)號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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論