代码之家  ›  专栏  ›  技术社区  ›  Nate879

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

  •  1
  • Nate879  · 技术社区  · 16 年前

    我正在编写一个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;
    
    6 回复  |  直到 14 年前
        1
  •  5
  •   Spencer Ruport    16 年前

    我在某个地方听说一台电脑 可以有多个IP地址。我想要 其他节目的那个 不同的计算机可以用来连接 对着电脑。

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

        2
  •  5
  •   Community Neeleshkumar S    7 年前

    我也发布了一个类似的问题,但是最近在OSX上。这个 answer 我收到的是使用0.0.0.0或InDrDr.One。这将导致您的套接字监听所有可用的地址,所以您不需要找出哪个是“正确的”地址。

        3
  •  4
  •   Graeme Perrow    16 年前

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

    在Linux上,我们看到 /proc/net/dev /proc/net/if_inet6 分析结果。

        4
  •  2
  •   Alan    16 年前

    我相信你可以用你的侦听器套接字来使用GETAdDuffFor()来获取绑定到的套接字的IP地址。

        5
  •  0
  •   tunnuz    16 年前

    这取决于您是否正在尝试获取LAN IP地址(即计算机组内的计算机地址)或服务提供商每次连接到Internet时提供给您的IP地址。后者可以用一个查询来标识(我猜你会找到一个合适的C++库,它很少用Google做)到一些IP检测Web服务。

    如果你想 又快又脏 你可以尝试的解决方案 http://www.whatismyip.org 把内容读回来。

        6
  •  0
  •   Igor    16 年前

    你可以使用 light-weighted client/server socket class in C++ 项目供参考。