摘要:?jiǎn)栴}求兩個(gè)地址之間的個(gè)數(shù),例如,之間的個(gè)數(shù)算法地址轉(zhuǎn)換成數(shù)字?jǐn)?shù)字轉(zhuǎn)換成地址地址轉(zhuǎn)換成數(shù)字?jǐn)?shù)字轉(zhuǎn)換成地址查找兩個(gè)地址之間的原理無(wú)論是還是,它們其實(shí)都是對(duì)應(yīng)整數(shù)值,但是為了方面人的理解和分析,對(duì)這個(gè)整數(shù)采用了某種格式化的方式進(jìn)行
問(wèn)題
求兩個(gè)IP地址之間的IP個(gè)數(shù),例如192.18.16.1~192.18.16.5,2001:DB8:0000:0023:0008:0800:200C:417C~2001:DB8:0:23:8:800:200C:417D之間的IP個(gè)數(shù)?
算法import java.math.BigInteger; import java.util.ArrayList; import java.util.List; public class IPCount { /** * IPv4地址轉(zhuǎn)換成數(shù)字 * @param ip */ public long ipv4ToNumber(String ip) { long rs = 0; if (ip == null || ip.isEmpty()) { return rs; } String[] ips = ip.split("."); for (int i = 0; i < ips.length; i++) { rs += Integer.parseInt(ips[i]) * Math.pow(256, (3 - i)); } return rs; } /** * 數(shù)字轉(zhuǎn)換成IPv4地址 * @param number * @return */ public String numberToIpv4(long number) { String ip = ""; List原理ips = new ArrayList (); for (int i = 0; i < 8; i++) { ips.add(String.valueOf(number % 256)); number = number >> 8; } for (int i = ips.size() - 1; i >= 0; i--) { ip = ip.concat(ips.get(i)); if (i > 0) { ip = ip.concat("."); } } return ip; } /** * IPv6地址轉(zhuǎn)換成數(shù)字 * @param ip * @return */ public BigInteger ipv6ToNumber(String ip) { String[] ips = ip.split(":"); BigInteger rs = new BigInteger("0"); for (int i = 0; i < ips.length; i++) { BigInteger a = BigInteger.valueOf(Integer.parseInt(ips[i], 16)); BigInteger b = BigInteger.valueOf(65536).pow(7 - i); BigInteger c = a.multiply(b); rs = rs.add(c); } return rs; } /** * 數(shù)字轉(zhuǎn)換成IPV6地址 * @param number * @return */ public String numberToIpv6(BigInteger number) { String ip = ""; List ips = new ArrayList (); for (int i = 0; i < 8; i++) { ips.add(Integer.toHexString(number.divideAndRemainder(BigInteger.valueOf(65536))[1].intValue())); number = number.shiftRight(16); } for (int i = ips.size() - 1; i >= 0; i--) { ip = ip.concat(ips.get(i)); if (i > 0) { ip = ip.concat(":"); } } return ip; } /** * 查找兩個(gè)IP地址之間的IP * @param startIp * @param endIp * @return */ public List findIPs(String startIp, String endIp) { BigInteger startNumber = this.ipv6ToNumber(startIp); BigInteger endNumber = this.ipv6ToNumber(endIp).add(BigInteger.valueOf(1)); List ips = new ArrayList (); while (startNumber.compareTo(endNumber) < 0) { ips.add(this.numberToIpv6(startNumber)); startNumber = startNumber.add(BigInteger.valueOf(1)); } return ips; } }
無(wú)論是IPV4還是IPV6,它們其實(shí)都是對(duì)應(yīng)整數(shù)值,但是為了方面人的理解和分析,對(duì)這個(gè)整數(shù)采用了某種格式化的方式進(jìn)行表示,比如IPV4是一個(gè)32的整數(shù),采用點(diǎn)分十進(jìn)制的格式表示,IPV6是一個(gè)128位的整數(shù),采用冒分十六進(jìn)制的個(gè)數(shù)表示,也就是說(shuō)對(duì)于一個(gè)給定的32位整數(shù),可以轉(zhuǎn)換成一個(gè)IP地址,同樣,對(duì)于一個(gè)給定的IP地址,可以轉(zhuǎn)換成一個(gè)32位的整數(shù),所以計(jì)算兩個(gè)IP地址之間的個(gè)數(shù)或者IP,其實(shí)就是計(jì)算兩個(gè)整數(shù)之間有多少個(gè)整數(shù)
只是IPV6對(duì)應(yīng)一個(gè)128位的整數(shù),所以使用Java基本的數(shù)據(jù)類(lèi)型long是無(wú)法存儲(chǔ)這么多位的數(shù)據(jù)的,需要采用了BigInteger
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73292.html
摘要:需求項(xiàng)目有一個(gè)保存實(shí)時(shí)抓拍圖片的功能需要統(tǒng)計(jì)攝像頭下每個(gè)時(shí)間點(diǎn)比如一分鐘保存的圖片個(gè)數(shù)并通過(guò)線型圖顯示到頁(yè)面上這很類(lèi)似股票的分時(shí)線圖的功能所以我參考了一些網(wǎng)上的文章采用來(lái)實(shí)現(xiàn)這個(gè)功能先交代一下項(xiàng)目里數(shù)據(jù)的一個(gè)情況攝像頭個(gè)數(shù)在個(gè)左右單個(gè)攝像頭 需求: 項(xiàng)目有一個(gè)保存實(shí)時(shí)抓拍圖片的功能,需要統(tǒng)計(jì)攝像頭下每個(gè)時(shí)間點(diǎn)(比如一分鐘)保存的圖片個(gè)數(shù),并通過(guò)線型圖顯示到頁(yè)面上.這很類(lèi)似股票的分時(shí)K...
摘要:小安分析的數(shù)據(jù)主要是用戶(hù)使用代理訪問(wèn)日志記錄信息,要分析的原始數(shù)據(jù)以的形式存儲(chǔ)。下面小安帶小伙伴們一起來(lái)管窺管窺這些數(shù)據(jù)。在此小安一定一定要告訴你,小安每次做數(shù)據(jù)分析時(shí)必定使用的方法方法。 隨著網(wǎng)絡(luò)安全信息數(shù)據(jù)大規(guī)模的增長(zhǎng),應(yīng)用數(shù)據(jù)分析技術(shù)進(jìn)行網(wǎng)絡(luò)安全分析成為業(yè)界研究熱點(diǎn),小安在這次小講堂中帶大家用Python工具對(duì)風(fēng)險(xiǎn)數(shù)據(jù)作簡(jiǎn)單分析,主要是分析蜜罐日志數(shù)據(jù),來(lái)看看一般大家都使用代理i...
摘要:因?yàn)楸救嗽诔啥紡氖虑岸耍赃@次爬取的關(guān)鍵詞既是成都,前端。僅僅有這個(gè)是不夠的,因?yàn)槊菜评淳W(wǎng)有反爬蟲(chóng),沒(méi)有好像得不到數(shù)據(jù)這個(gè)還待論證,至少我這邊是。 前言 showImg(https://segmentfault.com/img/bV1g4S?w=700&h=490); 今天是2018的第一天,首先祝各位小伙伴元旦快樂(lè)!又到了新的一年,雖然離春節(jié)還有一段時(shí)間,但是程序狗打工不易啊,不...
摘要:因?yàn)楸救嗽诔啥紡氖虑岸?,所以這次爬取的關(guān)鍵詞既是成都,前端。僅僅有這個(gè)是不夠的,因?yàn)槊菜评淳W(wǎng)有反爬蟲(chóng),沒(méi)有好像得不到數(shù)據(jù)這個(gè)還待論證,至少我這邊是。 前言 showImg(https://segmentfault.com/img/bV1g4S?w=700&h=490); 今天是2018的第一天,首先祝各位小伙伴元旦快樂(lè)!又到了新的一年,雖然離春節(jié)還有一段時(shí)間,但是程序狗打工不易啊,不...
閱讀 3493·2021-09-22 15:17
閱讀 2854·2021-09-02 15:15
閱讀 1884·2019-08-30 15:54
閱讀 2047·2019-08-30 14:02
閱讀 2589·2019-08-29 16:58
閱讀 3036·2019-08-29 16:08
閱讀 1395·2019-08-26 12:24
閱讀 1701·2019-08-26 10:41