Package tech.riemann.etp
Class Ips
java.lang.Object
tech.riemann.etp.Ips
- Author:
- Kerbores(kerbores@riemann.tech)
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic StringgetIP(jakarta.servlet.http.HttpServletRequest request) 获取客户端IP地址 该方法首先检查HttpServletRequest对象是否为null,如果为null,则抛出IllegalArgumentException 然后,方法尝试通过一系列HTTP头信息来获取IP地址,如果这些头信息中没有合适的IP地址, 则通过HttpServletRequest对象的getRemoteAddr方法获取IP地址 最后,方法会检查获取到的IP地址是否有效,如果是IPv4或IPv6地址则直接返回,否则返回空字符串static StringhostIp()获取主机的IPv4地址 遍历所有网络接口,并查找IPv4地址 如果找到IPv4地址,则返回该地址;否则,返回nullstatic booleaninternalIp(byte[] addr) 判断给定的IP地址是否为内部IP地址 内部IP地址指的是私有网络中使用的IP地址,这些IP地址不会在互联网中路由 该方法通过检查IP地址的前两个字节来判断其是否属于私有地址范围static booleaninternalIp(String ip) 判断给定的IP地址是否为内部IP地址static longipV4ToLong(String ipv4) 将IPv4地址转换为长整型static long[]ipv6ToLongs(String ipv6) 将 IPv6 地址字符串转换为两个 long 值 此方法用于处理 IPv6 地址,将其转换为更容易处理的 long 值形式每个 IPv6 地址由 8 个 16 进制块组成, 每个块代表 16 位此方法将这些块组合成两个 long 值,每个值包含 4 个块static boolean判断一个IP地址是否在给定的CIDR地址范围内static Stringlongs2Ipv6(long[] longs) 将长整型数组转换为IPv6地址字符串 此方法接受一个包含两个长整型的数组,每个长整型表示IPv6地址的四组16位无符号整数 这些数字按照数组中的顺序串联起来,每组数字之间用冒号分隔,形成完整的IPv6地址static StringlongToIPV4(long longIp) 将长整型IP地址转换为IPv4字符串格式static byte[]将文本格式的IPv4地址转换为数值格式的字节数组
-
Constructor Details
-
Ips
public Ips()
-
-
Method Details
-
getIP
获取客户端IP地址 该方法首先检查HttpServletRequest对象是否为null,如果为null,则抛出IllegalArgumentException 然后,方法尝试通过一系列HTTP头信息来获取IP地址,如果这些头信息中没有合适的IP地址, 则通过HttpServletRequest对象的getRemoteAddr方法获取IP地址 最后,方法会检查获取到的IP地址是否有效,如果是IPv4或IPv6地址则直接返回,否则返回空字符串- Parameters:
request- HttpServletRequest对象,通过它来获取IP地址- Returns:
- 客户端的IP地址字符串如果获取失败或地址无效,则返回空字符串
-
internalIp
判断给定的IP地址是否为内部IP地址- Parameters:
ip- 字符串格式的IP地址- Returns:
- 如果IP地址为内部IP,则返回true;否则返回false
-
textToNumericFormatV4
将文本格式的IPv4地址转换为数值格式的字节数组- Parameters:
src- 文本格式的IPv4地址字符串- Returns:
- 数值格式的IPv4地址对应的字节数组,如果转换失败或输入非法,则返回空数组
-
internalIp
public static boolean internalIp(byte[] addr) 判断给定的IP地址是否为内部IP地址 内部IP地址指的是私有网络中使用的IP地址,这些IP地址不会在互联网中路由 该方法通过检查IP地址的前两个字节来判断其是否属于私有地址范围- Parameters:
addr- 一个包含IP地址的字节数组,该IP地址需要是4字节的IPv4地址- Returns:
- 如果给定的IP地址是内部IP地址,则返回true;否则返回false
-
hostIp
获取主机的IPv4地址 遍历所有网络接口,并查找IPv4地址 如果找到IPv4地址,则返回该地址;否则,返回null- Returns:
- 返回主机的IPv4地址字符串,如果获取失败则返回null
-
ipV4ToLong
将IPv4地址转换为长整型- Parameters:
ipv4- IPv4地址字符串,格式为"xxx.xxx.xxx.xxx"- Returns:
- 对应的长整型数值
-
longToIPV4
将长整型IP地址转换为IPv4字符串格式- Parameters:
longIp- 长整型IP地址- Returns:
- 转换后的IPv4字符串格式
-
ipv6ToLongs
将 IPv6 地址字符串转换为两个 long 值 此方法用于处理 IPv6 地址,将其转换为更容易处理的 long 值形式每个 IPv6 地址由 8 个 16 进制块组成, 每个块代表 16 位此方法将这些块组合成两个 long 值,每个值包含 4 个块- Parameters:
ipv6- IPv6 地址字符串- Returns:
- 包含两个 long 值的数组,这两个值表示输入的 IPv6 地址
- Throws:
IllegalArgumentException- 如果输入字符串不是有效的 IPv6 地址或为 null
-
longs2Ipv6
将长整型数组转换为IPv6地址字符串 此方法接受一个包含两个长整型的数组,每个长整型表示IPv6地址的四组16位无符号整数 这些数字按照数组中的顺序串联起来,每组数字之间用冒号分隔,形成完整的IPv6地址- Parameters:
longs- 包含两个元素的长整型数组,每个元素表示IPv6地址的一半- Returns:
- 转换后的IPv6地址字符串
- Throws:
IllegalArgumentException- 如果输入的数组为null或长度不为2,抛出此异常
-
isInRange
判断一个IP地址是否在给定的CIDR地址范围内- Parameters:
ip- 一个点分十进制格式的IP地址,例如"192.168.1.100"cidr- 一个CIDR地址范围,例如"192.168.1.0/24"- Returns:
- 如果IP地址在CIDR范围内返回true,否则返回false
-