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

时间:2009-03-10 13:28:05

标签: c++ windows linux sockets cross-platform

我正在编写需要在Windows和Linux上运行的c ++代码,我正在寻找一个函数调用,它将返回应用程序运行的框的ip地址。有没有这样的?

5 个答案:

答案 0 :(得分:1)

如果您可以使用提升,请查看
How to get IP addresss of boost::asio::ip::tcp::socket?

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

ioctl SIOCGIFCONF如“man netdevice”中所述解释了这一点。

这个坏主意的原因是你可能无法得到你想要的东西。

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

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

答案 3 :(得分:0)

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

可能的例外以及它们无关紧要的原因:

  • 你得到一个NAT设备的地址 - 好吧,在这种情况下你的电脑没有互联网地址,你打算用你可能有的10.x.y.z地址做什么?
  • 您根本没有地址,因为您没有连接到互联网 - 如果您无法连接,则其他计算机不太可能对您的IP地址有任何用处。
  • 你确实得到了一个IP,但没有人可以连接到它 - 你可能会在过滤防火墙后面拒绝任何传入的连接。防火墙不太可能接受连接到同一台计算机的另一个IP地址上的流量。即使是这种情况,也可能无法发现。这对FTP来说太棒了。

答案 4 :(得分:0)

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