【问题标题】:java string detection of ipjava字符串检测ip
【发布时间】:2011-03-03 07:16:46
【问题描述】:

假设一个 java 字符串包含一个 IP(v4 或 v6)一个主机名。
在这些情况下,最好的检测方法是什么?
我对 IP 是否在有效范围内不太感兴趣(例如 IPv4 的 999.999.999.999)。
我只对一种检测字符串是主机名还是 IP(v4 或 v6)的方法感兴趣。
最初我认为:

if(theString.indexOf("@")!=-1){
//Not an Ip
}

但我不确定我是否应该总是期望包含@ 的格式。

谢谢

【问题讨论】:

  • 您正在寻找主机名中的“@”?我发布了一个答案,但我不确定你为什么关心那个角色。
  • somename@domainName 不是有效的主机名吗?
  • 这可能是一个电子邮件地址。主机名是指在 DNS 中查询时可能以某种方式解析的名称。在此处查看更多信息:en.wikipedia.org/wiki/Hostname

标签: java string network-programming


【解决方案1】:

带有Pattern class 的一组简单正则表达式将适用于此:

Pattern validIpAddressRegex = Pattern.compile("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$");
Pattern validHostnameRegex = Pattern.compile("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$");

// matches(String) Will return a boolean value
validIpAddress.matches("111.222.333.444"); 

我借用了this SO answer 的正则表达式。查看Wikipedia article on hostnames 了解更多关于什么是有效主机名的信息。

【讨论】:

    【解决方案2】:

    如果您的地址有冒号:,那么它就是 IPv6 地址。其余字符可以是十六进制数字(0-1、A-F、a-f)。

    如果地址只有数字和点,那么它就是 IPv4 地址。

    如果地址有任何字母,那么它就是主机名(主机名也可以有数字、点和其他字符)。

    这可以简单地实现为:

    public static String kindOfIP(final String addr)
        {
        if (addr.indexOf(":") >= 0)
            return "IPv6";
        if (addr.matches("^\\d+\\.\\d+\\.\\d+\\.\\d+$"))
            return "IPv4";
        return "hostname";
        }
    

    此代码不检查地址是否有效。

    【讨论】:

    • 主机名可以有字母、数字或连字符(有些使用下划线但最好不要使用)。点是 DNS 的一部分(您可以使用如下名称:hostname.domain 或 stackoverflow.com)。看看:en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
    • 如果您在浏览器 URL 地址中看到冒号,则它通常指定非标准服务端口。示例:http://localhost:8080/。如果您的字符串可以有这样的端口,那么要检查地址是否为 IPv6,您可以计算地址中有多少 :。如果大于 1 则为 IPv6。如果只有一个,它可以分隔主机名和端口。
    【解决方案3】:

    使用regular expression 匹配vs ip,如果不是ip,则为主机名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2012-09-27
      • 1970-01-01
      相关资源
      最近更新 更多