PB.Ex ICMP (Windows)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

PB.Ex ICMP (Windows)

Beitrag von RSBasic »

Hallo,

mit dieser Bibliothek ist es möglich, eine beliebige Website bzw. einen Server anzupingen, um zu ermitteln, ob die Website erreichbar ist.

Funktionen:
  • SendICMPPing()
    • Syntax:

      Code: Alles auswählen

      Result = SendICMPPing(Address$, Timeout, TTL, DontFragment, @ErrorOutput$)
    • Beschreibung: Sendet an einen Server ein Ping-Paket (ICMP-Echo Message).
    • Parameter:
      1. Address$: Die Domain oder IP-Adresse des Servers.
      2. Timeout: Legt die Zeit in Millsekunden fest, wie lange maximal auf die Rückmeldung des Zielservers gewartet werden soll.
      3. TTL: Legt die Anzahl fest, wie oft das Paket an Routern und Gateways weitergeleitet werden darf, bis das Paket verworfen wird.
      4. DontFragment: Legt fest, ob das gesendete Paket fragmentiert werden kann.
      5. @ErrorOutput$: Falls ein Fehler auftrat, dann wird die Fehlermeldung in die Variable gespeichert. Diese Variable muss vor dem Übergeben mit 128 Zeichen reserviert werden. Maximale Länge der Rückgabe beträgt 128 Zeichen einschließlich des NULL-Zeichens. Wenn bei einem Fehler keine Fehlerbeschreibung zurückgegeben werden soll, dann kann stattdessen 0 übergeben werden.
    • Rückgabewert:
      • 1: Der Vorgang war erfolgreich.
    • Beispielcode:

      Code: Alles auswählen

      EnableExplicit
      
      Global PBEx_ICMP
      
      #PBEx_ICMP_Status_BadDestination = 11018
      #PBEx_ICMP_Status_BadHeader = 11042
      #PBEx_ICMP_Status_BadOption = 11007
      #PBEx_ICMP_Status_BadRoute = 11012
      #PBEx_ICMP_Status_DestinationHostUnreachable = 11003
      #PBEx_ICMP_Status_DestinationNetworkUnreachable = 11002
      #PBEx_ICMP_Status_DestinationPortUnreachable = 11005
      #PBEx_ICMP_Status_DestinationProhibited = 11004
      #PBEx_ICMP_Status_DestinationProtocolUnreachable = 11004
      #PBEx_ICMP_Status_DestinationScopeMismatch = 11045
      #PBEx_ICMP_Status_DestinationUnreachable = 11040
      #PBEx_ICMP_Status_HardwareError = 11008
      #PBEx_ICMP_Status_IcmpError = 11044
      #PBEx_ICMP_Status_NoResources = 11006
      #PBEx_ICMP_Status_PacketTooBig = 11009
      #PBEx_ICMP_Status_ParameterProblem = 11015
      #PBEx_ICMP_Status_SourceQuench = 11016
      #PBEx_ICMP_Status_Success = 0
      #PBEx_ICMP_Status_TimedOut = 11010
      #PBEx_ICMP_Status_TimeExceeded = 11041
      #PBEx_ICMP_Status_TtlExpired = 11013
      #PBEx_ICMP_Status_TtlReassemblyTimeExceeded = 11014
      #PBEx_ICMP_Status_Unknown = -1
      #PBEx_ICMP_Status_UnrecognizedNextHeader = 11043
      
      CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
        PBEx_ICMP = OpenLibrary(#PB_Any, "PB.Ex_ICMP_x86.dll")
      CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
        PBEx_ICMP = OpenLibrary(#PB_Any, "PB.Ex_ICMP_x64.dll")
      CompilerEndIf
      
      If PBEx_ICMP
        Prototype SendICMPPing(Address.p-Unicode, Timeout, TTL, DontFragment, ErrorOutput)
        Global SendICMPPing.SendICMPPing = GetFunction(PBEx_ICMP, "SendICMPPing")
        Prototype GetICMPStatus(ErrorOutput)
        Global GetICMPStatus.GetICMPStatus = GetFunction(PBEx_ICMP, "GetICMPStatus")
        Prototype GetICMPIPAddress(Output, ErrorOutput)
        Global GetICMPIPAddress.GetICMPIPAddress = GetFunction(PBEx_ICMP, "GetICMPIPAddress")
        Prototype GetICMPRoundTripTime(ErrorOutput)
        Global GetICMPRoundTripTime.GetICMPRoundTripTime = GetFunction(PBEx_ICMP, "GetICMPRoundTripTime")
        Prototype GetICMPTTL(ErrorOutput)
        Global GetICMPTTL.GetICMPTTL = GetFunction(PBEx_ICMP, "GetICMPTTL")
        
      EndIf
      
      Global Output$ = Space(1024)
      Global ErrorOutput$ = Space(128)
      
      Define ICMPStatus
      
      SendICMPPing("www.google.de", 1000, 128, 1, @ErrorOutput$)
      ICMPStatus = GetICMPStatus(@ErrorOutput$)
      If ICMPStatus = #PBEx_ICMP_Status_Success
        GetICMPIPAddress(@Output$, @ErrorOutput$)
        Debug "IP address: " + Output$
        Debug "Time needed: " + GetICMPRoundTripTime(@ErrorOutput$)
        Debug "TTL: " + GetICMPTTL(@ErrorOutput$)
      Else
        Debug "ICMP-Error: " + ICMPStatus
      EndIf
      
      CloseLibrary(PBEx_ICMP)
      
    GetICMPStatus()
    • Syntax:

      Code: Alles auswählen

      Result = GetICMPStatus(@ErrorOutput$)
    • Beschreibung: Ermittelt den Status. Diese Funktion ist nur nach dem Aufrufen der SendICMPPing()-Funktion gültig.
    • Parameter:
      1. @ErrorOutput$: Falls ein Fehler auftrat, dann wird die Fehlermeldung in die Variable gespeichert. Diese Variable muss vor dem Übergeben mit 128 Zeichen reserviert werden. Maximale Länge der Rückgabe beträgt 128 Zeichen einschließlich des NULL-Zeichens. Wenn bei einem Fehler keine Fehlerbeschreibung zurückgegeben werden soll, dann kann stattdessen 0 übergeben werden.
    • Rückgabewert: Mit Hilfe des Status-Wertes kann z.B. ermittelt werden, ob der Server erreichbar war oder ob ein Timeout auftrat. Folgende Konstanten können abgefragt werden:
      • #PBEx_ICMP_Status_BadDestination
      • #PBEx_ICMP_Status_BadHeader
      • #PBEx_ICMP_Status_BadOption
      • #PBEx_ICMP_Status_BadRoute
      • #PBEx_ICMP_Status_DestinationHostUnreachable
      • #PBEx_ICMP_Status_DestinationNetworkUnreachable
      • #PBEx_ICMP_Status_DestinationPortUnreachable
      • #PBEx_ICMP_Status_DestinationProhibited
      • #PBEx_ICMP_Status_DestinationProtocolUnreachable
      • #PBEx_ICMP_Status_DestinationScopeMismatch
      • #PBEx_ICMP_Status_DestinationUnreachable
      • #PBEx_ICMP_Status_HardwareError
      • #PBEx_ICMP_Status_IcmpError
      • #PBEx_ICMP_Status_NoResources
      • #PBEx_ICMP_Status_PacketTooBig
      • #PBEx_ICMP_Status_ParameterProblem
      • #PBEx_ICMP_Status_SourceQuench
      • #PBEx_ICMP_Status_Success
      • #PBEx_ICMP_Status_TimedOut
      • #PBEx_ICMP_Status_TimeExceeded
      • #PBEx_ICMP_Status_TtlExpired
      • #PBEx_ICMP_Status_TtlReassemblyTimeExceeded
      • #PBEx_ICMP_Status_Unknown
      • #PBEx_ICMP_Status_UnrecognizedNextHeader
      Weitere Informationen zu den einzelnen Status-Werten finden Sie hier: https://docs.microsoft.com/en-us/dotnet ... n.ipstatus
    GetICMPIPAddress()
    • Syntax:

      Code: Alles auswählen

      Result = GetICMPIPAddress(@Output$, @ErrorOutput$)
    • Beschreibung: Ermittelt die aufgelöste IP-Adresse des angepingten Servers. Diese Funktion ist nur nach dem Aufrufen der SendICMPPing()-Funktion gültig.
    • Parameter:
      1. @Output$: Die aufgelöste IP-Adresse wird in diese Variable gespeichert.
      2. @ErrorOutput$: Falls ein Fehler auftrat, dann wird die Fehlermeldung in die Variable gespeichert. Diese Variable muss vor dem Übergeben mit 128 Zeichen reserviert werden. Maximale Länge der Rückgabe beträgt 128 Zeichen einschließlich des NULL-Zeichens. Wenn bei einem Fehler keine Fehlerbeschreibung zurückgegeben werden soll, dann kann stattdessen 0 übergeben werden.
    • Rückgabewert:
      • 1: Der Vorgang war erfolgreich.
    GetICMPRoundTripTime()
    • Syntax:

      Code: Alles auswählen

      Result = GetICMPRoundTripTime(@ErrorOutput$)
    • Beschreibung: Ermittelt die benötigte Zeit in Millisekunden, wie lange es gedauert hat, das Ping-Paket zum Server zu senden und zurückzuschicken. Diese Funktion ist nur nach dem Aufrufen der SendICMPPing()-Funktion gültig.
    • Parameter:
      1. @ErrorOutput$: Falls ein Fehler auftrat, dann wird die Fehlermeldung in die Variable gespeichert. Diese Variable muss vor dem Übergeben mit 128 Zeichen reserviert werden. Maximale Länge der Rückgabe beträgt 128 Zeichen einschließlich des NULL-Zeichens. Wenn bei einem Fehler keine Fehlerbeschreibung zurückgegeben werden soll, dann kann stattdessen 0 übergeben werden.
    • Rückgabewert: Zeit in Millsekunden
    GetICMPTTL()
    • Syntax:

      Code: Alles auswählen

      Result = GetICMPTTL(@ErrorOutput$)
    • Beschreibung: Ermittelt den TTL-Wert (Time to Live), wie oft das Ping-Paket an Routern und Gateways weitergeleitet wurde, bis das Paket ankam. Diese Funktion ist nur nach dem Aufrufen der SendICMPPing()-Funktion gültig.
    • Parameter:
      1. @ErrorOutput$: Falls ein Fehler auftrat, dann wird die Fehlermeldung in die Variable gespeichert. Diese Variable muss vor dem Übergeben mit 128 Zeichen reserviert werden. Maximale Länge der Rückgabe beträgt 128 Zeichen einschließlich des NULL-Zeichens. Wenn bei einem Fehler keine Fehlerbeschreibung zurückgegeben werden soll, dann kann stattdessen 0 übergeben werden.
    • Rückgabewert: Anzahl der Weiterleitungen.
Systemvoraussetzungen:
  • Windows Vista oder höher
  • .NET Framework 4.5 oder höher
  • Unicode-Aktivierung (standardmäßig ab PB 5.50)
Lizenz: Diese DLL-Datei ist kostenlos und darf sowohl privat als auch kommerziell verwendet werden.
Folgende Copyright-Texte müssen mitgeliefert werden:
Copyright © 2019 RSBasic.de
Download: https://www.rsbasic.de/downloads/downlo ... x_ICMP.zip
Bild

Ich würde mich über Feedbacks, Verbesserungsvorschläge, Fehlermeldungen oder Wünsche sehr freuen. Wer mich unterstützen möchte, kann mir auch was kleines spenden. Danke :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: PB.Ex ICMP (Windows)

Beitrag von Imhotheb »

:praise: :praise: :praise: :praise: :praise:

Vielen Dank dafür ... endlich kann ich den Workaround mit RunProgram("ping") rausschmeißen.
weil einfach einfach einfach ist ... mach' ich es anders
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: PB.Ex ICMP (Windows)

Beitrag von Sicro »

RSBasic hat geschrieben:Rückgabewert:

1: Der Vorgang war erfolgreich.
Und im Fehlerfall ungleich eins oder null?
Das ist entscheidend, ob man

Code: Alles auswählen

If Result

Code: Alles auswählen

If Not Result
schreiben kann oder zwingend

Code: Alles auswählen

If Result = 1

Code: Alles auswählen

If Result <> 1
schreiben muss.

Schau dir mal .NET Core an oder behalte es im Auge. Vielleicht kannst du deine DLLs später mal plattformunabhängig anbieten.
Zuletzt geändert von Sicro am 12.05.2019 11:00, insgesamt 1-mal geändert.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PB.Ex ICMP (Windows)

Beitrag von RSBasic »

Guten Morgen

Im Fehlerfall bei einem Exception ist der Rückgabewert gleich 0.
Sicro hat geschrieben:Schau dir mal .NET Core an oder behalte es im Auge. Vielleicht kannst du deine DLLs später mal plattformunabhängig anbieten.
Danke für den Tipp. :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten