All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.weicoder.common.util.IpUtil Maven / Gradle / Ivy

package com.weicoder.common.util;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
import java.util.List;

import com.weicoder.common.constants.ArrayConstants;
import com.weicoder.common.constants.StringConstants;
import com.weicoder.common.lang.Conversion;
import com.weicoder.common.lang.Lists;
import com.weicoder.common.lang.Validate;

/**
 * IP工具集
 * @author WD
 * 
 */
public final class IpUtil {
	// 本机IP 127.0.0.1
	public final static String	LOCAL_IP	= "127.0.0.1";
	// 本服务器IP
	public final static String	SERVER_IP	= getIp();

	/**
	 * 设置代理
	 * @param host 代理服务器
	 * @param port 代理端口
	 */
	public static void setProxy(String host, String port) {
		// 设置代理模式
		System.getProperties().setProperty("proxySet", "true");
		// 设置代理服务器
		System.getProperties().setProperty("http.proxyHost", host);
		// 设置代理端口
		System.getProperties().setProperty("http.proxyPort", port);
	}

	/**
	 * 获得本机IP
	 * @return 本机IP
	 */
	public static String getIp() {
		if (EmptyUtil.isEmpty(SERVER_IP) && !LOCAL_IP.equals(SERVER_IP)) {
			// 获得ip列表
			String[] ips = getIps();
			// 如果为空
			if (EmptyUtil.isEmpty(ips)) {
				return StringConstants.EMPTY;
			}
			// 获得第一个IP
			String ip = ips[0];
			// 循环全部IP
			for (int i = 1; i < ips.length; i++) {
				// 不是内网IP
				String tmp = ips[i];
				if (!tmp.startsWith("192.168") && !tmp.startsWith("10.")) {
					ip = tmp;
					break;
				}
			}
			// 返回ip
			return ip;
		} else {
			return SERVER_IP;
		}
	}

	/**
	 * 获得本机IP数组
	 * @return 客户端IP组
	 */
	public static String[] getIps() {
		try {
			// 声明IP列表
			List list = Lists.newList();
			// 获得网络接口迭代
			Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces();
			// 循环所以网络接口 获得IP
			while (netInterfaces.hasMoreElements()) {
				// 获得IP迭代
				Enumeration ips = netInterfaces.nextElement().getInetAddresses();
				// 循环获得IP
				while (ips.hasMoreElements()) {
					// 获得IP
					String ip = ips.nextElement().getHostAddress();
					// 判断不是IP和本机IP
					if (Validate.isIp(ip) && !LOCAL_IP.equals(ip)) {
						list.add(ip);
					}
				}
			}
			// 返回IP数组
			return Lists.toArray(list);
		} catch (Exception e) {
			return ArrayConstants.STRING_EMPTY;
		}
	}

	/**
	 * 编码IP为int
	 * @param ip 要编码的IP
	 * @return 返回编码后的int
	 */
	public static int encode(String ip) {
		// 判断是IP
		if (Validate.isIp(ip)) {
			// 拆分IP
			String[] t = ip.split("\\.");
			// 判断数组长度为4
			if (t.length == 4) {
				return Conversion.toInt(t[0]) << 24 | Conversion.toInt(t[1]) << 16 | Conversion.toInt(t[2]) << 8 | Conversion.toInt(t[3]);
			}
		}
		// 失败返回0
		return 0;
	}

	/**
	 * 编码IP为int
	 * @param ip 要编码的IP
	 * @return 返回编码后的int
	 */
	public static String decode(int ip) {
		// 声明IP字符串缓存
		StringBuilder sb = new StringBuilder(15);
		sb.append(ip >>> 24);
		sb.append(StringConstants.POINT);
		sb.append((ip >> 16) & 0xFF);
		sb.append(StringConstants.POINT);
		sb.append((ip >> 8) & 0xFF);
		sb.append(StringConstants.POINT);
		sb.append(ip & 0xFF);
		// 失败返回0
		return sb.toString();
	}

	private IpUtil() {}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy