計算機網(wǎng)絡(luò)課程設(shè)計報告-IP地址的合法性及子網(wǎng)判斷_第1頁
計算機網(wǎng)絡(luò)課程設(shè)計報告-IP地址的合法性及子網(wǎng)判斷_第2頁
計算機網(wǎng)絡(luò)課程設(shè)計報告-IP地址的合法性及子網(wǎng)判斷_第3頁
計算機網(wǎng)絡(luò)課程設(shè)計報告-IP地址的合法性及子網(wǎng)判斷_第4頁
計算機網(wǎng)絡(luò)課程設(shè)計報告-IP地址的合法性及子網(wǎng)判斷_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機網(wǎng)絡(luò)課程設(shè)計報告IP地址的合法性及子網(wǎng)判斷問題描述1實驗?zāi)康暮兔枋瞿康模赫莆誌P地址的分類,準(zhǔn)確理解子網(wǎng)、掩碼的概念,確切地明了IP地址的合法格式。并判斷該地址是否屬于一個給定的子網(wǎng)。描述:設(shè)計要求編寫程序,實現(xiàn)判斷輸出命令行中的ip是否合法,掩碼是否合法以及ip_addr是否是屬于子網(wǎng)subnet。采用eclipse的開發(fā)工具,使用java編程實現(xiàn),在判斷ip地址合法性時,定義了一個靜態(tài)的方法,在方法里面,使用正則表達式來判斷ip地址的合法性,判斷子網(wǎng)掩碼也采用這樣的方法判斷,在判斷ip地址是否屬于某一個子網(wǎng)時。將ip地址一位與子網(wǎng)掩碼做與運算,看結(jié)果是否和子網(wǎng)相等來判斷ip地址是否屬于某一個網(wǎng)絡(luò)。Ip地址采用點分10進制的方法來表示,最大的數(shù)為255,最小的數(shù)為0,其中數(shù)字不能以0開頭。子網(wǎng)掩碼則只能有32種情況,其中網(wǎng)絡(luò)號全1,主機號全0,由1和0的個數(shù)來確定子網(wǎng)掩碼是否正確。在這個設(shè)計中考慮到了以上的種種情況,根據(jù)用戶輸入的ip地址,掩碼和子網(wǎng),程序可以判斷輸入的ip地址,掩碼和子網(wǎng)是否正確以及ip_addr是否是屬于子網(wǎng)subnet。概要設(shè)計(抽象數(shù)據(jù)類型定義)2.1設(shè)計內(nèi)容1.在判斷一個IP地址合法性時要自行編寫代碼,不要使用任何inet函數(shù)。2.程序要求為命令行程序,格式為:ip_testsubnetmaskip_addr其中,程序名稱為ip_test,參數(shù)為IP地址/子網(wǎng)掩碼,如:要測試的IP地址為202.113.16.10,子網(wǎng)號為202.113.16.0,子網(wǎng)掩碼為255.255.255.0,則命令行為:202.113.16.0255.255.255.0202.113.16.10。(因為255.255.255.0是連續(xù)的24個1,所以這樣表示)。3.子網(wǎng)號和子網(wǎng)掩碼的合法性也要檢查。4.運行結(jié)果提示需要提示:IP地址是否合法、子網(wǎng)掩碼是否合法和IP地址是否為子網(wǎng)成員。在判斷不合法IP時要考慮全面,比如以下情況均屬于不合法123..2.1123.23$.2.1123.2345.2.1123.23.45.2.15.判斷掩碼的合法性。6.輸出命令行中的ip是否合法,掩碼是否合法以及ip_addr是否是屬于子網(wǎng)subnet。2.2ip地址簡介所謂IP地址就是給每個連接在Internet上的主機分配的一個32bit地址。按照TCP/IP(TransportControlProtocol/InternetProtocol,傳輸控制協(xié)議/Internet協(xié)議)協(xié)議規(guī)定,IP地址用二進制來表示,每個IP地址長32bit,比特?fù)Q算成字節(jié),就是4個字節(jié)。例如一個采用二進制形式的IP地址是“00001010000000000000000000000001”,這么長的地址,人們處理起來也太費勁了。為了方便人們的使用,IP地址經(jīng)常被寫成十進制的形式,中間使用符號“.”分開不同的字節(jié)。于是,上面的IP地址可以表示為“10.0.0.1”。IP地址的這種表示法叫做“點分十進制表示法”,這顯然比1和0容易記憶得多。有人會以為,一臺計算機只能有一個IP地址,這種觀點是錯誤的。我們可以指定一臺計算機具有多個IP地址,因此在訪問互聯(lián)網(wǎng)時,不要以為一個IP地址就是一臺計算機;另外,通過特定的技術(shù),也可以使多臺服務(wù)器共用一個IP地址,這些服務(wù)器在用戶看起來就像一臺主機似的。將IP地址分成了網(wǎng)絡(luò)號和主機號兩部分,設(shè)計者就必須決定每部分包含多少位。網(wǎng)絡(luò)號的位數(shù)直接決定了可以分配的網(wǎng)絡(luò)數(shù)(計算方法2^網(wǎng)絡(luò)號位數(shù));主機號的位數(shù)則決定了網(wǎng)絡(luò)中最大的主機數(shù)(計算方法2^主機號位數(shù)-2)。然而,由于整個互聯(lián)網(wǎng)所包含的網(wǎng)絡(luò)規(guī)模可能比較大,也可能比較小,設(shè)計者最后聰明的選擇了一種靈活的方案:將IP地址空間劃分成不同的類別,每一類具有不同的網(wǎng)絡(luò)號位數(shù)和主機號位數(shù)。1.A類IP地址一個A類IP地址由1字節(jié)的網(wǎng)絡(luò)地址和3字節(jié)主機地址組成,地址范圍1.0.0.1-126.255.255.254(二進制表示為:00000001000000000000000000000001-01111110111111111111111111111110)。可用的A類網(wǎng)絡(luò)有126個,每個網(wǎng)絡(luò)能容納1600多萬個主機。2.B類IP地址一個B類IP地址由2個字節(jié)的網(wǎng)絡(luò)地址和2個字節(jié)的主機地址組成,網(wǎng)絡(luò)地址的最高位必須是“10”,地址范圍128.1.0.1-191.254.255.254(二進制表示為:10000000000000010000000000000001-10111111111111101111111111111110)。可用的B類網(wǎng)絡(luò)有16382個,每個網(wǎng)絡(luò)能容納6萬多個主機。3.C類IP地址一個C類IP地址由3字節(jié)的網(wǎng)絡(luò)地址和1字節(jié)的主機地址組成,網(wǎng)絡(luò)地址的最高位必須是“110”。范圍192.0.1.1-223.255.255.254(二進制表示為:11000000000000000000000100000001-11011111111111111111111011111110)。C類網(wǎng)絡(luò)可達209萬余個,每個網(wǎng)絡(luò)能容納254個主機。4.D類地址用于多點廣播(Multicast)。D類IP地址第一個字節(jié)以“1110”開始,它是一個專門保留的地址。它并不指向特定的網(wǎng)絡(luò),目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標(biāo)識共享同一協(xié)議的一組計算機。地址范圍224.0.0.1-239.255.255.2545.E類IP地址以“11110”開始,為將來使用保留。E類地址保留,僅作實驗和開發(fā)用。全零(“0.0.0.0”)地址指任意網(wǎng)絡(luò)。全“1”的IP地址(“255.255.255.255”)是當(dāng)前子網(wǎng)的廣播地址。2.3子網(wǎng)掩碼簡介通過IP地址的二進制與子網(wǎng)掩碼的二進制進行與運算進行定某個設(shè)備的網(wǎng)絡(luò)地址,也就是說通過子網(wǎng)掩碼分辨一個網(wǎng)絡(luò)的網(wǎng)絡(luò)部分和主機部分子網(wǎng)掩碼一旦設(shè)置,網(wǎng)絡(luò)地址和主機地址就固定了。相對于使用子網(wǎng)掩碼來識別網(wǎng)絡(luò)地址,早期的使用類別進行網(wǎng)絡(luò)地址的分類存在著地址大量浪費的不足。子網(wǎng)一個最顯著的特征就是具有子網(wǎng)掩碼。與IP地址相同,子網(wǎng)掩碼的長度也是32位,也可以使用十進制的形式。例如,為二進制形式的子網(wǎng)掩碼:11111111111111111111111100000000,采用十進制的形式為:。用于子網(wǎng)掩碼的位數(shù)決定于可能的子網(wǎng)數(shù)目和每個子網(wǎng)的主機數(shù)目。在定義子網(wǎng)掩碼前,必須弄清楚本來使用的子網(wǎng)數(shù)和主機數(shù)目。2.4ip地址的計算定義子網(wǎng)掩碼的步驟為:A、確定哪些組地址歸我們使用。比如我們申請到的網(wǎng)絡(luò)號為“210.73.a.b”,該網(wǎng)絡(luò)地址為C類IP地址,網(wǎng)絡(luò)標(biāo)識為“210.73.a”,主機標(biāo)識為“.b”。B、根據(jù)我們現(xiàn)在所需的子網(wǎng)數(shù)以及將來可能擴充到的子網(wǎng)數(shù),用宿主機的一些位來定義子網(wǎng)掩碼。比如我們現(xiàn)在需要12個子網(wǎng),將來可能需要16個。用第三個字節(jié)的前四位確定子網(wǎng)掩碼。前四位都置為“1”(即把第三字節(jié)的最后四位作為主機位,其實在這里有個簡單的規(guī)律,非網(wǎng)絡(luò)位的前幾位置1原網(wǎng)絡(luò)就被分為2的幾次方個網(wǎng)絡(luò),這樣原來網(wǎng)絡(luò)就被分成了2的4次方16個子網(wǎng)),即第三個字節(jié)為“11110000”,這個數(shù)我們暫且稱作新的二進制子網(wǎng)掩碼。C、把對應(yīng)初始網(wǎng)絡(luò)的各個位都置為“1”,即前兩個字節(jié)都置為“1”,第四個字節(jié)都置為“0”,則子網(wǎng)掩碼的間斷二進制形式為:“11111111.11111111.11110000.00000000”D、把這個數(shù)轉(zhuǎn)化為間斷十進制形式為:“”這個數(shù)為該網(wǎng)絡(luò)的子網(wǎng)掩碼。子網(wǎng)掩碼一共分為兩類。一類是缺省子網(wǎng)掩碼,一類是自定義子網(wǎng)掩碼。缺省子網(wǎng)掩碼即未劃分子網(wǎng),對應(yīng)的網(wǎng)絡(luò)號的位[1][2]都置1,主機號都置0。A類網(wǎng)絡(luò)缺省子網(wǎng)掩碼:B類網(wǎng)絡(luò)缺省子網(wǎng)掩碼:C類網(wǎng)絡(luò)缺省子網(wǎng)掩碼:自定義子網(wǎng)掩碼是將一個網(wǎng)絡(luò)劃分為幾個子網(wǎng),需要每一段使用不同的網(wǎng)絡(luò)號或子網(wǎng)號,實際上我們可以認(rèn)為是將主機號分為兩個部分:子網(wǎng)號、子網(wǎng)主機號。形式如下:未做子網(wǎng)劃分的ip地址:網(wǎng)絡(luò)號+主機號做子網(wǎng)劃分后的ip地址:網(wǎng)絡(luò)號+子網(wǎng)號+子網(wǎng)主機號也就是說ip地址在化分子網(wǎng)后,以前的主機號位置的一部分給了子網(wǎng)號,余下的是子網(wǎng)主機號。子網(wǎng)掩碼是32位二進制數(shù),它的子網(wǎng)主機標(biāo)誤用部分為全“0”。利用子網(wǎng)掩碼可以判斷兩臺主機是否中同一子網(wǎng)中。若兩臺主機的IP地址分別與它們的子網(wǎng)掩碼相“與”后的結(jié)果相同,則說明這兩臺主機在同一子網(wǎng)中。2.5子網(wǎng)劃分簡介子網(wǎng)的劃分,實際上就是設(shè)計子網(wǎng)掩碼的過程。子網(wǎng)掩碼主要是用來區(qū)分IP地址中的網(wǎng)絡(luò)ID和主機ID,它用來屏蔽IP地址的一部分,從IP地址中分離出網(wǎng)絡(luò)ID和主機ID.子網(wǎng)掩碼是由4個十進制數(shù)組成的數(shù)值"中間用"。"分隔,如。將它寫成二進制的形式為:11111111.11111111.11111111.00000000,其中為"1"的位分離出網(wǎng)絡(luò)ID,為"0"的位分離出主機ID,也就是通過將IP地址與子網(wǎng)掩碼進行"與"邏輯操作,得出網(wǎng)絡(luò)號。例如,假設(shè)IP地址為,子網(wǎng)掩碼為,則網(wǎng)絡(luò)ID為,主機ID為。計算機網(wǎng)絡(luò)ID的不同,則說明他們不在同一個物理子網(wǎng)內(nèi),需通過路由器轉(zhuǎn)發(fā)才能進行數(shù)據(jù)交換。每類地址具有默認(rèn)的子網(wǎng)掩碼:對于A類為,對于B類為,對于C類為。除了使用上述的表示方法之外,還有使用于網(wǎng)掩碼中"1"的位數(shù)來表示的,在默認(rèn)情況下,A類地址為8位,B類地址為16位,C類地址為24位。例如,A類的某個地址為/8,這里的最后一個"8"說明該地址的子網(wǎng)掩碼為8位,而/28表示網(wǎng)絡(luò)的子網(wǎng)掩碼位數(shù)有28位。如果希望在一個網(wǎng)絡(luò)中建立子網(wǎng),就要在這個默認(rèn)的于網(wǎng)掩碼中加入一些位,它減少了用于主機地址的位數(shù)。加入到掩碼中的位數(shù)決定了可以配置的于網(wǎng)。因而,在一個劃分了子網(wǎng)的網(wǎng)絡(luò)中,每個地址包含一個網(wǎng)絡(luò)地址、一個子網(wǎng)位數(shù)和一個主機地址.2.6課程設(shè)計過程以下為:主流程圖,驗證ip地址合法性流程圖,驗證子網(wǎng)掩碼合法性流程圖,,驗證ip是否屬于某個子網(wǎng)流程圖,2.6.1主流程圖:2.6.2驗證ip地址合法性流程圖2.6.3驗證子網(wǎng)掩碼合法性流程圖2.6.4驗證ip是否屬于某個子網(wǎng)流程圖詳細(xì)設(shè)計(主要算法和函數(shù)間的調(diào)用關(guān)系)packageqiu.ip;importjava.util.regex.Matcher;importjava.util.regex.Pattern;/***計算機網(wǎng)絡(luò)課程設(shè)計--IP地址的合法性及子網(wǎng)判斷*/publicclassIp_Test{ /* *使用正則表達式判斷ip地址是否正確 */ privatestaticbooleanisIp(Stringst){ Stringregex0="(2[0-4]\\d)"+"|(25[0-5])";//這里表示從200開始的數(shù) Stringregex1="1\\d{2}";//這里是100-200數(shù)的約定 Stringregex2="[1-9]\\d";//不能以0打頭的二位數(shù) Stringregex3="\\d";//0-9一位數(shù) Stringregex="("+regex0+")|("+regex1+")|("+regex2+")|(" +regex3+")";//每一個點分十進數(shù)都可以取上面的值 regex="("+regex+").("+regex+").("+regex+").("+regex +")";//加上"." Patternp=Ppile(regex);//預(yù)編譯這個正則表達式,使速度更快 Matcherm=p.matcher(st);//進行匹配 returnm.matches();//返回匹配結(jié)果 } /* *使用正則表達式判斷子網(wǎng)掩碼是否正確 */ privatestaticbooleanisMask(Stringst){//正則表達式列出了所有情況 Stringre="(254|252|248|240|224|192|128|0)\\.0\\.0\\.0|" +"255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|" +"255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|" +"255\\.255\\.255\\.(254|252|248|240|224|192|128|0)"; Patternp=Ppile(re); Matcherm=p.matcher(st); returnm.matches(); } /* *判斷ip地址是否屬于某一個網(wǎng)絡(luò) */ privatestaticbooleango(Strings1,Strings2,Strings3){ String[]s33=s3.split("\\.");//ip地址變數(shù)組 String[]s22=s2.split("\\.");//子網(wǎng)掩碼變數(shù)組 Stringok=""; Stringre_ok=""; for(inti=0;i<s33.length;i++){ intint_ip=Integer.parseInt(s33[i]);//字符串轉(zhuǎn)換成整形 intint_mask=Integer.parseInt(s22[i]); intre1=(int_ip&int_mask);//每個點分10進制數(shù)都進行與運算 Stringre=String.valueOf(re1);//整數(shù)轉(zhuǎn)換成字符串 if(i!=3){//前三個點分10進制數(shù)后面加上"." ok=re+"."; re_ok+=ok; }else{ re_ok+=re;//最后一個點分10進制數(shù)不加"." } } System.out.println("ip地址和子網(wǎng)掩碼與運算之后的結(jié)果為:"+re_ok); System.out.println("網(wǎng)絡(luò)地址為:"+s1); System.out .println(""); returnre_ok.equals(s1);//比較字符串是否相同 } publicstaticvoidmain(String[]args){ //判斷參數(shù)是否為3個 if(args.length!=3){ System.out.println("參數(shù)錯誤!請重新輸入"); System.exit(0); } System.out .println(""); //判斷網(wǎng)絡(luò)地址是否正確 if(isIp(args[0])){ System.out.println("網(wǎng)絡(luò)地址正確!為:"+args[0]); }else{ System.out.println("網(wǎng)絡(luò)地址不正確("+args[0]+")!請重試..."); System.exit(0); } //判斷子網(wǎng)掩碼是否正確 if(isMask(args[1])){ System.out.println("子網(wǎng)掩碼正確!為:"+args[1]); }else{ System.out.println("子網(wǎng)掩碼不正確("+args[1]+")!請重試..."); System.exit(0); } //判斷ip地址是否正確 if(isIp(args[2])){ System.out.println("ip地址正確!為:"+args[2]); }else{ System.out.println("ip地址不正確("+args[2]+")!請重試..."); System.exit(0); } System.out .println(""); //判斷ip地址是否屬于這個網(wǎng)絡(luò) if(go(args[0],args[1],args[2])){ System.out.println("OK!,ip地址("+args[2]+")屬于這個網(wǎng)絡(luò)("+args[0] +")"); }else{ System.out.println("對不起!ip地址("+args[2]+")不屬于這個網(wǎng)絡(luò)("+args[0] +")"); } System.out .println(""); }}調(diào)試分析(調(diào)式過程中出現(xiàn)的問題及如何改正)1.遇到的第一個問題:面向?qū)ο竦乃枷?java是完全面向?qū)ο竦?,如何使程序用面向?qū)ο竦乃枷腴_發(fā),這是一個問題。解決辦法:我把程序的功能,如:ip地址的判斷,子網(wǎng)的判斷都寫成了一個靜態(tài)的方法,然后根據(jù)主方法傳過來的參數(shù),相應(yīng)返回一個判斷的布爾值。2.遇到的第二個問題:正則表達式的問題,判斷ip地址和子網(wǎng)掩碼的正則表達達都是常用正則表達式,可是用在java中存在轉(zhuǎn)義的問題。解決辦法:我對比了網(wǎng)上的好幾個正則表達式,最終確定考慮比較周全的正則表達式。3.遇到的第三個問題:用”.”來分?jǐn)?shù)組的問題,我試過用split()函數(shù)來分割ip地址,返回的是一個字符串?dāng)?shù)組??墒俏沂冀K得不到這個數(shù)組。解決辦法:我起碼在這上面花費了兩個多小時,不斷的調(diào)試,查了很多資料最終確定是因為參數(shù)是一個正則表達式,必須寫成“\\.”的形式才可以用于分割字符串。4.遇到的第四個問題:判斷ip地址是否屬于某一個子網(wǎng)的算法問題。解決辦法

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論