使用hutu的NetUtil判断IP为内网

x33g5p2x  于2022-04-01 转载在 其他  
字(1.6k)|赞(0)|评价(0)|浏览(534)

之前写过一篇是关于怎么区分内网IP的方法,方法如下:

  1. import java.util.regex.Pattern
  2. /**
  3. * @program: fs-resource-usage
  4. * @description: IpUtils
  5. * @author: sunyuhua
  6. * @create: 2022-03-29 12:13
  7. **/
  8. object IpUtils {
  9. /**
  10. * 将string转化为byte[]
  11. * @param ipAdd
  12. * @return
  13. */
  14. private fun ipv4Address2BinaryArray(ipAdd: String): ByteArray {
  15. val binIP = ByteArray(4)
  16. val strArray = ipAdd.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
  17. for (i in strArray.indices) {
  18. binIP[i] = strArray[i].toInt().toByte()
  19. }
  20. return binIP
  21. }
  22. /**
  23. * 判断Ip v4 是不是内网IP
  24. */
  25. fun internalIp(ipAddress: String): Boolean {
  26. //任何不合法的字符,直接返回false
  27. if(!isIpV4(ipAddress)){
  28. return false
  29. }
  30. val address: ByteArray = ipv4Address2BinaryArray(ipAddress)
  31. val b0 = address[0]
  32. val b1 = address[1]
  33. //10.x.x.x/8
  34. val SECTION_1: Byte = 0x0A
  35. //172.16.x.x/12
  36. val SECTION_2 = 0xAC.toByte()
  37. val SECTION_3 = 0x10.toByte()
  38. val SECTION_4 = 0x1F.toByte()
  39. //192.168.x.x/16
  40. val SECTION_5 = 0xC0.toByte()
  41. val SECTION_6 = 0xA8.toByte()
  42. return when (b0) {
  43. SECTION_1 -> true
  44. SECTION_2 -> {
  45. return b1 in SECTION_3..SECTION_4
  46. }
  47. SECTION_5 -> {
  48. b1 == SECTION_6
  49. }
  50. else -> false
  51. }
  52. }
  53. fun isIpV4(ipAddress:String):Boolean{
  54. val ipv4="([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"
  55. return Pattern.compile(ipv4).matcher(ipAddress).matches()
  56. }
  57. }

现在使用hutu的netUtil和netty的

  1. /**
  2. * @program: javademo
  3. * @description:
  4. * @author: sunyuhua
  5. * @create: 2022-03-31 11:23
  6. **/
  7. public class IPTest {
  8. public static void main(String[] args) {
  9. //String ipAddress="-";
  10. String ipAddress="202.168.2.12";
  11. System.out.println(io.netty.util.NetUtil.isValidIpV4Address(ipAddress));
  12. System.out.println(cn.hutool.core.net.NetUtil.isInnerIP(ipAddress));
  13. }
  14. }

可以使用很简短的包代替之前方法。

相关文章