首頁 > 後端開發 > C++ > 主體

如何用C語言取得本機的IP位址與子網路遮罩?

Susan Sarandon
發布: 2024-11-10 03:34:02
原創
338 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板