检查字符串是Java中的主机名还是IP地址

Hor*_*ux7 3 java string ip-address hostname

我想检查字符串是Java中的主机名还是ip地址.是否有API可以执行此操作,还是我必须自己编写解析器?

问题很复杂,因为有IPv4地址,短和长IPv6地址,短主机名和FQDN主机名.

Blu*_*ict 6

似乎没有API,但编写这样的功能似乎并不是很困难.您可以在代码中检查以下条件:

  1. 如果sourceStr包含":"但不包含"." - > IPv6
  2. 如果sourceStr.matches("^.[0-9] {1,3}/.. [0-9] {1,3}/.. [0-9] {1,3}/.. [0- 9] {1,3}")== true) - > IPv4
  3. 如果sourceStr包含"." - > FQDN主机名
  4. 否则它必须是一个短主机名


MrG*_*mez 2

虽然理论上您可以使用常见的RFC核心 内容自行编写规则来处理这些情况,我会查看Google Guava 中的整个类,尤其是极端情况,例如它如何解决 4-in 的嵌入-6个地址。

至于确定您是否有 FQDN,请查看强制 IP 地址是否失败,然后尝试根据 DNS 进行解析。根据您的输入情况,其他任何内容都应该是不完全限定的主机名或本地解析。

  • 看起来 Guava 的类并不指示 String 是否包含主机名(非 IP 地址)。 (2认同)