Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Alamat IP Pelayan Linux secara Pengaturcaraan dalam C?

Bagaimanakah Saya Boleh Menentukan Alamat IP Pelayan Linux secara Pengaturcaraan dalam C?

Barbara Streisand
Barbara Streisandasal
2024-12-10 20:43:11394semak imbas

How Can I Programmatically Determine a Linux Server's IP Addresses in C  ?

Menentukan Alamat IP Pelayan Linux secara Berprogram dalam C

Pengenalan

Mengenal pasti alamat IP pelayan Linux adalah penting untuk komunikasi rangkaian dan penggunaan aplikasi. Artikel ini membentangkan penyelesaian terprogram dalam C untuk mendapatkan semula alamat IP mesin Linux dengan berkesan.

Pernyataan Masalah

Objektifnya adalah untuk mendapatkan alamat IP pelayan Linux secara pemrograman dalam aplikasi C . Pelayan mungkin mempunyai berbilang alamat IP, termasuk alamat localhost, alamat dalaman (pengurusan) dan alamat luaran (awam). Matlamatnya ialah untuk mendapatkan semula alamat IP luaran untuk pengikatan aplikasi.

Lösung

Pustaka C standard menyediakan fungsi getifaddrs() untuk mendapatkan maklumat tentang antara muka rangkaian dan alamat IP sistem. Berikut ialah contoh yang menggunakan getifaddrs() untuk mencetak semua alamat IPv4 dan IPv6 mesin tempatan:

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

int main() {
    struct ifaddrs *ifAddrStruct = NULL;
    struct ifaddrs *ifa = NULL;
    void *tmpAddrPtr = NULL;

    getifaddrs(&ifAddrStruct);

    for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
        if (!ifa->ifa_addr) {
            continue;
        }
        if (ifa->ifa_addr->sa_family == AF_INET) { // IPv4 address
            tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
            char addressBuffer[INET_ADDRSTRLEN];
            inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
            printf("IPv4 Address %s\n", addressBuffer);
        } else if (ifa->ifa_addr->sa_family == AF_INET6) { // IPv6 address
            tmpAddrPtr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
            char addressBuffer[INET6_ADDRSTRLEN];
            inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
            printf("IPv6 Address %s\n", addressBuffer);
        }
    }

    if (ifAddrStruct != NULL) {
        freeifaddrs(ifAddrStruct);
    }

    return 0;
}

Untuk mendapatkan semula alamat IP luaran, anda boleh menggunakan pendekatan yang serupa tetapi secara khusus mencari antara muka yang menghubungkan kepada rangkaian luaran. Anda boleh menggunakan siocgifaddr dengan SIOCGIFADDR untuk mendapatkan semula alamat IP antara muka tertentu.

Fazit

Fungsi getifaddrs() dan siocgifaddr dengan SIOCGIFADDR menyediakan kaedah yang mantap untuk mendapatkan semula alamat IP mesin Linux dalam C . Pendekatan ini membolehkan aplikasi menyesuaikan diri secara dinamik kepada perubahan rangkaian dan mewujudkan sambungan rangkaian yang diperlukan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Alamat IP Pelayan Linux secara Pengaturcaraan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn