




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗九:IP地址的合法性及子網判斷#include<iostream.h>#include<string.h>#include<stdlib.h>#include<ctype.h>//類結構classipTest{charip[15];//定義ip數組,存放ip地址charsubnetPlusMask[18];//定義subnetPlusMask數組,存放子網號和子網掩碼中1的個數charsubnet[18];//定義subnet數組,存放子網號charTempIp[15];//定義TempIp數組,存放臨時的ip地址charTempSub[18];//定義TempSub數組,存放臨時的子網號intmask;//定義整型mask,存放子網掩碼中1的個數boolmaskIsValid;//定義布爾值maskIsValid,存放判斷mask真值的變量public:ipTest(char*,char*);//定義ipTest函數ipTest(){};boolNoIllegalChar(char*);//非法字符的判斷boolipIsValid(char*);//判斷IP地址是否合法boolsubnetIsValid(char*);//判斷子網號是否合法voidbelong();//判斷IP是否為子網成員print();//定義輸出函數print};//主函數voidmain(intargc,char*argv[]){if(argc!=3){//判斷參數格式是否正確cout<<"Pleaseinputcommand:ip_testsubnet/maskip";return;}else{if(strlen(argv[1])>18){//先判斷最簡單的錯誤,子網號及子網掩碼長度和是否超出cout<<"subnet/maskistoolong";return;}if(strlen(argv[2])>15){//ip地址長度是否超出cout<<"ipAddressistoolong";return;}ipTesttest(argv[1],argv[2]);//實例化ipTest類test.print();//完成相應判別并輸出結果}}//構造函數ipTest::ipTest(char*subnetPlusMask,char*ip){maskIsValid=true;chartemp[2];//把'/'前的字符復制到subnet字符數組中intsmLen=strlen(subnetPlusMask);//定義smLen為subnetPlusMask的長度for(inti=0;i<smLen&&subnetPlusMask[i]!='/';i++){this->subnet[i]=subnetPlusMask[i];//對subnet數組賦值,值為subnetPlusMask中的數值this->TempSub[i]=subnetPlusMask[i];//對TempSub數組賦值,值為subnetPlusMask中的數值}subnet[i]='\0';//給數組加上結束符TempSub[i]='\0';//給數組加上結束符if(i>=smLen-2){//初始化mask和maskIsValidif(i==smLen-2){temp[0]=subnetPlusMask[i+1];if(!isdigit(temp[0]))//判斷temp中的值是否為字符maskIsValid=false;}else{if(i==smLen-3){temp[0]=subnetPlusMask[i+1];temp[1]=subnetPlusMask[1+2];if(!(isdigit(temp[0])&&isdigit(temp[1])))//判斷temp中的值是否為字符maskIsValid=false;}}mask=atoi(temp);//將temp中的字符數值化if(mask<0||mask>32)//判斷mask值是否超出范圍maskIsValid=false;}else//用十進制數表示的掩碼中1的個數只能是一位數或者兩位數maskIsValid=false;strcpy(this->subnetPlusMask,subnetPlusMask);//給subnetPlusMask賦值strcpy(this->ip,ip);//給IP賦值strcpy(this->TempIp,ip);}//調用判別函數,并輸出結果ipTest::print(){boolsubIsV=subnetIsValid(TempSub);boolipIsV=ipIsValid(TempIp); //判斷子網是否合法if(!subIsV)cout<<"subnetisinvalid!"<<endl;elsecout<<"validsubnet:"<<subnet<<endl; //判斷掩碼是否合法if(!maskIsValid)cout<<"maskisinvalid!"<<endl;elsecout<<"validmask:"<<mask<<endl;//判斷ip地址是否合法 if(!ipIsV)cout<<"Ipaddressisinvalid!"<<endl;elsecout<<"validipaddress:"<<ip<<endl;//判斷ip地址是否屬于子網if(subIsV&&ipIsV&&maskIsValid)belong();}//子網數,判斷輸入是否含有非數字字符boolipTest::NoIllegalChar(char*ch){unsignedinti,k=0;for(i=0;i<strlen(ch);i++)if(isdigit(*(ch+i))==0)//判斷每一位是否為數字字符returnfalse;returntrue;//若不含有非法數字字符則返回true}//判別IP地址是否合法boolipTest::ipIsValid(char*ip){charch[]=".";//分隔符char*token,*dot[4];intiplen=0;token=strtok(ip,ch);//以"."標志將IP字符串按節分開while(token!=NULL){//循環進行,直到結束dot[iplen]=token;//將分開的每段賦值給dotiplen++;token=strtok(NULL,ch);}//判斷IP地址的段數if(iplen!=4)//段數不對returnfalse;for(inti=0;i<4;i++)if(!NoIllegalChar(dot[i])||atoi(dot[i])>255)//有非法字符或某段值非法returnfalse;returntrue;}//判斷子網號是否合法boolipTest::subnetIsValid(char*subnet){if(!ipIsValid(subnet))//調用判別IP地址合法性的函數returnfalse;returntrue;}//判斷IP是否為子網成員,判斷子網號與掩碼是否匹配,以及子網號、主機號全0全1問題voidipTest::belong(){intsubLen=strlen(subnet);intipLen=strlen(ip);unsignedintiIPA,iSubA,iMask;unsignedcharsubA[4],ipA[4];chartemp[3];inti,j,t=0;for(i=0,j=0;i<subLen;i++){//不用檢錯if(subnet[i]!='.')temp[j++]=subnet[i];//temp數組中放'.'間的串else{subA[3-t]=atoi(temp);//subA數組中放'.'間的數據j=0;t++;temp[0]=temp[1]=temp[2]='\0';}}subA[0]=atoi(temp);temp[0]=temp[1]=temp[2]='\0';iSubA=*(unsignedint*)subA;//iSubA中放subnet中'.'除外的串對應的數for(i=0,j=0,t=0;i<ipLen;i++){//不用再檢錯if(ip[i]!='.')temp[j++]=ip[i];else{ipA[3-t]=atoi(temp);j=0;t++;temp[0]=temp[1]=temp[2]='\0';}}ipA[0]=atoi(temp);iIPA=*(unsignedint*)ipA;//iIPA中放IP中'.'除外的串對應的數//獲得掩碼iMask=0xffffffff;iMask<<=(32-mask);if((iSubA|iMask)!=iMask){//說明sub與mask不匹配cout<<"subnetandmasknotmatch!";return;}if((iSubA^iMask)==0){//說明子網號全1cout<<"subnetisall1!";return;}if((iSubA&iMask)==0){//說明子網號全0cout<<"subnetisall0!";return;}if((iSubA)==(iIPA&iMask)){//IP和掩碼與,結果和子網號比較if((iIPA|iMask)==iMask){//說明主機號全0cout<<"Ipaddressisall0!";return;}if((iIPA|iMask)==0xffffffff){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程計量與計價試題及答案
- 家具行業設計中的市場細分與消費者畫像分析試題及答案
- 電商化的農業生產考題及答案
- 白盒測試題及答案
- 2025年度企業安全生產知識競賽題庫及答案(共150題)
- 新能源汽車電動化轉型的技術模式試題及答案
- 教師與學生互動2025年商務英語試題及答案
- 物理定理應用題及答案2025年
- 2025臨床醫學筆試題及答案
- 城市公共停車場建設2025年社會穩定風險評估與停車產業創新驅動報告
- 2024年中考文言文對比閱讀《桃花源記》考試題(有答案)
- 2023年丹陽市婦幼保健院(第二人民醫院)招聘考試真題及答案
- 中醫培訓課件:《中藥熱奄包技術》
- 五年級語文下冊第八單元【教材解讀】
- 數字貿易學 課件 第3章 消費互聯網、產業互聯網與工業互聯網
- 第11課+宋元時期的經濟、科技與文化【中職專用】《中國歷史》(高教版2023基礎模塊)
- JTG D60-2015 公路橋涵設計通用規范
- 籃球競賽組織編排
- 扁桃體切除術后出血原因及預防處理
- 2024年重慶江北國際機場有限公司招聘筆試參考題庫含答案解析
- 兒童超聲心動圖操作指南與標準課件
評論
0/150
提交評論