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


  • Direkt vom Interface... gibts noch andere Lösungen?

    Für was steht eigentlich INADDR_ANY? Was wird dann eingetragen.

    [ Dieser Beitrag wurde am 17.06.2003 um 21:58 Uhr von an0nym editiert. ]



  • zu INADDR_ANY..

    wie der ausdruck schon vermuten läßt...
    kann dein programm damit verbindungen auf allen verfügbaren interfaces annehmen..
    also ists egal ob der client deinen server über zB über eth0 oder ppp0 erreicht

    [ Dieser Beitrag wurde am 17.06.2003 um 23:16 Uhr von stahl editiert. ]



  • Ich frage weil mir aufgefallen ist, das sobald ich INADDR_ANY verwende, meine UDP checksummen nicht mehr stimmen.



  • Ich möchte nicht extra einen neuen Thread aufmachen.
    Es verbleiben bei mir noch eine Frage:

    Ich versende ein Packet mit sendto() und empfange bei Erfolg mit recvfrom() ein Packet. Nun kommt es aber zu einem eigenartigen Verhalten:

    Wenn das Packet als Zieladdresse eine Broadcastaddresse besitzt (z.B. 192.168.0.255), dann empfange ich das Packet und kann den Inhalt auswerten. Wird es aber direkt an meine IP geschickt (z.B. 192.168.0.1), so scheine ich es nicht zu empfangen. Woran liegt das? Wie kann ich auch die Packete auswerten die direkt für meine IP bestimmt sind und keine Broadcasts sind?

    Danke für eure Hilfe! (Wo wäre ich nur ohne diese Forum...)


Anmelden zum Antworten