Überprüfen ob mit internet verbunden



  • Hi,

    Kann mir jemand ein codebeispiel geben, wie ich unter linux in c möglichst einfach überprüfen kann, ob ich mit dem inet verbunden bin?
    Da die Applikation nur auf einen server zugreifen soll, wäre es am einfachsten den anzupingen und so herauszufinden, ob man online ist...

    Hope for Help



  • an deiner Stelle würde ich einfach ping aufrufen (siehe man: execl(3)). Ansonsten kannst du dir natürlich auch ein eigenes Ping in deinem Programm implementieren. In
    Programmieren von UNIX-Netzwerken | ISBN: 3446213341
    wird erklärt wie es geht.



  • Das mit ping aufrufen hab ich gemacht... Aber -1 wird auch dann nicht returnt, wenn ping nicht erfolgreich war (keine host auflösung möglich...), d.h. ich habs nur hinbekommen zu prüfen ob ping gestartet wurde, aber nicht ob ping an sich erfolgreich war



  • och kinder, informiert euch doch mal ein bissel. execl liefert -1 wenn execl fehl schlägt und nicht den return-code des Programmes

    #include <unistd.h>
    #include <sys/wait.h>
    #include <stdio.h>
    
    int main() {
      switch(fork()) {
      case 0:
        close(STDIN_FILENO);
        close(STDOUT_FILENO);
        close(STDERR_FILENO);
        if(execlp("ping","ping","-c","1","www.w3.org",NULL)==-1) {
          perror("execlp");
          return 1;
        }
      case -1:
        perror("fork");
        return 1;
      default: {
        int status;
        wait(&status);
        if(WEXITSTATUS(status))
          printf("host unreachable\n");
        else
          printf("host reachable\n");
      }  
      }
      return 0;
    }
    

    HTH



  • Dass ping fehlschlägt ist doch allenfalls ein Indiz dafür, dass der eigene Rechner möglicherweise nicht online ist, aber kein Beweis. Genausogut könnte ja der Zielrechner offline sein.

    Insofern ist warscheinlich die Frage einfach falsch formuliert. Korrekt müsste sie wohl eher so lauten: "Besteht eine Netzwerkverbindung zwischen meinem und einem bestimmten Zielrechner?"



  • Man kann ja alle IP Addrs durchprobieren 🙂



  • Na klar. Dank IPv4 sind das ja noch nicht sooo viele. 😉



  • Jansen schrieb:

    Na klar. Dank IPv4 sind das ja noch nicht sooo viele. 😉

    Ansonsten könntest Du ja auch aus der /etc/resolv.conf die IP eines der Nameserver rausfiltern und anpingen. Da die normalerweise bei der EInwahl neu gesetzt werden, hast Du da ne verlässlichere Aussage als bei irgend einer IP bei einem anderen Provider.

    Frank



  • Nicht ohne Grund werden üblicherweise drei oder mehr DNS-Server eingetragen, denn auch der Provider/DHCP-Server kann nicht garantieren, dass die Server tatsächlich erreichbar sind.



  • wenn man alle DNS Server aus /etc/resolv.conf anpingt und keiner erreichbar ist, dann sollte das ausreichen um zu sagen, dass der Server nicht verbunden ist 🙄


Anmelden zum Antworten