Как превратить URL в IP-адрес с помощью boost:: asio?

поэтому мне нужен какой-то способ поворота Protocol://URLorIP:Port строка в строку ip int port как сделать такую вещь с boost ASIO и Boost Regex? Или это возможно - получить IP с помощью C++ Net Lib (boost candidate) - обратите внимание - нам не нужно длинное соединение-только IP.

поэтому я в настоящее время использую такой код для разбора

#include <boost/regex.hpp>
#include <vector>
#include <string>

int main(int argc, char** argv)
{
    if (argc < 2) return 0;

    std::vector<std::string> values;
    boost::regex expression(
        //   proto                 host               port
        "^(?:([^:/?#]+)://)?(w+[^/?#:]*)(?::(d+))?"
        //   path                  file       parameters
        "(/?(?:[^?#/]*/)*)?([^?#]*)?(\?(.*))?"
    );
    std::string src(argv[1]);
    if (boost::regex_split(std::back_inserter(values), src, expression))
    {
        const char* names[] = {"Protocol", "Host", "Port", "Path", "File", 
                "Parameters", NULL};
        for (int i = 0; names[i]; i++)
            printf("%s: %sn", names[i], values[i].c_str());
    }
    return 0;
}

что добавить в мою небольшую программу для анализа URL в IP?

1 ответов


помните, что может быть несколько IP-адресов для любого одного имени хоста, boost дает вам итератор, который будет проходить через них.

использование довольно просто, добавьте это перед return 0; программы:

std::cout << "IP addresses: \n";
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query query(values[1], "");
for(boost::asio::ip::tcp::resolver::iterator i = resolver.resolve(query);
                            i != boost::asio::ip::tcp::resolver::iterator();
                            ++i)
{
    boost::asio::ip::tcp::endpoint end = *i;
    std::cout << end.address() << ' ';
}
std::cout << '\n';

не забудьте #include <boost/asio.hpp>

тест:

~ $ g++ -g -Wall -Wextra -pedantic -Wconversion -ansi -o test test.cc -lboost_regex -lboost_system -lboost_thread
~ $ ./test http://www.google.com:7777
Protocol: http
Host: www.google.com
Port: 7777
Path:
File:
Parameters:
IP addresses:
74.125.226.179 74.125.226.176 74.125.226.178 74.125.226.177 74.125.226.180

PS: Для справки, я позвонила