Aktuelle Zeit: 13.11.2019 11:03

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: PB.Ex ICMP (Windows)
BeitragVerfasst: 11.05.2019 12:15 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Deutschland::Berlin()
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:
      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:
      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:
      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:
      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:
      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:
      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:
Zitat:
Copyright © 2019 RSBasic.de


Download: http://www.rsbasic.de/downloads/downloa ... 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 :)

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB.Ex ICMP (Windows)
BeitragVerfasst: 11.05.2019 21:07 
Offline
Benutzeravatar

Registriert: 10.10.2014 13:14
Wohnort: Wolfenbüttel
: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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB.Ex ICMP (Windows)
BeitragVerfasst: 11.05.2019 23:17 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
RSBasic hat geschrieben:
Rückgabewert:

1: Der Vorgang war erfolgreich.
Und im Fehlerfall ungleich eins oder null?
Das ist entscheidend, ob man
Code:
If Result
Code:
If Not Result
schreiben kann oder zwingend
Code:
If Result = 1
Code:
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.

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download -- Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Zuletzt geändert von Sicro am 12.05.2019 11:00, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB.Ex ICMP (Windows)
BeitragVerfasst: 12.05.2019 07:58 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Deutschland::Berlin()
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. :)

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye