我们如何知道字符串是IP还是主机名

时间:2020-03-05 18:54:32  来源:igfitidea点击:

因此,我们有一个从管理Web UI检索的字符串(因此,它绝对是一个字符串)。我们如何找出该字符串是Java中的IP地址还是主机名?

更新:我想我并不清楚,我只是在问Java SDK中是否有什么可用来区分IP和主机名的?很抱歉给我们带来的困惑,感谢所有花时间/将花时间回答此问题的所有人。

解决方案

回答

我们可以通过以下模式使用正则表达式:

\b(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]?)\b

它将告诉我们是否是IPv4地址。

回答

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

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

将匹配" 0 999"中的任何值。

我们可以将其默认为主机名。

回答

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

回答

我们不能只参加正则表达式吗?

回答

URI validator = new URI(yourString);

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

如果我们想区分这两者,那么我想念问题。

回答

我们可以将安全管理器与InetAddress.getByName(addr)调用一起使用。

如果地址不是点分四边形,则" getByName"将尝试执行连接以进行名称查找,安全管理器可以将其捕获为" checkConnect(addr,-1)"调用,从而导致抛出抛出的SecurityException能赶上。

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