从字符串中获取IP地址(Groovy)

8
我希望提取IP地址并将其返回。类似于以下内容:
def getIPfromString ( myString ) {

  ..
  return IP 
}

IP = getIPfromString("ftp://192.168.13.108/720_prev")
print " IP Address : " + IP

输出:

IP Address : 192.168.13.108
2个回答

5
您可以使用Java的URL类,并加入一些Groovy魔法;-)
String getAddressFromString( String url ) {
  url.toURL().host
}

String ip = getAddressFromString( 'ftp://192.168.13.108/720_prev' )

println "IP Address : $ip"

按要求输出如下:

IP Address : 192.168.13.108

这似乎适用于 http:ftp:,但当我尝试将其用于 ssl: URL 时,我会收到以下错误:Caught: java.net.MalformedURLException: unknown protocol: ssl我认为 toURL() 方法无法识别 ssl 协议的 URL。 - cognoscente

5
如果URL已经有IP地址,那么将其转换为URL即可提取IP地址,但如果在URL主机组件中发现了域名主机名(例如www.stackoverflow.com),则需要执行DNS查询以解析地址。这需要调用Java API中的InetAddress.getByName()
如果URL已经有地址,则InetAddress.getByName()将直接返回地址。另外,还需要处理异常处理,如果主机名无法解析为地址。
        String getAddressFromString( String url ) 
         throws MalformedURLException, UnknownHostException
        {
          String host = url.toURL().host
          // this would be equivalent to calling new URL(url).getHost()
          return InetAddress.getByName(host).getHostAddress()
        }

        String ip = getAddressFromString( "http://stackoverflow.com/" )
        println "IP Address : $ip"

输出:

IP Address : 69.59.197.21

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接