成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

統(tǒng)計(jì)兩個(gè)IP地址之間的IP個(gè)數(shù)

yanest / 1278人閱讀

摘要:?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

相關(guān)文章

  • 記Redis在項(xiàng)目中一個(gè)類(lèi)分時(shí)圖應(yīng)用場(chǎng)景設(shè)計(jì)

    摘要:需求項(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...

    kuangcaibao 評(píng)論0 收藏0
  • Python工具分析風(fēng)險(xiǎn)數(shù)據(jù)

    摘要:小安分析的數(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...

    Berwin 評(píng)論0 收藏0
  • ?Echarts統(tǒng)計(jì)拉勾網(wǎng)招聘信息(scrapy 爬?。?/b>

    摘要:因?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í)間,但是程序狗打工不易啊,不...

    genefy 評(píng)論0 收藏0
  • ?Echarts統(tǒng)計(jì)拉勾網(wǎng)招聘信息(scrapy 爬?。?/b>

    摘要:因?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í)間,但是程序狗打工不易啊,不...

    Jingbin_ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

yanest

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<