繁体   English   中英

如何找到计算机的IP地址?

[英]How do I find a computer's IP address?

我正在用C ++编写一个使用网络套接字的程序。 我需要找出计算机的IP地址,以便将其显示给用户。 该程序必须在Windows和Linux上运行。

我听说某处计算机可以有多个IP地址。 我希望其他计算机上的其他程序可以使用该程序来连接到计算机。

这是我已经拥有的相关代码(变量在其他地方声明):

master = new fd_set;
FD_ZERO(master);
struct sockaddr_in my_addr;

listener = socket(PF_INET, SOCK_STREAM, 0);

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = INADDR_ANY;
memset(my_addr.sin_zero, '\0', sizeof my_addr.sin_zero);

bind(listener, (struct sockaddr *)&my_addr, sizeof my_addr);

listen(listener, 10);

FD_SET(listener, master);

fdmax = listener;

我听说某处计算机可以有多个IP地址。 我希望其他计算机上的其他程序可以使用该程序来连接到计算机。

好吧...可能是其中任何一个。 如果计算机具有多个IP地址,则可以在其中任何一个上访问它。 当然,其中之一可能受制于不同的防火墙规则,或者它们可能位于两个完全不同的网段,但是无法检测到所有这些情况。

我发布了一个类似的问题,但是最近在OS X上发布了。 我收到的答案是使用0.0.0.0或INADDR_ANY。 这将使您的套接字监听所有可用的地址,因此您无需弄清楚哪个是“正确的”地址。

在Windows上,您要使用GetAdaptersAddresses-这列出了计算机中的所有适配器以及绑定到它们的IP地址。 它也支持IPv6地址。 您还可以使用gethostbyname ,但这不支持IPv6。

在Linux上,我们读取/proc/net/dev/proc/net/if_inet6并解析其结果。

我相信您可以将getaddrinfo()与侦听器套接字一起使用,以获取绑定到的套接字的IP地址。

这取决于您是要获取LAN IP地址(即计算机集中的计算机地址)还是服务提供商每次连接到Internet时提供给您的IP地址。 后者可以通过查询来识别某些IP检测Web服务(我想您会发现一个用很少的Googling就能做到的正确C ++库)。

如果您想要一个快速而肮脏的解决方案,则可以尝试获取http://www.whatismyip.org并读回其中的内容。

您可以在C ++项目中使用轻量级的客户机/服务器套接字类作为参考。

暂无
暂无

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

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