如何判断字符串是 IP 还是主机名

所以你有一个从管理 Web UI 中检索到的字符串(所以它肯定是一个字符串)。在 Java 中如何判断这个字符串是 IP 地址还是主机名?

更新:我想我没有说清楚,我更想问的是 Java SDK 中是否有任何东西可以用来区分 IP 和主机名?很抱歉给您带来困惑,并感谢所有花时间/将花时间回答这个问题的人。

请先 登录 后评论

6 个回答

Sam

您可以在此模式中使用正则表达式:

(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)

这会告诉你它是否是 IPv4 地址。

请先 登录 后评论
zxcv

可以查看字符串是否匹配number.number.number.number格式,例如:

d{1,3}.d{1,3}.d{1,3}.d{1,3}

将匹配 0 - 999 中的任何内容。

您可以将其默认为主机名。

请先 登录 后评论
Joel Coehoorn

我们是否可以假设它一个或另一个,而不是完全不同的东西?如果是这样,我可能会使用正则表达式来查看它是否匹配“点四边形”格式。

请先 登录 后评论
davetron5000

你不能只用一个正则表达式匹配它吗?

请先 登录 后评论
jjnguy
URI validator = new URI(yourString);

该代码将验证 IP 地址或主机名。 (如果字符串无效,则会抛出格式错误的 URI 异常)

如果你想区分这两者..那么我想念你的问题。

请先 登录 后评论
davenpcj

您可以在 InetAddress.getByName(addr) 调用中使用安全管理器。

如果 addr 不是点分四边形,getByName 将尝试执行连接以进行名称查找,安全管理器可以将其捕获为 checkConnect(addr, -1) 调用,导致您可以捕获的引发的 SecurityException。

如果您运行完全特权,则可以使用 System.setSecurityManager() 在调用 getByName 之前插入自定义安全管理器。

请先 登录 后评论