




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第三章 IP地址的合法性及子網判斷3.1 課程設計目的 本設計要求編寫程序,判斷一個IP地址是否合法,并判斷該地址是否屬于一個給定子網。從而考察讀者是否對IP地址概念及其子網劃分有非常清楚的認識。3.2 課程設計要求 在掌握IP地址表示方法及子網劃分方法的基礎上,按如下要求完成程序。1) 命令行格式:ip_test subnet/mask ip_addr其中,ip_test為程序名;subnet為子網號;mask是一個數(shù)值,代表子網掩碼連續(xù)1的個數(shù);ip_addr是要測試的IP地址。例如,要測試的IP地址為202.113.16.10,子網號為為202.113.16.0,子網掩碼為255.255
2、.255.0,則命令行為ip_test 202.113.16.0、24 202.113.16.10.(因為255.255.255.0是連續(xù)的24個1,所以用24表示。)2) 判斷subnet和ip_addr的合法性。在判斷IP地址合法性時要自行編寫代碼,不要使用任何inet函數(shù)。判斷時要考慮全面,比如以下ip地址均不合法:123.2.1123.23¥.2.1123.2345.2.1123.23.45.2.13)判斷掩碼的合法性。4)在IP地址合法的前提下,判斷ip_addr是否屬于子網subnet.5)輸出命令行中的ip是否合法,掩碼是否合法(可適當給出不合法原因)以及ip_addr是否屬于子
3、網subnet。A類,B類與C類IP地址中主機號權1的地址chengweizhijieguangbo地址,用來使路由器將一個分組以廣播方式發(fā)送給特定網絡上的所有主機。直接廣播地址只能作為分組中的目的地址。物理網絡采用的使點-點傳輸方式,分組廣播需要通過軟件來實現(xiàn)。網絡號主機號全12)受限廣播地址網絡號與主機號的32位全為1的地址為受限廣播地址,用來將一個分組以廣播方式發(fā)送給本網的所有主機。本網的所有主機將接受該分組,路由器則阻擋該分組通過。全13)“這個網絡上的這臺主機”地址全04)”這個網絡上的特定主機”主機或路由器向本網絡上的某個特定的主機發(fā)送分組,網絡號部分為全0,主機號為確定的值。這樣
4、的分組被限制在本網絡內部。網絡號全0主機號5)回送地址回送地址用于網絡軟件測試和本地進程間通信。TCP/IP協(xié)議規(guī)定網絡號為127的分組不能出現(xiàn)在任何網絡上;主機和路由器不能為該地址廣播任何尋址信息。127任意值(通常取1)3.3子網的劃分人們在早期設計與建設ARPAnet時,沒有預料到網絡的發(fā)展速度如此之快,應用范圍如此之廣。當時個人計算機與局域網尚未出現(xiàn)。所以,研究者在設計Internet地址的編址方案時,主要是針對大型機互聯(lián)的網絡結構。設計IP地址的最初目的是希望每個IP地址都能唯一地,確定地識別一個網絡與一臺主機,但是這種方法同時也存在著兩個主要的問題,即IP地址的有效利用率和路由器的
5、工作效率。為了解決這個問題,人們提出了子網(subnet)和超網(supernet)的概念。子網就是將一個大的網絡劃分成幾個較小的網絡,而每一個小網絡都有其自己的地址。超網就是將一個組織所屬的幾個C類網絡合并成為一個更大地址范圍的邏輯網絡。劃分子網實際上就是在IP地質系統(tǒng)中增加一個層次。三級IP地址的表示方法為netID_subnet ID_host ID.第一級網絡定義了網點的地址;第二級子網號定義了物理子網;第三級主機號定義了主機和路由器到物理網絡的連接。三級層次的IP地址,一個IP分組的路由選擇的過程分為三步:第一步將分組轉發(fā)給網點,第二步轉發(fā)給物理子網,第三步轉發(fā)給確切的主機。當三級層
6、次的IP地址提出后,一個很現(xiàn)實的問題是:如何從一個IP地址中提取出子網號。因此,提出了子網掩碼(subnet mask)的概念。子網掩碼有時也叫做子網掩碼。子網掩碼表示方法:網絡號與子網號置1,主機號置0.如何判斷某一IP地址是否屬于某一子網呢?只需將二進制IP地址與子網掩碼按位進行“與”運算。若“與”運算所得值與給定子網地址一致,則說明該IP地址屬于給定的子網。3.4 課程設計分析 1.程序大致流程1)分別判斷子網號,掩碼和IP地址的基本格式是否合法。2)如果三者的基本格式都合法,才調用判定“IP地址是否為子網成員”的函數(shù)。該函數(shù)同時判別子網號與掩碼是否匹配,子網號為全0或全1,主機號為全0
7、,全1.2.核心代碼及說明1)判斷IP地址是否合法。一般來說,我們先檢查最明顯的錯誤。例如,可以先判斷IP中”.”個數(shù)是否正確;接著,以“.”為標志將IP字符串按節(jié)分開;然后,看該IP是否為4段,再判斷各節(jié)是否是0255間的整數(shù)。關于網絡號,主機號全0全1等問題要在后面結合子網掩碼一起判斷。這里的關鍵是怎么將IP字符串以“.”為標志按節(jié)分開,這要用到函數(shù)strtok(char*strToken,const char*strDelimit).第一個參數(shù)是給定的串,第二個參數(shù)是分隔符集合,該函數(shù)的功能就是以strDelimit中包含的任意字符為分隔符,在strToken中尋找下一個token。每一
8、次調用strtok后,都會在strToken中插入一個NULL字符,所以,如果要讀取下一個token,接下來調用strtok時第一個參數(shù)用NULL。char ch=“.”; /分隔符char *token,*dot4;int iplen=0;token=strtok(ip,ch); /以“?!睒酥緦P字符串按節(jié)分開while(token!=NULL) /循環(huán)進行,直到結束 dotiplen=token; /將分開的每段賦值給dotiplen+;token=strtok(NULL,ch);這樣,IP串的每一段都放到dot數(shù)組里了,下面判斷是否有非法字符,每一段的值是否在0255之間,就很容易了
9、。2) 判斷IP地址是否為子網成員,判斷子網號與掩碼是否匹配,以及子網號,主機號全0,全1問題(iSubA是子網號,iMask是掩碼,iIPA是給定的IP地址)。if(iSubA|iMask!=imask) /說明sub與mask不匹配 cout<<”子網號與掩碼不匹配,error!”<<end1; return; if(iSubAiMask)=0) /說明子網號全1cout<<”子網號全1,error!”<<end1;return; if(iSubA&iMask)=0) /說明子網號全0cout<<”子網號全0,error!
10、”<<end1;return; if(iSubA)=(iIPA&iMask) /ip和掩碼做“與”運算,結果和子網號比較 if(iIPA|iMask)=iMask) /說明主機號全0 cout<<”主機號全0,error!”<<end1; return; if(iIPA|iMask)=0xffffffff) /說明主機號全1 cout<<”主機號全1,error!”<<end1; return; cout<<”<<ip<<”belongs to”<<subnetPlusMask&
11、lt;<end1; /屬于 return; else cout<<”<<ip<<”doesnt belong to”<< subnetPlusMask<<end1; /不屬于3.5 相關擴展 實際上,我們可以對IP地址進行更細致的檢查。前面給出的方法是根據(jù)“分隔符”給IP分段,其實這樣做不太準確。因為這種做法不能找出202.113.25.99.這樣的錯誤。要實現(xiàn)這種判斷就不能簡單地用strtok函數(shù)來給IP地址分段了。 另外,還可以根據(jù)所給地址判斷該IP地址屬于A,B,C中的哪類。#include <iostream.h&
12、gt;#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <ctype.h>class ipTestchar ip15; char subnetPlusMask18; char subnet18;char TempIp15; char TempSub18; int mask; bool maskIsValid; public:ipTest(char *,char *); ipTest(); bool NoIllegalCha
13、r(char *); bool ipIsValid(char *);bool subnetIsValid(char *); void belong(); print();void main(int argc,char *argv) if(argc!=3) cout<<"error"<<endl<<"format should be:ip_test subnet/mask ip"<<endl;return;elseif(strlen(argv1)>18)cout<<"subnet/
14、mask is too long"return;if(strlen(argv2)>15)cout<<"ip is too long"return;ipTest test(argv1,argv2); test.print(); ipTest:ipTest(char *subnetPlusMask,char *ip)maskIsValid=true; char temp2;int smLem=strlen(subnetPlusMask); for(int i=0;i<smLem && subnetPlusMaski!='
15、/'i+)this->subneti=subnetPlusMaski;this->TempSubi=subnetPlusMaski;subneti='0' TempSubi='0' if(i<=smLem-2) if(i=smLem-2) temp0=subnetPlusMaski+1; if(!isdigit(temp0) maskIsValid=false; else if(i=smLem-3) temp0=subnetPlusMaski+1; temp1=subnetPlusMaski+2; if(!(isdigit(temp0)
16、&&isdigit(temp1) maskIsValid=false; mask=atoi(temp); if(mask<0|mask>32) maskIsValid=false;elsemaskIsValid=false;strcpy(this->subnetPlusMask,subnetPlusMask);strcpy(this->ip,ip);strcpy(this->TempIp,ip);ipTest:print()bool subIsV=subnetIsValid(TempSub);bool ipIsV=ipIsValid(TempIp)
17、;if(!subIsV)cout<<"subnet is invalid!"<<endl;else cout<<"valid subnet:"<<subnet<<endl;if(!maskIsValid)cout<<"mask is invalid!"<<endl;else cout<<"valid mask:"<<mask<<endl;if(!ipIsV)cout<<"ip
18、 is invalid!"<<endl;elsecout<<"valid ip:"<<ip<<endl;if(subIsV &&ipIsV &&maskIsValid)belong();bool ipTest:NoIllegalChar(char *ch)unsigned int i,k=0;for(i=0;i<strlen(ch);i+)if(isdigit(*(ch+1)=0)return false;return true;bool ipTest:ipIsValid(cha
19、r *ip)char ch="."char *token,*dot4;int iplen=0;token=strtok(ip,ch);while(token!=NULL)dotiplen=token;iplen+;token=strtok(NULL,ch);if(iplen!=4)return false;for(int i=0;i<4;i+)if(!NoIllegalChar(doti)|atoi(doti)>255)return false; return true;bool ipTest:subnetIsValid(char* subnet)if(!ipI
20、sValid(subnet)return false;return true;void ipTest:belong()int subLen=strlen(subnet);int ipLen=strlen(ip);unsigned int iIPA,iSubA,iMask;unsigned char subA4,ipA4;char temp3;int i,j,t=0;for(i=0,j=0;i<subLen;i+)if(subneti!='.')tempj+=subneti;elsesubA3-t=atoi(temp);j=0;t+;temp0=temp1=temp2='0' subA0=atoi(temp);temp0=temp1=temp2='0'iSubA=*(unsigned int *)subA;for(i=0,j=0,t=0;i<ipLen;i+)if(ipi!='.')tempj+=ipi;elseipA3-t=atoi(temp);j=0;t+; temp0=temp1=temp2='0'ipA0=atoi(temp);iIPA=*(unsigned i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全技能比賽試題及答案
- 安全工作規(guī)定試題及答案
- 2025年商業(yè)地產項目數(shù)字化運營與客戶滿意度提升的個性化服務模式創(chuàng)新實施案例分析報告
- 創(chuàng)業(yè)指南飲品培訓課件
- 中國北京的英文介紹課件
- 福建省泉州市第五中學2025屆八年級英語第二學期期中調研模擬試題含答案
- 樂學教育班會實施策略
- 學前教育原理兒童觀
- 中國養(yǎng)老心理學課件網站
- 內科醫(yī)師技能培訓
- 明陽風機培訓課件
- 委外加工流程
- 住院醫(yī)囑審核登記表-9月上
- Q∕SY 05010-2016 油氣管道安全目視化管理規(guī)范
- 藍海華騰變頻器說明書
- 漿砌塊石工程施工程序、施工方法
- 中國海洋大學論文封面模板
- 遵義會議-(演示)(課堂PPT)
- 訂單(英文范本)PurchaseOrder
- 雨污水合槽溝槽回填施工專項方案(優(yōu).選)
- 預焊接工藝規(guī)程pWPS
評論
0/150
提交評論