#include <xtd/xtd>
#include <regex>
class test_ip_address {
public:
static auto main(const argument_collection& args) {
auto server = text::string_builder {};
auto rex = std::regex {R"(^[a-zA-Z]\w{1,39}$)"};
if (args.size() < 1) {
server = net::dns::get_host_name();
console::write_line("Using current host: {}", server);
} else {
server = args[0];
if (!regex_match(server.chars(), rex)) {
console::write_line("Input string format not allowed.");
return;
}
}
ip_addresses(server.to_string());
ip_address_additional_info();
}
private:
static void ip_addresses(const string& server) {
try {
auto heserver = net::dns::get_host_entry(server);
for (auto cur_add : heserver.address_list()) {
console::write_line("address_family: {}", cur_add.address_family());
if (cur_add.address_family() == net::sockets::address_family::inter_network_v6)
console::write_line("scope id: {}", cur_add.scope_id());
console::write_line("address: {}", cur_add);
console::write("address_bytes: ");
auto bytes = cur_add.get_address_bytes();
for (size_t i = 0; i < bytes.size(); i++)
console::write(bytes[i]);
console::write_line("\r\n");
}
} catch (const system_exception& e) {
console::write_line("[do_resolve] exception: {}", e);
}
}
static void ip_address_additional_info() {
try {
console::write_line("\r\nos_supports_ip_v4: {}", net::sockets::socket::os_supports_ip_v4());
console::write_line("os_supports_ip_v6: {}", net::sockets::socket::os_supports_ip_v6());
if (net::sockets::socket::os_supports_ip_v6()) {
console::write_line("\r\nip_v6_any: {}", net::ip_address::ip_v6_any);
console::write_line("ip_v6_loopback: {}", net::ip_address::ip_v6_loopback);
console::write_line("ip_v6_none: {}", net::ip_address::ip_v6_none);
console::write_line("is_loopback(ip_v6_loopback): {}", net::ip_address::is_loopback(net::ip_address::ip_v6_loopback));
}
console::write_line("is_loopback(loopback):{}", net::ip_address::is_loopback(net::ip_address::loopback));
} catch (const system_exception& e) {
console::write_line("[ip_addresses] exception: {}", e);
}
}
};
#define startup_(main_method)
Defines the entry point to be called when the application loads. Generally this is set either to the ...
Definition startup.hpp:168