Seite 1 von 1

Ping [Erledigt]

Verfasst: Di, 09. Jul 2019 7:23
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

Re: Ping

Verfasst: Di, 09. Jul 2019 8:00
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

Re: Ping

Verfasst: Di, 09. Jul 2019 8:31
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

Re: Ping

Verfasst: Di, 09. Jul 2019 9:14
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

Re: Ping

Verfasst: Di, 09. Jul 2019 9:44
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) 7624 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.

Re: Ping

Verfasst: Di, 09. Jul 2019 18:51
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) 206-mal heruntergeladen

Re: Ping

Verfasst: Di, 09. Jul 2019 20:29
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

Re: Ping

Verfasst: Di, 09. Jul 2019 21:56
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.

Re: Ping

Verfasst: Do, 11. Jul 2019 10:51
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

Re: Ping

Verfasst: Do, 11. Jul 2019 10:56
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

Re: Ping

Verfasst: Do, 11. Jul 2019 12:23
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

Re: Ping

Verfasst: Do, 11. Jul 2019 12:35
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

Re: Ping

Verfasst: Do, 11. Jul 2019 12:45
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

Re: Ping [Erledigt]

Verfasst: Do, 11. Jul 2019 20:04
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.

Re: Ping [Erledigt]

Verfasst: Do, 11. Jul 2019 20:23
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