繁体   English   中英

如何从远程机器获取 ip 地址?

[英]How do you get the ip address from a remote machine?

I'm writing c++ code that I need to run on both windows and linux and I'm looking for a function call that will return the ip address of the box the app is running on. 有这样的吗?

如果您可以使用boost,请查看
如何获取 boost::asio::ip::tcp::socket 的 IP 地址?

调用socket(),然后调用getsockname()。

你可以这样做,但这通常是一个坏主意。

“man netdevice”中描述的 ioctl SIOCGIFCONF 解释了这一点。

这是一个坏主意的原因是你可能不会得到你想要的东西。

该机器可能有多个或多个 IP 地址,您不会知道哪些是公开的。 它可能位于 NAT 网关(或多个)后面,在这种情况下,它们都可能不是公共的。

您只是不能特别有用地使用该信息。 无论您想要什么,都可能不是一个好主意。

最好的主意是使用网络服务。 连接到已知服务器,让它发回您用来联系它的 IP。 这将告诉您 PC 在与外界通信时使用IP 地址(好的,IP 地址)。

可能的例外情况及其无关紧要的原因:

  • 您获得了 NAT 设备的地址 - 好吧,在这种情况下,您的 PC 没有 Internet 地址,您打算如何处理您可能拥有的 10.xyz 地址?
  • 您根本没有地址,因为您没有连接到互联网 - 如果您无法连接,另一台计算机不太可能对您的 IP 地址做任何有用的事情。
  • 您确实得到了 IP,但没有人可以连接到它 - 您可能位于拒绝任何传入连接的过滤防火墙后面。 防火墙不太可能接受连接到同一台计算机的另一个 IP 地址上的流量。 即使是这样,也可能无法发现。 FTP 将是地狱。

如果您知道您的应用程序运行的机器的名称,只需使用 gethostbyname()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM