JAVA【long值与ip地址互转】 - ip的判别

阅读前提: 您需要了解什么是 ip地址

本章目的:实现ip地址和 long类型值的互转

一、应用范围

一般用在登录限制、查找IP所在城市等需求中,windows的ping命令也支持整数形式的IP。

二、关键技术点

将IP地址转化成整数的方法如下:

1、通过String的indexOf方法找出IP字符串中的点"."的位置。

2、根据点的位置,使用String的substring方法把IP字符串分成4段。

3、使用Long的parseLong方法把子段转化成一个3位整数。

4、通过左移位操作(<<)给每一段的数字加权,第一段的权为2的24次方,第二段的权为2的16次方,第三段的权为2的8次方,最后一段的权为1

将整数形式的IP地址转化成字符串的方法如下:

1、将整数值进行右移位操作(>>>),右移24位,右移时高位补0,得到的数字即为第一段IP。

2、通过与操作符(&)将整数值的高8位设为0,再右移16位,得到的数字即为第二段IP。

3、通过与操作符吧整数值的高16位设为0,再右移8位,得到的数字即为第三段IP。

4、通过与操作符吧整数值的高24位设为0,得到的数字即为第四段IP。

public class IPtoLong {
 
 
    
     //将127.0.0.1形式的IP地址转换成十进制整数,这里没有进行任何错误处理
     public static long ipToLong(String strIp){
         long[] ip = new long[4];
         //先找到IP地址字符串中.的位置
         int position1 = strIp.indexOf(".");
         int position2 = strIp.indexOf(".", position1 + 1);
         int position3 = strIp.indexOf(".", position2 + 1);
         //将每个.之间的字符串转换成整型
         ip[0] = Long.parseLong(strIp.substring(0, position1));
         ip[1] = Long.parseLong(strIp.substring(position1+1, position2));
         ip[2] = Long.parseLong(strIp.substring(position2+1, position3));
         ip[3] = Long.parseLong(strIp.substring(position3+1));
         return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
     }
    
     //将十进制整数形式转换成127.0.0.1形式的ip地址
     public static String longToIP(long longIp){
         StringBuffer sb = new StringBuffer("");
         //直接右移24位
         sb.append(String.valueOf((longIp >>> 24)));
         sb.append(".");
         //将高8位置0,然后右移16位
         sb.append(String.valueOf((longIp & 0x00FFFFFF) >>> 16));
         sb.append(".");
         //将高16位置0,然后右移8位
         sb.append(String.valueOf((longIp & 0x0000FFFF) >>> 8));
         sb.append(".");
         //将高24位置0
         sb.append(String.valueOf((longIp & 0x000000FF)));
         return sb.toString();
     }
    
     public static void main(String[] args){
         String ipStr = "58.50.24.78";
         long longIp = IPtoLong.ipToLong(ipStr);
         System.out.println("整数形式为:" + longIp);
         System.out.println("整数" + longIp + "转化成字符串IP地址:"
                 + IPtoLong.longToIP(longIp));
         //ip地址转化成二进制形式输出
         System.out.println("二进制形式为:" + Long.toBinaryString(longIp));
     }
 
}
时间: 2024-10-05 22:20:06

JAVA【long值与ip地址互转】 - ip的判别的相关文章

DNS反射放大攻击分析——DNS反射放大攻击主要是利用DNS回复包比请求包大的特点,放大流量,伪造请求包的源IP地址为受害者IP,将应答包的流量引入受害的服务器

DNS反射放大攻击分析 摘自:http://www.shaojike.com/2016/08/19/DNS%E6%94%BE%E5%A4%A7%E6%94%BB%E5%87%BB%E7%AE%80%E5%8D%95%E5%88%86%E6%9E%90/ 简介 DNS反射放大攻击主要是利用DNS回复包比请求包大的特点,放大流量,伪造请求包的源IP地址为受害者IP,将应答包的流量引入受害的服务器. 简单对比下正常的DNS查询和攻击者的攻击方式: 正常DNS查询:源IP地址 -–DNS查询--> DN

清除被隐藏网卡占用的IP地址,本机IP地址被占用

清除被隐藏网卡及占用的IP地址,本机IP地址被占用当主机中的网卡更换或换了一个插槽时,还要用到原来网卡的IP地址,但系统提示IP地址已经被本机中网卡占用,而主机里确实只有刚插入的网卡,这个原因就是以前插入的网卡占用了该IP地址,但它隐藏了,我们删不到它,在XP/2K3系统中解决方法如下: 方法一.在运行中输入regedit,打开注册表编辑器,找到"HKEY-LOCAL-MACHINE\System\ControlSet001\coontrol\sessionmanage\Environment,

ubuntu14.04静态ip地址与动态ip地址配置

有时我们希望Ubuntu14.04的ip地址为静态ip地址,使得ubuntu中的ip地址不变,这样会方便在嵌入式设备和主机Ubuntu进行用网口进行调试. 静态ip地址的配置方法:在/etc/network/interfaces文件中,修改内容为 # interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback auto eth0 iface eth0 inet static #iface eth0

python编写IP地址与十进制IP转换脚本

IP地址与十进制IP转换 #!/usr/bin/env python #encoding=utf-8 import re import sys import os def ten_to_two(ten_num): two_str = '' while ten_num != 1: a = ten_num % 2 two_str = two_str + str(a) ten_num = ten_num / 2 else: two_str = two_str + str(1) two_str = tw

PHP获取IP地址及根据IP判断城市实现城市切换或跳转

PHP获取IP地址 这个比较简单了,利用PHP自带函数就可以了,PHP中文手册看一下,都有现成的例子,就不过多说明了,直接上代码,A段: ? <? //PHP获取当前用户IP地址方法 $xp_UserIp = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $xp_UserIp = ($xp_UserIp) ? $xp_

linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换

用域名获取IP地址或者用IP获取域名 #include<stdio.h> #include<sys/socket.h> #include<netdb.h> int main(int argc,char **aggv) { struct hostent *host; char hostname[]="www.163.com"; char hostname2[]="www.baidu.com"; struct in_addr in;

我的 IP 地址(View IP address)

插件介绍: 很多时候我们需要使用到IP地址,这个名词可能人人都知道,但是你知道怎么查看你自己的IP地址吗?今天为大家推荐一款查看IP地址的插件.我的 IP 地址(View IP address),此应用程序显示有关您的 IP 地址,例如地理定位. ISP. DNS,详细的信息 whois,路由. 托管. 域的邻居,DNSBL,BGP 和 ASN 信息. 使用说明: 将我的 IP 地址(View IP address)添加至chrome,并在扩展器中启动它. 功能介绍: -像 ISP. ASN.

(转)ip地址,手机ip查询

页面地址:http://www.ip138.com/ 外链地址(实际主页面里面有)http://www.ip138.com/iplink.htm 外链地址里面的内容: <FORM METHOD=get ACTION="http://www.ip138.com/ips1388.asp" name="ipform" target="_blank"><tr><td align="center">I

关于公共IP地址(公网ip):您需要知道的

目录:? 什么是公共ip地址?? 私有IP与公共IP地址? 公共IP地址范围? 如何查找您的公共IP地址? 动态ip? 隐藏您的公共IP地址 什么是公共ip地址? 公共IP地址是您的家庭或企业路由器从ISP接收的IP地址.任何可公开访问的网络硬件都需要公共IP地址,例如家庭路由器以及托管网站的服务器.公共IP地址是插入公共互联网的所有设备的不同之处.每个访问互联网的设备都使用唯一的IP地址.实际上,公共IP地址有时被称为Internet IP. 这是每个互联网服务提供商用于将互联网请求转发到特定