JAVA判断某个IP是否在指定IP段内

用JAVA实现了一个判断某个IP是否在指定IP段内的方法,方便网站上使用黑白名单功能,有两种方法,推荐使用方法一。

public class testIP {

	/**
	 * 判断IP是否在指定IP段内,方法一(推荐)
	 * ipRange IP段(以'-'分隔)
	 * 
	 * @param ipRange
	 * @param ip
	 * @return boolean
	 */
	public static boolean ipIsInRange(String ip, String ipRange) {
		if (ipRange == null)
			throw new NullPointerException("IP段不能为空!");
		if (ip == null)
			throw new NullPointerException("IP不能为空!");
		ipRange = ipRange.trim();
		ip = ip.trim();
		final String REGX_IP = "((25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)";
		final String REGX_IPB = REGX_IP + "\\-" + REGX_IP;
		if (!ipRange.matches(REGX_IPB) || !ip.matches(REGX_IP))
			return false;
		int idx = ipRange.indexOf('-');
		String[] sips = ipRange.substring(0, idx).split("\\.");
		String[] sipe = ipRange.substring(idx + 1).split("\\.");
		String[] sipt = ip.split("\\.");
		long ips = 0L, ipe = 0L, ipt = 0L;
		for (int i = 0; i < 4; ++i) {
			ips = ips << 8 | Integer.parseInt(sips[i]);
			ipe = ipe << 8 | Integer.parseInt(sipe[i]);
			ipt = ipt << 8 | Integer.parseInt(sipt[i]);
		}
		if (ips > ipe) {
			long t = ips;
			ips = ipe;
			ipe = t;
		}
		return ips <= ipt && ipt <= ipe;
	}

	/*
	 * 判断IP是否在指定IP段内,方法二
	 * ipRange IP段(以'-'分隔)
	 * 
	 * @param ipRange
	 * @param ip
	 * @return boolean
	 */
	public static boolean ipInRange(String ip, String ipRange) {
		int idx = ipRange.indexOf('-');
		String beginIP = ipRange.substring(0, idx);
		String endIP = ipRange.substring(idx + 1);
		return getIp2long(beginIP) <= getIp2long(ip)
				&& getIp2long(ip) <= getIp2long(endIP);
	}

	public static long getIp2long(String ip) {
		String[] ips = ip.split("\\.");
		long ip2long = 0L;
		for (int i = 0; i < 4; ++i) {
			ip2long = ip2long << 8 | Integer.parseInt(ips[i]);
		}
		return ip2long;

	}

	public static void main(String[] args) {
		// 判断192.168.1.100 是否在IP段192.168.1.1-192.168.1.254内
		String ip = "192.168.18.100";
		String ipRange = "192.168.1.1-192.168.1.254";
		boolean isInRange = ipIsInRange(ip, ipRange);
		//boolean isInRange = ipInRange(ip, ipRange);
		System.out.println(isInRange);
	}

完!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
判断IP地址是否指定地区范围内,可以使用IP地址库和Java中的IP地址操作类。以下是一个简单的示例: ```java import java.net.InetAddress; import java.net.UnknownHostException; // 使用IP地址库来获取IP地址所属的地区 import com.maxmind.geoip2.DatabaseReader; import com.maxmind.geoip2.exception.GeoIp2Exception; import com.maxmind.geoip2.model.CityResponse; import com.maxmind.geoip2.record.Country; import com.maxmind.geoip2.record.Subdivision; public class IpRegionChecker { // GeoLite2-City.mmdb为IP地址库文件,可以从MaxMind官网下载 private static final String IP_DATABASE_PATH = "GeoLite2-City.mmdb"; private DatabaseReader reader; public IpRegionChecker() throws Exception { reader = new DatabaseReader.Builder(getClass().getResourceAsStream(IP_DATABASE_PATH)).build(); } public String getRegion(String ipAddress) throws UnknownHostException, GeoIp2Exception { InetAddress inetAddress = InetAddress.getByName(ipAddress); CityResponse response = reader.city(inetAddress); Country country = response.getCountry(); Subdivision subdivision = response.getMostSpecificSubdivision(); String region = subdivision.getName(); return region; } public static void main(String[] args) throws Exception { IpRegionChecker checker = new IpRegionChecker(); String ipAddress = "192.168.1.100"; // 要判断IP地址 String region = checker.getRegion(ipAddress); // 获取该IP地址所属的地区 System.out.println("IP地址 " + ipAddress + " 所属地区为:" + region); } } ``` 需要使用MaxMind提供的IP地址库,可以从其官网下载。该示例使用了GeoLite2-City.mmdb文件,可以在构造函数中指定IP地址库文件路径。在`getRegion()`方法中,首先使用InetAddress类将IP地址转换为InetAddress对象,然后使用DatabaseReader类读取IP地址库文件,获取该IP地址所属的国家和地区信息。最后返回该IP地址所属的地区名称。可以根据需要修改该示例来满足不同的需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vicle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值