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(&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=&((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=&((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; }
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!