IP地址的合法性與子網(wǎng)判斷_第1頁
IP地址的合法性與子網(wǎng)判斷_第2頁
IP地址的合法性與子網(wǎng)判斷_第3頁
IP地址的合法性與子網(wǎng)判斷_第4頁
IP地址的合法性與子網(wǎng)判斷_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、一、 課程設(shè)計(jì)目的 掌握IP地址的分類,準(zhǔn)確理解子網(wǎng)、掩碼的概念,確切地明了IP地址的合法格式。并判斷該地址是否屬于一個給定的子網(wǎng)。 二、設(shè)計(jì)的意義 1、有利于對基礎(chǔ)知識的理解 2、有利于邏輯思維的鍛煉 程序設(shè)計(jì)是公認(rèn)的、最能直接有效地訓(xùn)練學(xué)生的創(chuàng)新思維,培養(yǎng)分析問題、解決問題能力的學(xué)科之一。即使一個簡單的程序,從任務(wù)分析、確定算法、界面布局、編寫代碼到調(diào)試運(yùn)行,整個過程學(xué)生都需要有條理地構(gòu)思,這中間有猜測設(shè)想、判斷推理的抽象思維訓(xùn)練,也有分析問題、解決問題、預(yù)測目標(biāo)等能力的培養(yǎng)。 3、有利于與其他學(xué)科的整合 在程

2、序設(shè)計(jì)中,我們可以解決其它學(xué)科有關(guān)問題,也利用其它課程的有關(guān)知識來解決信息技術(shù)中比較抽象很難理解的知識。在信息技術(shù)課中整合其它學(xué)科的知識,發(fā)揮信息技術(shù)的優(yōu)勢。 4、有利于治學(xué)態(tài)度的培養(yǎng)。 程序設(shè)計(jì)中,語句的語法和常量變量的定義都有嚴(yán)格的要求,有時輸了一個中文標(biāo)點(diǎn)、打錯了一個字母,編譯就不通過,程序無法正常運(yùn)行。因此,程序設(shè)計(jì)初學(xué)階段,學(xué)生經(jīng)常會犯這樣的錯誤,可能要通過幾次乃至十多次的反復(fù)修改、調(diào)試,才能成功,但這種現(xiàn)象會隨著學(xué)習(xí)的深入而慢慢改觀。這當(dāng)中就有一個嚴(yán)謹(jǐn)治學(xué)、一絲不茍的科學(xué)精神的培養(yǎng)。 三、 課程設(shè)計(jì)的內(nèi)容和要求 在掌握IP地址的表示

3、方法以及子網(wǎng)劃分方法的基礎(chǔ)上,并以計(jì)算機(jī)網(wǎng)絡(luò)中關(guān)于IP地址的相關(guān)理論知識為基石,運(yùn)用C/C+語言按如下要求完成程序。 1在判斷一個IP地址合法性時要自行編寫代碼,不要使用任何inet函數(shù) 2命令行格式:ip_test subnet/mask ip_addr ip_test為程序名;subnet為子網(wǎng)號;mask是一個整型數(shù)值,代表子網(wǎng)掩碼連續(xù)1的個數(shù);ip_addr表示要測試的IP地址。 比如說,要測試的IP地址為202.113.16.10,子網(wǎng)號碼是202.113.16.0,子網(wǎng)掩碼是255.255.255.0,則命令行為ip_te

4、st202.113.16.0/24 202.113.16.10。(因?yàn)?55.255.255.0是連續(xù)的24個1,所以用24表示) 3.判斷subnet和ip_addr的合法性 在判斷IP地址合法性時要自行編寫代碼,不要使用任何inet 函數(shù)。判斷時要考慮各種情況,全面分析問題。例如以下IP地址均不合法: 123.2.1 123.23$.2.1 123.2345.2.1 123.23.45.1 4.判斷掩碼的合法性譬如說mask的值為負(fù)數(shù)或者大與32,這時輸入的掩碼就不合法。 5.在IP地址合法

5、,掩碼合法以及子網(wǎng)號也合法的前提下,判斷ip_addr是否屬于subnet。 6.輸出命令行中的ip是否合法,掩碼是否合法,子網(wǎng)號碼是否合法(可適當(dāng)給出不合法的原因)以及ip_addr是否屬于子網(wǎng)subnet。 7.還可以判斷子網(wǎng)號,主機(jī)號全0,全1問題。四、課程設(shè)計(jì)代碼#include <iostream.h>/頭文件#include <string.h>/字符串頭文件#include <stdlib.h>/ 分配n個數(shù)據(jù)項(xiàng)的內(nèi)存連續(xù)空間,每個數(shù)據(jù)項(xiàng)的大小為size#include <stdio.h>/標(biāo)準(zhǔn)函數(shù)庫中的輸入輸出

6、函數(shù)#include <math.h>/導(dǎo)入數(shù)學(xué)中的函數(shù)#include <ctype.h>/字符測試函數(shù)#include <winsock2.h>/socket通信,系統(tǒng)頭文件#include <ws2tcpip.h>#include <time.h>/時間頭文件#include <windows.h>/windows頭文件#pragma comment(lib,"ws2_32.lib")/靜態(tài)加入一個庫文件/類結(jié)構(gòu)class ipTest/定義一個類的,類的名字為ipTestpublic:char

7、ip15;/用于存放ip地址char subnetPlusMask18;/用于存放subnetPlusMask地址char subnet18;/用于存放subnet地址char TempIp15;/用于存放ip地址 bool maskIsValid;/用于判斷的個數(shù)是否合適,或是否與subnet匹配int mask;/用于存放maskchar Tempsub18;/用于存放subnet地址 ipTest(char *,char *);/自定義初始化類函數(shù)ipTest();/析構(gòu)函數(shù)bool NoIllegalChar(char *); /ip,subnet地址中非法字符的判斷bool ipIs

8、Valid(char *); /判斷ip是否合法bool subnetIsValid(char *); /判斷子網(wǎng)號subnet是否合法void belong(); /判斷IP是否為子網(wǎng)成員print();/判斷ip是否為子網(wǎng)成員,并輸出判斷結(jié)果; /主函數(shù)void main(int argc,char * argv)/自動讀取數(shù)據(jù)if(argc!=3) /判斷參數(shù)格式化是否正確cout<<"please input command:ip_test subnet/mask ip "/輸出語句return;elseif(strlen(argv1)>18) /

9、先判斷最簡單的錯誤,subnet/mask長度是否超出cout<<"subnet/mask is too long"/輸出語句return;if(strlen(argv2)>15)/判斷ip的長度cout<<"ip is too long"/輸出語句return;ipTest test(argv1,argv2); /實(shí)例話ipTest類test.print(); /完成相應(yīng)判別并輸出結(jié)果/ip地址類構(gòu)造函數(shù)ipTest:ipTest( char* subnetPlusMask, char *ip)maskIsValid=tr

10、ue;/設(shè)置maskIsValid默認(rèn)為合法char temp2;/定義變量/把'/'前的字符復(fù)制到subnet字符數(shù)組中int smLen=strlen(subnetPlusMask);/取出subnetPlusMask的長度for( int i=0; i<smLen && subnetPlusMaski !='/' i+ )/從subnet/mask中分離出subnet地址this->subneti=subnetPlusMaski;/取出數(shù)組subnetPlusMaski的值賦給subnetithis->Tempsubi=s

11、ubnetPlusMaski;/取出數(shù)組subnetPlusMaski的值賦給Tempsubisubneti='0'Tempsubi='0'if(i<=smLen-2) /判斷mask是否為一位還是兩位數(shù)if(i=smLen-2)/表明mask是一位temp0=subnetPlusMaski+1;if( !isdigit(temp0) )/判斷subnetPlusMaski+1是否是數(shù)字maskIsValid = false;/掩碼是否有效做標(biāo)記elseif( i = smLen-3 )/表明mask是二位 temp0=subnetPlusMaski+1;

12、/把mask存到temp數(shù)組里temp1=subnetPlusMaski+2;if( !(isdigit(temp0)&&isdigit(temp1) )maskIsValid=false;/把maskIsValid不合法mask = atoi(temp);/自動把數(shù)字字符轉(zhuǎn)換為對應(yīng)的十進(jìn)制數(shù)值的函數(shù)if( mask<0 | mask > 32)/判斷掩碼的范圍是否合法maskIsValid = false;else/表明mask為空或字節(jié)超出范圍maskIsValid=false;/若mask是三位數(shù),則表明mask輸入非法strcpy( this->sub

13、netPlusMask, subnetPlusMask);/給subnet_mask賦值strcpy( this->ip, ip );/給ip賦值strcpy( this->TempIp, ip );/給TempIp賦值/判斷mask,subnet,ip的合法性問題ipTest:print()bool subIsV=subnetIsValid(Tempsub);/設(shè)置標(biāo)志subnet地址是否合法的bool型變量,并調(diào)用subnetIsValid函數(shù)判斷bool ipIsV=ipIsValid(TempIp);/設(shè)置標(biāo)記ip地址是否合法的bool型變量并調(diào)用ipIsValid函數(shù)判斷

14、if(!subIsV)/判斷子網(wǎng)是否合法cout<<"subnet is invalid ! "<<endl;elsecout<<"valid subnet: "<<subnet<<endl;if(!maskIsValid)/表示返回的maskIsValid是falsecout<<"mask is invalid!"<<endl;elsecout<<"valid mask:"<<mask<<end

15、l;if(!ipIsV)/判斷ip是否合法cout<<"ip is invalid!"<<endl;elsecout<<"valid ip:"<<ip<<endl;/判斷IP是否belong subnetif(subIsV&&ipIsV&&maskIsValid)belong();/調(diào)用belong函數(shù)/子函數(shù),判斷輸入是否含有非數(shù)字字符bool ipTest:NoIllegalChar(char *ch)unsigned int i,k=0;for(i=0;i&

16、lt;strlen(ch);i+)/取出字符串ch的長度,并一個一個判斷是否是數(shù)字字符if(isdigit(*(ch+i)=0)/判斷是否是數(shù)字字符return false;return true;/判別IP地址是否合法bool ipTest:ipIsValid(char * ip)char ch=" ." /初始化數(shù)組變量 char *token,*dot4;/初始化指針變量int iplen=0;token=strtok(ip,ch);/以"."標(biāo)志將IP字符串按節(jié)分開while(token!=NULL) /循環(huán)進(jìn)行,知道結(jié)束dotiplen=tok

17、en; /將分開的每段賦值給dotiplen+;token= strtok(NULL,ch);if(iplen!=4)/判斷ip的段數(shù)是否是四段cout<<this->Tempsub<<endl;return false; for(int i=0;i<4;i+) /判斷四段中是否有非法字符或某段值非法if(!NoIllegalChar(doti)|atoi(doti)>255) return false;return true;/判斷子網(wǎng)號是否合法bool ipTest:subnetIsValid(char* subnet)if( ! ipIsVali

18、d(subnet) /調(diào)用判別IP地址合法性的函數(shù) return false;return true;/判斷IP是否為子網(wǎng)成員,判斷子網(wǎng)號與掩碼是否匹配,以及子網(wǎng)號、主機(jī)號全0全1問題void ipTest:belong()int subLen=strlen(subnet);/取出子網(wǎng)的長度賦給sublenint ipLen=strlen(ip);/取出ip地址的長度賦給iplenunsigned int iIPA,iSubA,iMask;unsigned char subA4,ipA4;/定義字符數(shù)組變量char temp3;/定義temp數(shù)組int i,j,t=0;for(i=0,j=0;

19、i<subLen;i+)/不用再檢錯 if(subneti != '.')/判斷是不是"."tempj+=subneti;/如果不是"."存放到temp數(shù)組中 elsesubA3-t = atoi(temp); /subA數(shù)組中放'.'間的字符數(shù)據(jù)轉(zhuǎn)換成長整形 j=0; /初始化變量進(jìn)入下一輪t+;temp0=temp1=temp2='0'subA0 = atoi(temp);/把temp數(shù)組的字符型數(shù)組轉(zhuǎn)換成長整型temp0=temp1=temp2='0'/清空數(shù)組temp中的數(shù)據(jù)i

20、SubA = *( unsigned int *)subA; /iSubA中放subnet中'.'除外的串對應(yīng)的數(shù)for(i= 0, j= 0, t= 0; i<ipLen; i+) /不用再檢錯if(ipi != '.')/判斷ip數(shù)組中的字符是不是"."tempj+ = ipi;/把ip數(shù)組里面的數(shù)據(jù)存到temp數(shù)組里elseipA3-t = atoi(temp);/把temp數(shù)組中的字符型數(shù)組轉(zhuǎn)換成長整型賦給ipA數(shù)組j=0; /清空數(shù)據(jù)t+;temp0=temp1=temp2='0'ipA0 = atoi(temp);/把temp數(shù)組中的字符型數(shù)組轉(zhuǎn)換成長整型賦到ipA數(shù)組里面iIPA = *( unsigned int* )ipA; /iIPA中放IP中'.'除外的串對應(yīng)的數(shù)iMask = 0xffffffff;/初始化iMask的值iMask<<=(32-mask); /獲取掩碼if( ( iSubA | iMask ) != iMask ) /說明sub與mask不匹配cout<<" 子網(wǎng)號與掩碼不匹配,error!"<<endl;re

溫馨提示

  • 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

提交評論