`
stephen830
  • 浏览: 2969281 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ip地址与数字(长整数)之间的转换

    博客分类:
  • java
阅读更多
★★★ 本篇为原创,需要引用转载的朋友请注明:《 http://stephen830.iteye.com/blog/254742 》 谢谢支持! ★★★

在分析网站的客户来源经常会要求根据客户的ip地址去判断客户国家位置或者城市位置。当然要做到这一步,你要有一个详细的ip地址库。

ip地址库中一般是通过ip地址转换来的数字(长整数)来划分国家或者城市。ip地址库数据库的一般格式为:

...
startIpLongNumber   endIpLongNumber CountryName CountryCode CityName
...

而在应用中需要将客户的ip地址字符串转成一个长整数,然后才能到地址库中去查找。

下面就给出ip->long , long->ip的转换方法。

/**
     * ip地址转成整数.
     * @param ip
     * @return
     */
    public static long ip2long(String ip) {
    	String[] ips = ip.split("[.]");
    	long num =  16777216L*Long.parseLong(ips[0]) + 65536L*Long.parseLong(ips[1]) + 256*Long.parseLong(ips[2]) + Long.parseLong(ips[3]);
    	return num;
    }
    
    /**
     * 整数转成ip地址.
     * @param ipLong
     * @return
     */
    public static String long2ip(long ipLong) {
    	//long ipLong = 1037591503;
    	long mask[] = {0x000000FF,0x0000FF00,0x00FF0000,0xFF000000};
    	long num = 0;
    	StringBuffer ipInfo = new StringBuffer();
    	for(int i=0;i<4;i++){
    		num = (ipLong & mask[i])>>(i*8);
    		if(i>0) ipInfo.insert(0,".");
    		ipInfo.insert(0,Long.toString(num,10));
    	}
    	return ipInfo.toString();
    }


通过上面这2个方法,就可以很方便的将一个ip地址字符串折算为一个long数字;或者将一个long数字还原成一个ip地址字符串。
分享到:
评论
8 楼 leeldy 2009-02-12  
厄,貌似是我计算错了。。。
是32位,Long足够了
汗。。。
7 楼 stephen830 2009-02-12  
leeldy 写道
用Long型也会超过数据范围啊
Long.MAX_VALUE也只有2^63-1
而IPV4的地址最大可以是255.255.255.255
换成16进制就是0xFFFFFFFF
一共有64位,超过了Long的范围

你要将IP地址转换成数字的话,只能用BigInteger了


ip2long("255.255.255.255")=4294967295, 没有超出范围。
6 楼 leeldy 2009-02-12  
用Long型也会超过数据范围啊
Long.MAX_VALUE也只有2^63-1
而IPV4的地址最大可以是255.255.255.255
换成16进制就是0xFFFFFFFF
一共有64位,超过了Long的范围

你要将IP地址转换成数字的话,只能用BigInteger了
5 楼 stephen830 2009-02-12  
duronshi 写道
这样,如何与ip库里面进行对比呢?


一般ip库里面的数据按照如下格式

start_ip,end_ip,start_ip_num,end_ip_num,country_code,country_name
'112.63.162.116', '112.63.162.119', 1883218548, 1883218551, 'ES', 'Spain'
'112.63.162.120', '112.63.162.123', 1883218552, 1883218555, 'FR', 'France'
'112.63.162.148', '112.63.162.151', 1883218580, 1883218583, 'BE', 'Belgium'


所以要根据客户的ip计算出来的数字,与ip库中的[start_ip_num,end_ip_num]去匹配。
4 楼 duronshi 2009-02-12  
这样,如何与ip库里面进行对比呢?
3 楼 stephen830 2009-02-09  
xplazy 写道

测试了一下好像不对嘛。System.out.println(ip2long("203.208.37.104"));System.out.println(long2ip(-875551384L));System.out.println(ip2long("192.168.1.2"));System.out.println(long2ip(-1062731518L));输出:-875551384-53.208.37.104-1062731518-64.168.1.2


现在对了,原来默认是用int的,数据超出范围了!谢谢
2 楼 xplazy 2009-02-09  
测试了一下好像不对嘛。

System.out.println(ip2long("203.208.37.104"));
System.out.println(long2ip(-875551384L));

System.out.println(ip2long("192.168.1.2"));
System.out.println(long2ip(-1062731518L));


输出:
-875551384
-53.208.37.104
-1062731518
-64.168.1.2
1 楼 xplazy 2009-02-09  
不错支持一下、

相关推荐

    易语言转换IP到长整数源码

    易语言转换IP到长整数源码。@资源源码站。

    C#正则表达式分解和转换IP地址实例(C#正则表达式大全 c#正则表达式语法)

    只能输入数字:”^[0-9]*$”。 只能输入n位的数字:”^\d{n}$”。 只能输入至少n位的数字:”^\d{n,}$”。 只能输入m~n位的数字:。”^\d{m,n}$” 只能输入零和非零开头的数字:”^(0|[1-9][0-9]*)$”。 只能输入有...

    华为机试华为OD机试算法题Python源码(41道).zip

    分别统计出包含英文字母、空格、数字和其它字符的个数.py,数据分类处理.py,数字颠倒.py,素数伴侣.py,提取不重复的整数.py,统计每个月兔子的总数.py,图片整理.py,整数与IP地址间的转换.py,质数因子.py,字串的连接最长...

    常用js大全,javascript校验大全

    2.10 检验IP地址 . 124 2.11 校验忽略样式内容后文本域中的内容是否为空//校验忽略样式内容 后文本域中的内容是否为空.. 124 2.12 计算天数差的函数. 125 2.13 把结束日期月份加上月末日期.. 125 2.14 检验输入的...

    delphi 开发经验技巧宝典源码

    0080 判断IP地址是否合法的算法 53 0081 判断身份证是否合法的算法 54 0082 判断素数的算法 55 0083 将字符串转换成Unicode格式 56 3.4 排序及分组类算法 56 0084 利用回溯法将一组数平均分成两组 56 ...

    易语言 茶凉专用模块

    模块名称:茶凉专用模块 作者:茶凉 版本:2.0 本模块可以编程更简单...子程序 读内存长整数型, 长整数型, 公开, 从内存中读取长整数型数据,失败返回失败内容 .参数 进程ID, 整数型, , 进程ID .参数 地址, 整数型, , ...

    delphi 开发经验技巧宝典源码06

    0080 判断IP地址是否合法的算法 53 0081 判断身份证是否合法的算法 54 0082 判断素数的算法 55 0083 将字符串转换成Unicode格式 56 3.4 排序及分组类算法 56 0084 利用回溯法将一组数平均分成两组 56 ...

    java jdk实列宝典 光盘源代码

    IP地址转化成整数,整数转化成IP地址; 十八为身份证格式验证;表达式解析器;字符串编码的转换;字符串对齐器;密码加密和验证(MD5); 制作命令行程序;使用正则表达式操作字符串;使用正则表达式验证电话号码的...

    java 正则表达式

    下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序: function IP2V(ip){re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式if(re.test(ip)){return RegExp.$1*Math.pow(255,3))+...

    js脚本大全 js验证大全 压缩包

    2.10 检验IP地址 . 124 2.11 校验忽略样式内容后文本域中的内容是否为空//校验忽略样式内容 后文本域中的内容是否为空.. 124 2.12 计算天数差的函数. 125 2.13 把结束日期月份加上月末日期.. 125 2.14 检验输入的...

    EXCEL集成工具箱V8.0完整增强版(精简)

    【繁简转换】 可视化的繁简体GB与BGK码以及GB2与BIG5码相互转换,可以复制文本到当前窗体中文本进行转换,也可以实现单个文件或批量文件的转换。在窗体中双击文本字符串尾即可实现自动选定文本并自动复制功能。本...

    EXCEL集成工具箱V6.0

    常 用 工 具 【繁简转换】 可视化的繁简体GB与BGK码以及GB2与BIG5码相互转换,可以复制文本到当前窗体中文本进行转换,也可以实现单个文件或批量文件的转换。在窗体中双击文本字符串尾即可实现自动选定文本并自动...

    Java JDK实例宝典

    5 IP地址转化成整数 5. 6 18位身份证格式验证 5. 7 表达式解析器 5. 8 字符串编码的转换 5. 9 字符串对齐器 5. 10 密码加密与验证 5. 11 制作命令行程序 5. 12 使用StringTokenizer ...

    C#编程经验技巧宝典

    100 &lt;br&gt;0158 如何将二进制数转换为十六进制数 100 &lt;br&gt;0159 如何实现0~9之间随机整数 101 &lt;br&gt;0160 如何实现0~1之间随机数 101 &lt;br&gt;0161 如何返回数字的绝对值 101 &lt;br&gt;5.2 控件数据处理...

    senlon实用查询工具大全 v2014 本地数据库版.zip

    IP地址查询、html加密解密、弹出式窗口代码生成、、CSS生成器、html与js代码互转、HTML转换PHP代码、HTML转换为Perl代码、框架网页代码生成、GB2312转UTF8代码、网页调式器、字符串长度计算、md5加密代码、Encode...

    大量批处理实用程序例程

    中文数字转换为阿拉伯数字.cmd 人民币大小写互转程序.cmd 人民币金额小写转大写.cmd 十进制转二进制.cmd 十进制转十六进制.cmd 字母大小写转换.cmd 把秒转换为天小时分秒的格式.cmd 阿拉伯与罗马数字互转程序.cmd ...

    python cookbook(第3版)

    11.4 通过CIDR地址生成对应的IP地址集 11.5 创建一个简单的REST接口 11.6 通过XML-RPC实现简单的远程调用 11.7 在不同的Python解释器之间交互 11.8 实现远程方法调用 11.9 简单的客户端认证 11.10 在网络服务...

    精易模块[源码] V5.15

    4、新增“注册表操作Ex-&gt;写QWORD_64值”写入64位长整数值,成功返回真,失败返回假.源码由@pp25729391提供。 5、修正“类_APIHOOK-&gt;取地址”当安装时不填后缀,而取地址填写后无法获取已安装地址BUG,感谢易友【@...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例022 自动类型转换与强制类型转换 33 2.2 运算符 34 实例023 加密可以这样简单(位运算) 34 实例024 用三元运算符判断奇数和偶数 35 实例025 更精确地使用浮点数 35 实例026 不用乘法运算符实现2×16 37 实例027...

Global site tag (gtag.js) - Google Analytics