*geschmeicheltfühl*
Mal guggen, ob's gerechtfertigt war:
Es gibt da ein paar Varianten, nicht alle klappen immer, und manchmal geht es auch gar nicht:
Variante A:
Über die beiden Socket-Funktionen:
gethostname holt den eigenen Servernamen, und gethostbyname holt die IP-Adresse. Das Problem ist, gethostbyname fragt deinen DNS-Server, welche IP du hast. Das klappt bei statischen IPs, aber nicht aber bei dynamisch zugewiesenen.
Variante B:
Tatsächlich eine Verbindung aufbauen und dann die eigene IP abfragen. Problem, es wird eine Verbindung irgendwohin aufgebaut.
connect(sock, &addr, sizeof addr);
adlen = sizeof addr;
getsockname(sock, &addr, &adlen);
printf("My address: %s\n", inet_ntoa(addr.sin_addr));
Variante C:
Du bist hinter einem Router, und alle Rechner im lokalen Netz haben nach außenhin dieselbe IP. Geht nicht. Dein Rechner hat keine "richtige" IP, nur eine lokal zugewiesene. Dein Rechner ist von aussen her nicht eindeutig identifizierbar.
Es gibt vermutlich noch ein paar Varianten, aber das sind die mir bekannten (bzw. grade gegoogelten).
Sämtliche Code-Schnipsel sind eben das, Schnipsel. Kann man nicht direkt kompilieren, muss man evtl. anpassen. Sollte aber kein Problem sein.