SORU
17 EKİM 2008, Cuma


Makinenin IP adresini almak

Bu Soru daha önce Get the IP Address of local computer-Soru sorulan hemen hemen aynıdır. Ancak IP adres(ler) bulmam gerekiyorLinux Makine.

Yani: Nasıl yapmak I - programlıC- linux sunucu IP adreslerini tespit benim uygulama üzerinde çalıştığı. Sunucular en az iki IP adresine sahip olacak ve belirli bir (belirli bir ağ (halk)) ihtiyacım var.

Ama nerede? bunu yapmak için basit bir işlevi vardır eminim


İşleri biraz daha net yapmak için:

  • Sunucu belli olacak "": 127.0.0.1 . localhost
  • Sunucu (Yönetim) iç IP adresi: 172.16.x.x
  • Sunucu (kamu) harici IP adresi: 80.190.x.x

Bunun için başvurumu bağlamak için harici IP adresini bulmam lazım. Belli ki aynı zamanda INADDR_ANY (ve aslında şu anda yaptığım şey bu. ben. Halka açık adresi tespit olsa da tercih ederim.

CEVAP
5 Kasım 2008, ÇARŞAMBA


Blok aygıt çözüm sorunlu os x linux için benzer olmalıdır yani POSIX uyumlu olan) buldum. Ancak() getifaddress sana aynı şeyi kolayca yapalım, benim için iyi os x 10.5 üzerinde çalışan ve aynı altında olmalıdır.

Makine tüm yazdırma IPv4 adresi olan, (ayrıca getifaddrs 0 başarılı ıe döndürür olduğunu kontrol etmelisiniz) aşağıda bir örnek yaptım.

IPv6 adreslerini de göstermek güncelledik.

#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;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • glowpinkstah

    glowpinkstah

    16 Mayıs 2006
  • Official Clouds

    Official Clo

    1 HAZİRAN 2011
  • Trulia

    Trulia

    29 Kasım 2006