【问题标题】:Find public IP with POCO使用 POCO 查找公共 IP
【发布时间】:2017-01-22 12:52:30
【问题描述】:

如何使用 POCO 找到我的公共 IP?

受到their Network presentation第6页的启发,我尝试了以下方法:

#include "Poco/Net/DNS.h"
#include <iostream>
using Poco::Net::DNS;
using Poco::Net::HostEntry;
int main(int argc, char** argv)
{
    const HostEntry& entry = DNS::thisHost();
    std::cout << "Canonical Name: " << entry.name() << std::endl;

    const HostEntry::AliasList& aliases = entry.aliases();
    HostEntry::AliasList::const_iterator alias_it = aliases.begin();
    for (; alias_it != aliases.end(); ++alias_it)
        std::cout << "Alias: " << *alias_it << std::endl;

    const HostEntry::AddressList& addrs = entry.addresses();
    HostEntry::AddressList::const_iterator addr_it = addrs.begin();
    for (; addr_it != addrs.end(); ++addr_it)
        std::cout << "Address: " << addr_it->toString() << std::endl;

    return 0;
}

然而,这返回了两个地址:一个 IPv6 本地链路 (fe80:...) 和一个私有 LAN IPv4 (10.0...)。它没有返回我的公共 IP。

这个可以吗?

【问题讨论】:

    标签: c++ network-programming ip-address poco-libraries


    【解决方案1】:

    当使用 POCO 运行软件的主机位于使用 NAT 的本地网络中时,无法直接获取路由器的 WAN 地址(我猜你在使用术语“我的公共 IP”时是这个意思)。

    相反,您必须使用公共服务器的 API 返回您的 IP 地址,例如:https://www.ipify.org/

    【讨论】:

      猜你喜欢
      • 2014-05-20
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 2019-04-19
      • 2014-07-28
      • 2012-09-15
      相关资源
      最近更新 更多