从url解析ipv6地址

时间:2014-02-22 00:15:08

标签: c visual-c++ ipv6 ipv4

我正在使用VC ++并尝试从收到的url解析ip(ipv4 / ipv6)地址。有什么方法可以实现这一点。我知道一种方法是遍历url中的每个字符,并在ipv6的url中查找[和]。这似乎不是一个好方法,所以想知道是否有任何函数可以帮助我从URL中提取IP地址?

例如我的网址如下,

的http:// [FE80 :: 222:bdff:fef5:56a4]:80 / index.html的版本= 1.0和ID = 1

2 个答案:

答案 0 :(得分:1)

由于您使用标记了问题,我建议您使用wininet库中的InternetCrackUrl()进行解析。

答案 1 :(得分:0)

来自url解析器的一些代码。正则表达式过度。

    // Look for IPv6
    if( s[domain_start] == '[' ) {
        pos = s.find(']', domain_start);
        if (pos != string::npos && pos < domain_end && s[pos+1] == ':')
            ++pos;
        else
            pos = string::npos;
    } else {
        pos = s.find(':', domain_start);
    }

但是,如果您喜欢正则表达式,请参阅Perl URL cracker:

my ($protocol, $domain, $port, $path, $query, $fragment) = $url =~
    m!
        ^([^:/]*://)?
        ((?:\[[^]]*]) | (?:[^:/\\\#?]*))
        (:\d+)?
        (/[^?#]*)?
        (\?[^#]*)?
        (\#.*)?
    !x;

将它转换为C ++正则表达式库应该是直截了当的。