java判断字符串为ip地址_java判断IP地址类型,以及判断是否属于同一网段

函数与提取:

public static boolean isSameAddress(String resourceIp, String requestIp);判断是否属于同一网段,默认子网掩码

public static boolean isSameAddress(String resourceIp, String requestIp, String subnetMask);判断是否属于同一网段,指定子网掩码

public static String getIpType(String ip);判断IP地址类型A、B、C类

package com.laiwei.stream.util;

import com.laiwei.framework.exception.RuleIllegalArgumentException;

import org.junit.Test;

public class IpV4Util {

public static final String DEFAULT_SUBNET_MASK_A = "255.0.0.0";

public static final String DEFAULT_SUBNET_MASK_B = "255.255.0.0";

public static final String DEFAULT_SUBNET_MASK_C = "255.255.255.0";

public static final String TYPE_IP_A = "A";

public static final String TYPE_IP_B = "B";

public static final String TYPE_IP_C = "C";

public static final String TYPE_IP_D = "D";

public static final String TYPE_IP_LOCATE = "locate";

//@Test

//public void test() {

//System.out.println(isSameAddress("192.168.1.1", "192.168.1.5", DEFAULT_SUBNET_MASK_C));

//

//}

@Test

public void test() {

String ip_a="127.0.01.15";

String ip_c="192.168.1.1";

String binaryIp = getBinaryIp("192.168.1.1");

System.out.println(getIpType(ip_a));

}

//判断ip是否属于同一网段,默认子网掩码

public static boolean isSameAddress(String resourceIp, String requestIp) {

if (getIpType(resourceIp).equals(getIpType(requestIp))){

return isSameAddress(resourceIp,requestIp,getIpDefaultMask(getIpType(resourceIp)));

}

return false;

}

//通过ip类型,获取默认IP子网掩码

private static String getIpDefaultMask(String ipType){

switch (ipType){

case TYPE_IP_A:return DEFAULT_SUBNET_MASK_A;

case TYPE_IP_B:return DEFAULT_SUBNET_MASK_B;

case TYPE_IP_C:return DEFAULT_SUBNET_MASK_C;

default:throw new RuleIllegalArgumentException("没有对应的mask地址");

}

}

//判断ip是否属于同一网段

public static boolean isSameAddress(String resourceIp, String requestIp, String subnetMask) {

String resourceAddr = getAddrIp(resourceIp, subnetMask);

String subnetMaskAddr = getAddrIp(requestIp, subnetMask);

if (resourceAddr.equals(subnetMaskAddr)) {

return true;

}

return false;

}

//获取ip的二进制字符串

private static String getBinaryIp(String data) {

String[] datas = data.split("\\.");

String binaryIp = "";

for (String ipStr : datas) {

long signIp = Long.parseLong(ipStr);

String binary = Long.toBinaryString(signIp);

long binaryInt = Long.parseLong(binary);

binaryIp += String.format("%08d", binaryInt);

}

return binaryIp;

}

//获取ip的地址位

private static String getAddrIp(String ip, String subnetMask) {

StringBuilder addrIp = new StringBuilder();

String binaryIp = getBinaryIp(ip);

String binarySubnetMask = getBinaryIp(subnetMask);

for (int i = 0; i < 32; i++) {

byte ipByte = Byte.parseByte(String.valueOf(binaryIp.charAt(i)));

byte subnetMaskByte = Byte.parseByte(String.valueOf(binarySubnetMask.charAt(i)));

addrIp.append(ipByte & subnetMaskByte);

}

return addrIp.toString();

}

//获取ip是什么类型,ABCD

public static String getIpType(String ip) {

String binaryIp = getBinaryIp(ip);

System.out.println(binaryIp);

if (ip.startsWith("127")){

return TYPE_IP_LOCATE;

}

if (binaryIp.startsWith("0")){

return TYPE_IP_A;

}

if (binaryIp.startsWith("10")){

return TYPE_IP_B;

}

if (binaryIp.startsWith("110")){

return TYPE_IP_C;

}

if (binaryIp.startsWith("1110")){

return TYPE_IP_D;

}

throw new RuleIllegalArgumentException("无效ip异常");

}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值