Ping [Erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Ping [Erledigt]

Beitrag von Jan »

Moin,

im Netzwerk gibt es Switches, die ich gerne regelmäßig auf Anwesenheit kontrollieren möchte (Stromausfall, Weggehängt, ...). Per CMD kann ich das natürlich mit Ping machen. Ich würde das aber gerne in eine allgemeine und automatische Routine in einem Xbase++-Programm unterbringen. Wie kann ich sowas lösen?

Jan
Zuletzt geändert von Jan am Do, 11. Jul 2019 12:45, insgesamt 1-mal geändert.
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Ping

Beitrag von Martin Altmann »

Moin,
ich würde mich nicht mit einfachen Ping-requests begnügen - nutze dafür die SNMP-Schnittstellen der Geräte (https://www.thomas-krenn.com/de/wiki/SNMP_Grundlagen), da bekommst Du wesentlich sinnvollere Aussagen dazu.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Ping

Beitrag von Jan »

Martin,

interessanter Ansatz. Hilft hier aber anscheinend nicht weiter - ich kenne die OIDs des Switches nicht, und die Konfigurationsdaten geben die auch nicht her.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Ping

Beitrag von HaPe »

Hallo Jan !
Per CMD kann ich das natürlich mit Ping machen. Ich würde das aber gerne in eine allgemeine und automatische Routine in einem Xbase++-Programm unterbringen. Wie kann ich sowas lösen?
Ich kann dir dazu FoxPro-Code anbieten:

Code: Alles auswählen

PROCEDURE SendPing
******************

LPARAMETERS tcIPAdress AS STRING

LOCAL lnDestination AS INTEGER, lnHopCount AS INTEGER, lnRoundTripTime AS INTEGER
LOCAL llReturn AS BOOLEAN

*-- API-Funktionen deklarieren
DECLARE INTEGER inet_addr IN WS2_32.DLL STRING cp
DECLARE INTEGER GetRTTAndHopCount IN Iphlpapi INTEGER DestIpAddress, LONG @HopCount, INTEGER MaxHops, LONG @RTT

*-- Parameter setzen
lnHopCount = 0
lnRoundTripTime = 0

*-- IP-Adresse als Zeichenkette in Integer umwandeln
lnDestination = inet_addr( tcIPAdress )

*-- Wenn die gewünschte IP-Adresse erreichbar war
IF GetRTTAndHopCount( lnDestination, @lnHopCount, 50, @lnRoundTripTime) <> 0

	*-- Erfolgs-Meldung ausgeben
	WAIT WINDOW ( 'Ping-Info', 'Die IP-Adresse ' + tcIPAdress + ' ist mit ' + STR( lnHopCount ) + ;
		' Hops innerhalb ' + STR( lnRoundTripTime ) + ' Millisekunden erreichbar!' )
	llReturn = .T.
ELSE

	*-- Fehler-Meldung ausgeben
	WAIT WINDOW( 'Fehler bei IP-Adresse', 'IP-Adresse ' + tcIPAdress + ' nicht erreichbar!' )
	llReturn = .T.
ENDIF

RETURN( llReturn )

ENDPROC
--
Hans-Peter
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Ping

Beitrag von ramses »

Hallo Jan

Wenn du mit SNMP arbeiten willst für die Abfrage von SNMP gibts einge gute Command-Line Tools. z.B.
snmp.jpg
snmp.jpg (39.17 KiB) 7575 mal betrachtet
Die sind Open-Source (net-snmp.org) mit denen kannst du ohne grosse Kentnisse SNMP Abfragen und das Resultat entsprechend deinen Wünsch parsen.

Ich verwende die für viele Geräte seit langem ohne Probleme. Weitere Infos dazu findest du auf der Seite die Martin erwähnt hat.
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Ping

Beitrag von AUGE_OHR »

von Pablo gäbe es die CLASS TPing ... aber die erfordert ot4xb welche einige Entwickler nicht verwenden wollen.
TestPing.zip
need ot4xb
(1.74 KiB) 205-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Ping

Beitrag von Jan »

AUGE_OHR hat geschrieben: Di, 09. Jul 2019 18:51aber die erfordert ot4xb welche einige Entwickler nicht verwenden wollen.
So ist es.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Ping

Beitrag von AUGE_OHR »

Jan hat geschrieben: Di, 09. Jul 2019 20:29
AUGE_OHR hat geschrieben: Di, 09. Jul 2019 18:51aber die erfordert ot4xb welche einige Entwickler nicht verwenden wollen.
So ist es.
jeder wie er will aber damit entgehen dir etliche Lösungen die Pablo anbietet.
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Ping

Beitrag von Jan »

Jimmy,

ich hab mal spaßeshalber Pablos Ping eingebaut. Klappt nicht. Der gibt mir nahezu immer ein .T. zurück. Selbst dann, wenn das cmd-Ping mir sagt, die IP existieren nicht. Was auch korrekt ist, die getestete IP gibt es defintiiv nicht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Ping

Beitrag von Jan »

Das Sample von Carlo viewtopic.php?f=32&t=6300&p=73154&hilit ... ess#p73154 funktioniert leider auch nicht. Der gibt mir nahezu immer ein Nicht Erreichbar zurück. Da muß ich noch weiter testen. Es KÖNNTE daran liegen, das es im Netz unterschiedliche IP-Bereiche gibt (192.168.2...., 192.168.3...), die als Extern erkannt werden.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Ping

Beitrag von Jan »

... wenn wir die Foxproler nicht hätten ...

Ich hab da ein uraltes Posting in einen Foxpro-Wiki gefunden, und auf Xbase++ umgeschrieben. Das scheint in der Tat sauber zu funktionieren. Ich muß das aber noch mal mit dem Admin gegenchecken, ob das mit den getesteten IP wirklich so korrekt ist. Sieht aber erstmal gut aus.

Ein späterer Kommentar in dem Posting sagt, daß das nur mit IP-Adressen funktioniert. Nicht mit URL. Was mich aber nicht sonderlich stört, da ich ja ohnehin nur auf (interne) IPs gehen will.

Code: Alles auswählen

DLLFUNCTION inet_addr(cIP) USING STDCALL FROM wsock32.DLL
DLLFunction GetRTTAndHopCount(DestIpAddress, @HopCount, MaxHops, @RTT) USING STDCALL FROM IPHLPAPI.DLL

FUNCTION myPing(cHost)

LOCAL nDst := 0
LOCAL nHop := 0
LOCAL nRTT := 0
LOCAL nReturn := 0

nDst     := inet_addr(cHost)
nReturn := GetRTTAndHopCount(nDst, @nHop, 50, @nRTT)
IF nReturn <> 0
     RETURN .T.

 ELSE
     RETURN .F.
ENDIF

RETURN .F.
Damit könnte man per nHop und nRTT sogar die Hops und Antwortzeiten auslesen. Was ich hier aber nicht benötige.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Ping

Beitrag von HaPe »

Hallo Jan !
... wenn wir die Foxproler nicht hätten ...
Ich hab da ein uraltes Posting in einen Foxpro-Wiki gefunden, und auf Xbase++ umgeschrieben.
Brille, Fielmann :roll:

Das ist doch genau der VFP-Code den ich im vierten Beitrag gepostet habe #-o
--
Hans-Peter
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Ping

Beitrag von Jan »

Hallo Hans-Peter,

oops! Sorry. Aber um ehrlich zu sein: Foxpro ist ansich so gar nicht meine Welt, und den Code hatte ich nicht wirklich durchschaut. Und daher zwar überflogen, dann aber wegen Nichtverstehens beiseite gelegt. Nachdem ich mich jetzt aber durchs Netz gekämpft hatte mit verschiedenen MS-Dokus und passenden Samples in diversen Programmiersprachen (meistens ellenlang und komplett unverständlich für mich), war ich dann irgendwann darauf gestoßen. Wobei der gefundene Code wesentlich mehr nach Clipper/Xbase++ aussah als das, was Du gepostet hast - von daher war der wohl wesentlich verständlicher für mich als Dein Beispiel. Auch der eine DLL-Aufruf auf inet_addr sah anders aus, den hatte ich aber passend umgeschrieben.

Jetzt wo Du es sagst seh ich natürlich die Ähnlichkeit. Dumm gelaufen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Ping [Erledigt]

Beitrag von ramses »

Hallo Jan

im Gerät muss SNMP aktiviert sein! Sonst geht gar nichts. (Ist als Standard oft deaktiviert, oder wird vom Admin deaktiviert. Was ich z.B. bei allen Geräten die SNMP nicht benötigen immer mache)
Und du musst den gesetzen SNMP Namen kennen.
In meinem Beispiel ist der public
Wenn User/Passwort gesetzt sind brauchst du diese auch.
Auf ein Ping antwortet ein Gerät auch nur wenn dies freigegeben ist.
Du hast nie geschrieben dass ein Ping auf CMD Ebene funktioniert. Ggf. könntest du die Ping Abfrage über ein unsichtbaren RunShell Aufruf mit Ausgabe in Textdatei ausführen und dann die Textdatei auf Antwort parsen.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Ping [Erledigt]

Beitrag von Jan »

Carlo,

klar wäre SNMP nett - weil ich da dann auch andere Infos bekommen könnte wie Tonerstände bei Druckern. Aber das ist hier nicht der Sinn der Sache. Hier geht es darum, ob ein Gerät überhaupt läuft. Gerade das Gerät, das diese Anfrage oben ausgelöst hatte, hängt sich alle paar Monate mal weg. Wenn ich das zeitnah bemerke und mir dann automatisch eine Warnmail schicken kann, ist das schon sehr gut.

Und ich hatte ja geschrieben, das ich das per Ping abfragen kann. So mache ich das im Moment - wenn von Mitarbeitern die Meldung kommt, das da was nicht zu funktionieren scheint, ping ich das Teil kurz an und weiß dann, ob ich das rebooten muß, oder was anderes los ist. Meist ist nichts los, pure Fehlbedienung.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten