c++ - ¿Cómo convertir la URL en una dirección IP usando boost:: asio?
boost-asio ip-address (1)
Recuerde que puede haber varias direcciones IP para cualquier nombre de host, boost le brinda un iterador que las revisará.
El uso es bastante sencillo, agregue esto antes de la return 0;
de su programa:
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'';
y no olvide #include <boost/asio.hpp>
prueba de funcionamiento:
~ $ 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
PD: para referencia, llamé
- constructor de resolución TCP
- El constructor de servicio / host de la consulta con un valor de servicio
""
no importa""
de""
- la forma de resolución de lanzar ()
- referenciado el iterador para obtener una entrada de resolución
- se usó la conversión de tipo resolver_entry al punto final
- Se usó el acceso a la dirección del punto extremo TCP ()
- use el operator<< para mostrar la dirección: podría usar to_string() lugar, si es necesario.
Así que necesito alguna forma de convertir el Protocol://URLorIP:Port
cadena en cadena ip
int port
¿Cómo hacer eso con boost ASIO y Boost Regex? ¿O es posible? Obtener IP usando C ++ Net Lib (impulsar candidato) - aviso - no necesitamos una conexión larga, solo IP.
Así que actualmente utilizo dicho código para analizar
#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: %s/n", names[i], values[i].c_str());
}
return 0;
}
¿Qué debo agregar a mi pequeño programa para analizar la URL en IP?