java IP地址網(wǎng)段計算的示例代碼
根據(jù)IP地址與字段掩碼計算網(wǎng)段最大最小IP
package c04; import java.net.UnknownHostException; public class IPNetworkSegmentCalculation { public static void main(String[] args) throws UnknownHostException { String ip = "192.168.126.2"; String mask = "255.255.255.0"; findMask(); } public static void findMask(){ String mask = "255.255.255.0"; String ip = "192.168.126.2"; String[] ipArray = ip.split("[.]"); String[] maskArray = mask.split("[.]"); String minIp = ""; String maxIp = ""; int subMask = 0; for(int i=0 ;i < maskArray.length ; i++){ int maskTmp = Integer.valueOf(maskArray[i]); int ipTmp = Integer.valueOf(ipArray[i]); int mi = maskTmp&ipTmp; //System.out.println("==============="+maskTmp+" "+ipTmp); if(ipTmp == mi && maskTmp==255){ minIp = minIp + ipTmp+"." ; maxIp = maxIp + ipTmp+"." ; subMask = subMask + 8; }else{ minIp = minIp + mi+"." ; maxIp = maxIp + maxNetSeg(Integer.toBinaryString(maskTmp),mi)+"."; subMask = subMask + subMaskNum(Integer.toBinaryString(maskTmp)); } } minIp = minIp.substring(0,minIp.length()-1); maxIp = maxIp.substring(0,maxIp.length()-1); System.out.println("minip "+minIp); System.out.println("maxip "+maxIp); System.out.println("mask "+subMask); } private static int calculate(int n) { if (n == 0) return 1; return 2 * calculate(n - 1); } private static Integer maxNetSeg(String s1,int mi){ s1 = new StringBuffer(s1).reverse().toString(); if(s1.indexOf("1")!=-1){ int i = s1.indexOf("1"); return mi+calculate(i); }else { return 255; } } private static Integer subMaskNum(String s1){ if(s1.lastIndexOf("1")!=-1){ int i = s1.lastIndexOf("1") + 1; return i; } return 0; } }
Java根據(jù)網(wǎng)段計算子網(wǎng)掩碼,起始IP,結(jié)束IP
/** * IP的相關計算 * @author zengchaowang * @version 1.0 * */ public class IpCaculate { /** * 根據(jù)掩碼位數(shù)計算掩碼 * @param maskIndex 掩碼位 * @return 子網(wǎng)掩碼 */ public static String getNetMask(String maskIndex) { StringBuilder mask = new StringBuilder(); Integer inetMask = 0; try { inetMask = Integer.parseInt(maskIndex); } catch (NumberFormatException e) { System.out.println(e.getMessage()); return null; } if (inetMask > 32) { return null; } // 子網(wǎng)掩碼為1占了幾個字節(jié) int num1 = inetMask / 8; // 子網(wǎng)掩碼的補位位數(shù) int num2 = inetMask % 8; int array[] = new int[4]; for (int i = 0; i < num1; i++) { array[i] = 255; } for (int i = num1; i < 4; i++) { array[i] = 0; } for (int i = 0; i < num2; num2--) { array[num1] += 1 << 8 - num2; } for (int i = 0; i < 4; i++) { if (i == 3) { mask.append(array[i]); } else { mask.append(array[i] + "."); } } return mask.toString(); } /** * 根據(jù)網(wǎng)段計算起始IP 網(wǎng)段格式:x.x.x.x/x * 一個網(wǎng)段0一般為網(wǎng)絡地址,255一般為廣播地址. * 起始IP計算:網(wǎng)段與掩碼相與之后加一的IP地址 * @param segment 網(wǎng)段 * @return 起始IP */ public static String getStartIp(String segment) { StringBuffer startIp = new StringBuffer(); if (segment == null) { return null; } String arr[] = segment.split("/"); String ip = arr[0]; String maskIndex = arr[1]; String mask = IpCaculate.getNetMask(maskIndex); if (4 != ip.split("\\.").length || mask == null) { return null; } int ipArray[] = new int[4]; int netMaskArray[] = new int[4]; for (int i = 0; i < 4; i++) { try { ipArray[i] = Integer.parseInt(ip.split("\\.")[i]); netMaskArray[i] = Integer.parseInt(mask.split("\\.")[i]); if (ipArray[i] > 255 || ipArray[i] < 0 || netMaskArray[i] > 255 || netMaskArray[i] < 0) { return null; } ipArray[i] = ipArray[i] & netMaskArray[i]; if(i==3){ startIp.append(ipArray[i]+1); }else{ startIp.append(ipArray[i]+"."); } } catch (NumberFormatException e) { System.out.println(e.getMessage()); } } return startIp.toString(); } /** * 根據(jù)網(wǎng)段計算結(jié)束IP * @param segment * @return 結(jié)束IP */ public static String getEndIp(String segment) { StringBuffer endIp=new StringBuffer(); String startIp = getStartIp(segment); if (segment == null) { return null; } String arr[] = segment.split("/"); String maskIndex = arr[1]; //實際需要的IP個數(shù) int hostNumber = 0; int startIpArray[] = new int[4]; try { hostNumber=1<<32-(Integer.parseInt(maskIndex)); for (int i = 0; i <4; i++) { startIpArray[i] = Integer.parseInt(startIp.split("\\.")[i]); if(i == 3){ startIpArray[i] = startIpArray[i] - 1; break; } } startIpArray[3] = startIpArray[3] + (hostNumber - 1); } catch (NumberFormatException e) { System.out.println(e.getMessage()); } if(startIpArray[3] >255){ int k = startIpArray[3] / 256; startIpArray[3] = startIpArray[3] % 256; startIpArray[2] = startIpArray[2] + k; } if(startIpArray[2] > 255){ int j = startIpArray[2] / 256; startIpArray[2] = startIpArray[2] % 256; startIpArray[1] = startIpArray[1] + j; if(startIpArray[1] > 255){ int k = startIpArray[1] / 256; startIpArray[1] = startIpArray[1] % 256; startIpArray[0] = startIpArray[0] + k; } } for(int i = 0; i < 4; i++){ if(i == 3){ startIpArray[i] = startIpArray[i] - 1; } if("" == endIp.toString()||endIp.length()==0){ endIp.append(startIpArray[i]); }else{ endIp.append("." + startIpArray[i]); } } return endIp.toString(); } }
根據(jù)網(wǎng)段計算起始IP 網(wǎng)段格式:x.x.x.x/x
網(wǎng)段內(nèi)需要的IP數(shù)量為:2的(32-掩碼位)次方個。
因為一個網(wǎng)段0一般為網(wǎng)絡地址,255一般為廣播地址, 所以第一個可用IP起始IP計算:網(wǎng)段與掩碼相與之后加一的IP地址,結(jié)束IP為通過計算需要的所有IP數(shù)然后做累加運算,超過256則進位進行運算。
到此這篇關于java IP地址網(wǎng)段計算的示例代碼的文章就介紹到這了,更多相關java IP地址計算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringMvc配置靜態(tài)資源訪問路徑的實現(xiàn)
本文主要介紹了SpringMvc配置靜態(tài)資源訪問路徑的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07Java concurrency集合之CopyOnWriteArraySet_動力節(jié)點Java學院整理
CopyOnWriteArraySet基于CopyOnWriteArrayList實現(xiàn),其唯一的不同是在add時調(diào)用的是CopyOnWriteArrayList的addIfAbsent(若沒有則增加)方法2017-06-06Springboot之日志、配置文件、接口數(shù)據(jù)如何脫敏
本文主要介紹了Springboot之配置文件數(shù)據(jù)脫敏、接口返回數(shù)據(jù)脫敏、日志文件數(shù)據(jù)脫敏三個方面,需要了解學習的小伙伴快跟隨小編的腳步一起去看看吧2021-09-09Spring Cloud @EnableFeignClients注解的屬性字段basePacka詳解
這篇文章主要介紹了Spring Cloud @EnableFeignClients注解的屬性字段basePacka詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09java連接數(shù)據(jù)庫知識點總結(jié)以及操作應用
這篇文章主要給大家介紹了關于java連接數(shù)據(jù)庫知識點總結(jié)以及操作應用的相關資料, 當涉及到Java中數(shù)據(jù)庫數(shù)據(jù)處理時,我們可以利用強大的Java數(shù)據(jù)庫連接技術與各種數(shù)據(jù)庫進行交互,需要的朋友可以參考下2023-12-12Java中Bean轉(zhuǎn)Map問題歸納總結(jié)
Java Bean轉(zhuǎn)Map的坑很多,最常見的就是類型丟失和屬性名解析錯誤的問題,下面這篇文章主要給大家介紹了關于Java中Bean轉(zhuǎn)Map問題歸納總結(jié)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-06-06詳解SpringBoot中的參數(shù)校驗(項目實戰(zhàn))
這篇文章主要介紹了SpringBoot中的參數(shù)校驗,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07不寫mybatis的@Param有的報錯有的卻不報錯問題分析
這篇文章主要為大家介紹了不寫mybatis的@Param有的報錯有的卻不報錯問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09