我们如何知道字符串是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(),以插入自定义安全管理器。