首页 > 后端开发 > C++ > 正文

如何用C语言获取本地计算机的IP地址和子网掩码?

Susan Sarandon
发布: 2024-11-10 03:34:02
原创
345 人浏览过

How to Get the Local Computer's IP Address and Subnet Mask in C  ?

用 C 语言确定本地计算机的 IP 地址和子网掩码

获取本地计算机的 IP 地址和子网掩码对于各种网络操作至关重要。在 C 中,可以通过利用特定于平台的系统调用来完成此过程。

1. Unix/MacOS

对于 Unix 和 macOS 系统, getifaddrs 函数允许检索网络接口地址的链接列表。迭代此列表可以访问每个接口的 IP 地址、子网掩码和其他相关信息:

#include <sys/types.h>
#include <ifaddrs.h>

struct ifaddrs *ifaddr;
int s;

if ((s = getifaddrs(&ifaddr)) == -1) {
    // Error handling
}

for (struct ifaddrs *ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
    if (ifa->ifa_addr->sa_family == AF_INET) {
        char addr[INET_ADDRSTRLEN];
        inet_ntop(AF_INET, &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr, addr, INET_ADDRSTRLEN);
        printf("IP Address: %s\n", addr);

        char netmask[INET_ADDRSTRLEN];
        inet_ntop(AF_INET, &((struct sockaddr_in *)ifa->ifa_netmask)->sin_addr, netmask, INET_ADDRSTRLEN);
        printf("Subnet Mask: %s\n", netmask);
    }
}
登录后复制

2. Windows

对于 Windows 系统,GetAdaptersAddresses 函数提供类似的功能。此函数用本地计算机上所有网络适配器的信息填充缓冲区:

#include <iphlpapi.h>

PIP_ADAPTER_ADDRESSES addresses;
ULONG outBufLen = 0;
DWORD res = GetAdaptersAddresses(AF_INET, 0, NULL, addresses, &outBufLen);

if (res != ERROR_SUCCESS) {
    // Error handling
}

for (PIP_ADAPTER_ADDRESSES adapter = addresses; adapter != NULL; adapter = adapter->Next) {
    char ip[MAX_PATH + 1];
    InetNtopA(AF_INET, &adapter->FirstUnicastAddress->Address.Ipv4.sin_addr, ip, MAX_PATH + 1);
    printf("IP Address: %s\n", ip);

    char netmask[MAX_PATH + 1];
    InetNtopA(AF_INET, &adapter->FirstUnicastAddress->NetMask.Ipv4.sin_addr, netmask, MAX_PATH + 1);
    printf("Subnet Mask: %s\n", netmask);
}
登录后复制

通过执行以下步骤,您可以在 C 中检索本地计算机的 IP 地址和子网掩码,从而允许您有效地建立网络连接并执行各种通信操作。

以上是如何用C语言获取本地计算机的IP地址和子网掩码?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板