C++11 查找std::string中存储的主机名是C+中的ip地址还是FQDN地址+; 在C++中,使用升压库查找字符串是否是FQDN或IP地址。 我已经尝试了下面的代码,该代码对IP地址运行良好,但在FQDN的情况下抛出异常 // getHostname returns IP address or FQDN std::string getHostname() { // some work and find address and return return hostname; } bool ClassName::isAddressFqdn() { const std::string hostname = getHostname(); boost::asio::ip::address addr; addr.from_string(hostname.c_str()); //addr.make_address(hostname.c_str()); // make_address does not work in my boost version if ((addr.is_v6()) || (addr.is_v4())) { std::cout << ":: IP address : " << hostname << std::endl; return false; } // If address is not an IPv4 or IPv6, then consider it is FQDN hostname std::cout << ":: FQDN hostname: " << hostname << std::endl; return true; } //getHostname返回IP地址或FQDN std::string getHostname() { //一些工作,并找到地址和回报 返回主机名; } bool类名称::isAddressFqdn() { const std::string hostname=getHostname(); boost::asio::ip::addr地址; addr.from_字符串(hostname.c_str()); //addr.make_address(hostname.c_str());//make_address在我的boost版本中不起作用 if((addr.is_v6())| |(addr.is_v4())) { std::cout

C++11 查找std::string中存储的主机名是C+中的ip地址还是FQDN地址+; 在C++中,使用升压库查找字符串是否是FQDN或IP地址。 我已经尝试了下面的代码,该代码对IP地址运行良好,但在FQDN的情况下抛出异常 // getHostname returns IP address or FQDN std::string getHostname() { // some work and find address and return return hostname; } bool ClassName::isAddressFqdn() { const std::string hostname = getHostname(); boost::asio::ip::address addr; addr.from_string(hostname.c_str()); //addr.make_address(hostname.c_str()); // make_address does not work in my boost version if ((addr.is_v6()) || (addr.is_v4())) { std::cout << ":: IP address : " << hostname << std::endl; return false; } // If address is not an IPv4 or IPv6, then consider it is FQDN hostname std::cout << ":: FQDN hostname: " << hostname << std::endl; return true; } //getHostname返回IP地址或FQDN std::string getHostname() { //一些工作,并找到地址和回报 返回主机名; } bool类名称::isAddressFqdn() { const std::string hostname=getHostname(); boost::asio::ip::addr地址; addr.from_字符串(hostname.c_str()); //addr.make_address(hostname.c_str());//make_address在我的boost版本中不起作用 if((addr.is_v6())| |(addr.is_v4())) { std::cout,c++11,boost-asio,ip-address,fqdn,C++11,Boost Asio,Ip Address,Fqdn,简单的解决方案是,您只需捕获由addr.from_string try { addr.from_string(hostname.c_str()); } catch(std::exception& ex) { // not an IP address return true; } 如果例外情况困扰您,请致电: 否则,只需使用随处可见的工具即可 bool IsIpAddress(const char* address) { sockaddr_in addr4

简单的解决方案是,您只需捕获由
addr.from_string

try
{
    addr.from_string(hostname.c_str());
}
catch(std::exception& ex)
{
    // not an IP address
    return true;
}
如果例外情况困扰您,请致电:

否则,只需使用随处可见的工具即可

bool IsIpAddress(const char* address)
{
    sockaddr_in addr4 = {};
    sockaddr_in6 addr6 = {};

    int result4 = inet_pton(AF_INET, address, (void*)(&addr4));
    int result6 = inet_pton(AF_INET6, address, (void*)(&addr6));

    return ((result4 == 1) || (result6 == 1));
}

bool isAddressFqdn(const char* address)
{
    return !IsIpAddress(address);
}
bool IsIpAddress(const char* address)
{
    sockaddr_in addr4 = {};
    sockaddr_in6 addr6 = {};

    int result4 = inet_pton(AF_INET, address, (void*)(&addr4));
    int result6 = inet_pton(AF_INET6, address, (void*)(&addr6));

    return ((result4 == 1) || (result6 == 1));
}

bool isAddressFqdn(const char* address)
{
    return !IsIpAddress(address);
}