Rumah > pembangunan bahagian belakang > C++ > Bagaimana Cara Mendapatkan Alamat IP Awam Mesin Linux secara Pemrograman dalam C?

Bagaimana Cara Mendapatkan Alamat IP Awam Mesin Linux secara Pemrograman dalam C?

Patricia Arquette
Lepaskan: 2024-12-10 09:18:14
asal
467 orang telah melayarinya

How to Programmatically Get a Linux Machine's Public IP Address in C  ?

Cara Mendapatkan Alamat IP Mesin Linux secara Pemrograman dalam C

Pengenalan:

Artikel ini menangani cabaran pengaturcaraan biasa: menentukan alamat IP mesin Linux yang menjalankan aplikasi yang ditulis dalam C . Tumpuan di sini adalah untuk mendapatkan alamat IP luaran atau awam pelayan.

Pernyataan Masalah:

Tugasnya adalah untuk membangunkan program C yang mendapatkan semula alamat IP mesin Linux, khususnya yang diberikan kepada rangkaian tertentu (IP awam). Ini memastikan aplikasi boleh mengikat dirinya pada alamat luaran yang dikehendaki untuk komunikasi rangkaian.

Penyelesaian:

Untuk menyelesaikan masalah ini, kami memanfaatkan panggilan fungsi getifaddrs(), yang merupakan sebahagian daripada standard POSIX dan dengan itu tersedia di Linux. Fungsi ini menyediakan cara yang mudah untuk beralih melalui semua antara muka rangkaian dan mendapatkan semula alamat IP mereka.

Pelaksanaan:

Kod C berikut menunjukkan cara menggunakan getifaddrs() fungsi:

#include <stdio.h>      
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h> 
#include <string.h> 
#include <arpa/inet.h>

int main (int argc, const char * argv[]) {
    struct ifaddrs * ifAddrStruct=NULL;
    struct ifaddrs * ifa=NULL;
    void * tmpAddrPtr=NULL;

    getifaddrs(&amp;ifAddrStruct);

    for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
        if (!ifa->ifa_addr) {
            continue;
        }
        if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4
            // is a valid IP4 Address
            tmpAddrPtr=&amp;((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
            char addressBuffer[INET_ADDRSTRLEN];
            inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
            printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); 
        } else if (ifa->ifa_addr->sa_family == AF_INET6) { // check it is IP6
            // is a valid IP6 Address
            tmpAddrPtr=&amp;((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
            char addressBuffer[INET6_ADDRSTRLEN];
            inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
            printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); 
        } 
    }
    if (ifAddrStruct!=NULL) freeifaddrs(ifAddrStruct);
    return 0;
}
Salin selepas log masuk

Penjelasan:

Kod ini berulang melalui semua antara muka rangkaian menggunakan gelung ifa dan menyemak keluarga alamat setiap antara muka. Jika IPv4 atau IPv6, ia menukar alamat kepada rentetan dan mencetaknya bersama-sama dengan nama antara muka.

Pendekatan ini membolehkan anda mengesan semua alamat IP yang diberikan kepada mesin Linux dan mengenal pasti IP awam yang dikehendaki untuk mengikat tujuan.

Atas ialah kandungan terperinci Bagaimana Cara Mendapatkan Alamat IP Awam Mesin Linux secara Pemrograman dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan