Kuinka selvittää C/C++:lla oman koneen IP. Käyttöjärjestelmänä OpenBSD 3.5 ja kääntäjänä gcc 2.95.3.
Ainakin Linuxissa on /sbin/ifconfig, joka tulostelee ip:n ja muuta...
Sama löytyy kyllä OpenBSD:stä. Mutta ajattelin löytyisikö esim. jotain funktiota joka palauttaisi IP:n. Säästyisi tuo parseroinnin vaiva... laiska kun olen :)
#include <arpa/inet.h> #include <netdb.h> #include <errno.h> #include <unistd.h> int main (void) { char hostname[256]; struct hostent *hostent; if (-1 == gethostname(hostname, 256)) { perror("gethostname"); return 1; } hostent = gethostbyname(hostname); if (NULL == hostent) { herror("gethostbyname"); return 1; } printf( "Hostname: %s\n", hostname ); printf( "IP: %s\n", inet_ntoa( *((struct in_addr *) hostent->h_addr_list[0])) ); return 0; }
Yllä olevaa voi kokeilla, näyttäisi toimivan ainakin NetBSD:llä. Tuo perustuu koneen hostnameen, joten se ei välttämättä toimi aina täydellisesti.
Jep, toi koodi tulostaa 127.0.0.1 ja localhost.
Voisit tietys yrittää avata yhteyden johonkin ja katsoa socketin IP:n. Ei kovin kätevää ja toimivaa tosin.
Tai vois katsoa vaikka ifconfigin koodista mallia.
renni kirjoitti:
Tai vois katsoa vaikka ifconfigin koodista mallia.
Epäilen tosin, että tämä ei välttämättä ole kovin porttaantuva ehdotus. Vaikka mistäpä sen tietää...
Voihan sen ifconfiging outputin tallentaa jonneki muuttujaan ja sieltä greppailla IP:n
Veikkaa että ifconfigin ratkaisu on melko porttautuva, toimii kaikissa *nixeissä ja winkussa, ehkä muuallakin?
Aihe on jo aika vanha, joten et voi enää vastata siihen.