Ping Implementierung Linux



  • Hallo,

    ich bin gerade auf der suche nach einer c++ Implementierung des Ping Commands.

    Allerdings habe ich bisher nur Code gefunden welche die Raw Sockets verwenden. Da hierfür zwingend Root Rechte für die Ausführung benötigt werden, kann ich diesen code nicht verwenden.

    Gibt es noch andere Implementierungen ohne Raw Sockets oder ist das nicht möglich?
    Wie könnte ich sonst noch per Code prüfen ob eine bestimmte IP im Netzwerk verfügbar ist?

    Gruß mazeli



  • Ping basiert auf ICMP ( http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol ), normale Sockets auf TCP. D.h. du wirst um Raw-Sockets nicht herum kommen, weil normale Sockets immer TCP-Packete verschicken.

    EDIT: vllt. kannst du ein UDP-Packet so bauen, dass statt den normalen UDP-Header ein ICMP-Header wird. Auf Wikipedia siehst du, wie die Header ausschauen. Versuch waer's wert. Koennt mir aber vorstellen dass gaengige UDP-Libraries die Sinnhaftigkeit ihrer Header ueberpruefen und dann gar nix rausschicken. Ausserdem wuerde die Antwort wohl womoeglich auf dem falschen Port ankommen. Wobei, das koenntest du womoeglich noch umgehen (wenn das OS dich laesst).



  • Das ping-Utility kommt ganz prima ohne Root-Rechte aus, also wirfst du am besten einen Blick in den Quellcode.



  • Athar schrieb:

    Das ping-Utility kommt ganz prima ohne Root-Rechte aus, also wirfst du am besten einen Blick in den Quellcode.

    Danke, aber der code nutzt genauso den Raw Socket. Allerdings funktioniert es dank s-bit in einem linux "ohne" root rechte.


Anmelden zum Antworten