(Linux/Unix) IP des lokalen Rechners?



  • Heho,

    ich habe mal wieder ein Problem.

    local.sin_addr.s_addr=inet_addr ("192.168.0.1");
    local.sin_port=htons(2222);
    local.sin_family=AF_INET;

    oder
    ip->saddr=inet_addr("192.168.0.1");

    Wie kann ich dafür sorgen, das statt der IP 192.168.0.1 immer
    automatisch die IP des Rechners angegeben wird?
    Ich möchte das nicht immer per Konsole übergeben. Wenn ich es
    so mache wie oben ist es aber zu unflexibel und würde nur
    auf dem Rechner laufen der auch eine solche IP hat.

    thx!



  • ind der winapi FAQ ist ein bsp. wie man die IP rausbekommt.



  • Du willst die IP des lokalen Rechners?

    127.0.0.1 😉

    mfg grottenolm



  • Keine WinApi, programmiere unter Linux.

    Zum Localhost:
    Nein eben das geht mir Raw Sockets nicht.Dann wird wirklich die IP 127.0.0.1 eingesetzt... was nicht im Sinne des Erfinders ist...



  • Wieso nicht?

    127.0.0.1 ist IMMER der eigene Rechner, egal wo....



  • @hepi
    Ja, aber wenn er diese Adresse in den Header eines Packages schreibt(als SourceAddr) und dieses dann an ein anderes lokales Netzwerk Device schickt, wird niemals eine Antwort zurückkommen.

    @an0nym
    Hättest mal schreiben sollen, dass du was für Raw Sockets haben willst 😉
    Kenne aber leider keine Funktion, mit der du das hier Lösen könntest....

    mfg grottenolm



  • für ein spezielles lokales interface..

    #include <stdio.h>
    #include <sys/ioctl.h>
    #include <linux/sockios.h>
    #include <sys/socket.h>
    #include <net/if.h>
    #include <arpa/inet.h>
    
    #define IFACE "eth0"
    
    int main(void)
    {
      int s;
      struct ifreq ifr;
    
      s = socket(AF_INET,SOCK_DGRAM,0);
    
      memset(&ifr,0,sizeof(struct ifreq));
      strncpy(ifr.ifr_name,IFACE,IF_NAMESIZE);
    
      ioctl(s,SIOCGIFADDR,&ifr);
    
      printf("%s\n",inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
    
      return 0;
    }
    

Anmelden zum Antworten