Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
428to432
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
428to432
428to432
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA-Ping zu Rechnernamen senden

VBA-Ping zu Rechnernamen senden
19.05.2004 22:44:27
Bernhard Ebermann
Hallo Leute,
ich möchte per VBA einen Ping innerhalb eines Netzwerkes zu einigen
Rechnern, von denen ich jedoch nur die Rechnernamen weis, senden.
Feststellen möchte ich hiermit, ob der jeweilige Rechner eingeschaltet
(am Netz)ist, oder nicht.
Wie wird soetwas angestellt?
Gruß
Bernhard

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nee, das wars nich
19.05.2004 23:27:59
Bernhard Ebermann
Hallo Sepp,
das hatte ich im Archiv auch schon gefunden, läuft aber nur sicher unter NT
und dann auch nicht mit Rechnernamen innerhalb des Netzwerkes.
Danke aber für die Reaktion.
Gruß
Bernhard
AW: Nee, das wars nich
20.05.2004 12:29:27
Ramses
Hallo
Was meinst du damit...
"...läuft aber nur sicher unter NT..."
Das hat mit NT aber auch gar nix zu tun.
"...dann auch nicht mit Rechnernamen innerhalb des Netzwerkes..."
Das hat auch nix mit NT zu tun, sondern mit der mangelhaften Konstruktîon eures Netzwerkes. Entweder ihr habt einen DNS Server, der die Namen in Adressen auflöst und umgekehrt, oder einen Rechner (Server) der als Netzwerk Masterbrowser dient, und diese Aufgabe temporär wahrnehmen kann.
Ansonsten geht das Makro unter jedem Netzwerk, sei es Novell, Linux, oder sonstwas. Weil PING auf dem Layer 1 des OSI Reference Objects und des TCP/IP Protokolls aufsetzt, das in JEDEM Netzwerk implementiert ist.
Einzige Voraussetzung:
Du brauchst eine Commandshell auf deinem Rechner der PING ausführen kann, und logischerweise EXCEL ;-))

Gruss Rainer
Anzeige
@ Rainer u. Andre
20.05.2004 15:59:15
Bernhard Ebermann
Hallo Rainer,
"...läuft aber nur sicher unter NT..."
Dieser Hinweis ist dierekt aus der von Josef vorgeschlagenen
Routine in "11ping.xls"zu entnehmen und wird auch über eine
MsgBox so kommuniziert.
"...sondern mit der mangelhaften Konstruktîon eures Netzwerkes"
Dieses Netzwerk arbeitet seit etwa 10 Jahren einwandfrei und
beinhaltet mehrere tausend Rechner, wird also so mangelhaft wohl nicht sein.
Hallo Andre,
habe mir den Link "https://www.herber.de/bbs/user/6554.xls" mal angesehen.
Die Routinen aus diesem Link lassen sich sicher kombinieren, indem man
"IP aus Adresse" und dann "Pingen aus IP" aneinander hängt.
Diese Vorgehensweise erscheint mit jedoch zu umständlich.
Um eine verkürzte Gesamtlösung hieraus zu basteln, reicht mein Wissen
jedoch nicht aus.
Wäre daher für eine entsprechende Lösung dankbar.
Gruß
Bernhard
Anzeige
AW: @ Rainer u. Andre
20.05.2004 18:34:17
Ramses
Hallo
Mein Komemntar bezog sich auf den Satz
"...dann auch nicht mit Rechnernamen innerhalb des Netzwerkes..."
Wenn euer Netzwerk funktioniert, dann funktioniert PING auch mit dem Rechnernamen.
Probier also den Code einfach mal aus, bevor wir hier zu basteln anfangen ;-))
Du musst nich alles glauben, was als Kommentar in einem Code steht.
Immer erst mal ausprobieren ;-))
Gruss Rainer
AW: @ Rainer u. Andre
20.05.2004 18:56:01
Bernhard Ebermann
Hallo Rainer,
das werde ich auch so probieren.
Meine Frage wäre noch wie ich die TimeOut-Zeit in dieem Code
auf 200 mS herabsetzen kann.
Fällt Dir hierzu etwas ein?
Gruß
Bernhard.
Anzeige
AW: @ Rainer u. Andre
20.05.2004 19:26:02
Ramses
Hallo
für was brauchst du eine TimeOut Zeit ???
Dies ist ein Auszug aus der Online-Hilfe ;-))
*---------------------
PingÜberprüft Konnektivität mit einem anderen TCP/IP-Computer auf IP-Ebene durch Senden von ICMP-Echoanforderungen (Internet Control Message Protocol, Internet Control Message-Protokoll). Der Empfang entsprechender Echoantworten wird zusammen mit Zeitangaben angezeigt. Ping ist der wichtigste TCP/IP-Befehl für das Durchführen von Problembehandlungen für Konnektivität, Erreichbarkeit und Namenauflösung. Wenn ping ohne Parameter verwendet wird, wird die Hilfe angezeigt.
Syntax
ping [-t] [-a] [-n Anzahl] [-l Länge] [-f] [-i TTL] [-v TOS] [-r Anzahl] [-s Anzahl] [{-j Hostliste | -k Hostliste}] [-w Zeitlimit] [Zielname]
Parameter
-t
Gibt an, dass ping fortfährt, bis zu einer Unterbrechung Echoanforderungen an das Ziel zu senden. Drücken Sie STRG-UNTBR, um zu unterbrechen und Statistiken anzuzeigen. Drücken Sie STRG-C, um zu unterbrechen und ping zu beenden.
-a
Gibt an, dass an der Ziel-IP-Adresse umgekehrte Namenauflösung durchgeführt wird. Wenn dieser Vorgang erfolgreich verläuft, zeigt ping den entsprechenden Hostnamen an.
-n Anzahl
Gibt an, wie viele Echoanforderungen gesendet werden sollen. Der Standardwert ist 4.
-l Länge
Gibt die Länge des Datenfeldes in den gesendeten Echoanforderungen in Bytes an. Der Standardwert ist 32. Die maximale Länge beträgt 65.527.
-f
Gibt an, dass Echoanforderungen mit auf 1 festgelegtem Flag Nicht fragmentieren im IP-Header gesendet werden. Die Echoanforderung kann auf dem Weg zum Ziel nicht von Routern fragmentiert werden. Dieser Parameter ist hilfreich beim Durchführen der Problembehandlung für PMTU-Probleme (Path Maximum Transmission Unit, maximale Übertragungseinheit für den Pfad).
-i TTL
Gibt den Wert des TTL-Feldes im IP-Header für gesendete Echoanforderungen an. Der Standardwert ist der Standard-TTL-Wert für den Host. Für Hosts unter Windows XP ist dies normalerweise 128. Der Höchstwert für TTL ist 255.
-v TOS
Gibt den Wert des TOS-Feldes (Type of Service) im IP-Header für gesendete Echoanforderungen an. Der Standardwert ist 0. TOS wird als Dezimalwert zwischen 0 und 255 angegeben.
-r Anzahl
Gibt an, dass die Recordrouteoption im IP-Header verwendet wird, um den von der Echoanforderung und der entsprechenden Echoantwort genommenen Pfad aufzuzeichnen. Jeder Hop im Pfad verwendet einen Eintrag in der Recordrouteoption. Geben Sie nach Möglichkeit eine Anzahl an, die mindestens so groß ist wie die Anzahl der Hops zwischen der Quelle und dem Ziel. Für Anzahl ist ein Mindestwert von 1 und ein Höchstwert von 9 zulässig.
-s Anzahl
Gibt an, dass die Internetzeitstempeloption im IP-Header verwendet wird, um für jeden Hop den Eintreffzeitpunkt der Echoanforderung und der entsprechenden Echoantwort aufzuzeichnen. Für Anzahl ist ein Mindestwert von 1 und ein Höchstwert von 4 zulässig.
-j Hostliste
Gibt an, dass die Echoanforderungsnachrichten die Option Loose Source Route im IP-Header mit den in Hostliste angegebenen temporären Zieladressen verwenden. Mit lockerem Quellrouting können nachfolgende Zwischenziele durch einen oder mehrere Router voneinander getrennt werden. In der Hostliste sind maximal 9 Adressen oder Namen zulässig. Die Hostliste ist eine Abfolge von IP-Adressen (in punktierter Dezimalschreibweise), die durch Leerzeichen voneinander getrennt sind.
-k Hostliste
Gibt an, dass die Echoanforderungsnachrichten die Option Strict Source Route im IP-Header mit den in Hostliste angegebenen temporären Zieladressen verwenden. Bei strengem Quellrouting muss das nächste zwischengeschaltete Ziel direkt erreichbar sein (es muss sich um einen Nachbarn an einer Schnittstelle des Routers handeln). In der Hostliste sind maximal 9 Adressen oder Namen zulässig. Die Hostliste ist eine Abfolge von IP-Adressen (in punktierter Dezimalschreibweise), die durch Leerzeichen voneinander getrennt sind.
-w Zeitlimit
Gibt an, wie lange, in Millisekunden, auf die Echoantwort gewartet werden soll, die einer bestimmten zu empfangenden Echoanforderung entspricht. Wenn die Echoantwort nicht innerhalb des Zeitlimits empfangen wird, wird die Fehlermeldung "Zeitüberschreitung der Anforderung" angezeigt. Das Standardzeitlimit beträgt 4.000 (4 Sekunden).
Zielname
Gibt den Zielcomputer an, der entweder durch eine IP-Adresse oder einen Hostnamen gekennzeichnet ist.
/?
Zeigt die Hilfe an der Eingabeaufforderung an.
Hinweise
Mit ping können Sie den Computernamen und die IP-Adresse des Computers überprüfen. Wenn das Ausführen des Befehls ping für die IP-Adresse erfolgreich verläuft, für den Computernamen jedoch nicht, besteht möglicherweise ein Namenauflösungsproblem. Stellen Sie in diesem Fall sicher, dass der angegebene Computername durch die lokale Hosts-Datei aufgelöst werden kann. Verwenden Sie hierzu DNS-Abfragen (Domain Name System) oder NetBIOS-Namenauflösungstechniken.
Dieser Befehl ist nur verfügbar, wenn Internet Protocol (TCP/IP) als Komponente in den Eigenschaften eines Netzwerkadapters unter Netzwerkverbindungen installiert ist
Beispiele
Das nachstehende Beispiel zeigt die Ausgabe des Befehls ping an:
C:\>ping example.microsoft.com
Pinging example.microsoft.com [192.168.239.132] with 32 bytes of data:
Antwort von 192.168.239.132: bytes=32 time=101ms TTL=124
Antwort von 192.168.239.132: bytes=32 time=100ms TTL=124
Antwort von 192.168.239.132: bytes=32 time=120ms TTL=124
Antwort von 192.168.239.132: bytes=32 time=120ms TTL=124
Geben Sie Folgendes ein, um den Befehl ping für das Ziel 10.0.99.221 auszuführen und 10.0.99.221 in seinen Hostnamen aufzulösen:
ping -a 10.0.99.221
Geben Sie Folgendes ein, um den Befehl ping für das Ziel 10.0.99.221 mit 10 Echoanforderungen durchzuführen, die jeweils ein 1000 Bytes großes Datenfeld enthalten:
ping -n 10 -l 1000 10.0.99.221
Geben Sie Folgendes ein, um den Befehl ping für das Ziel 10.0.99.221 auszuführen und die Route für 4 Hops aufzuzeichnen:
ping -r 4 10.0.99.221
Geben Sie Folgendes ein, um den Befehl ping für das Ziel 10.0.99.221 durchzuführen und die lockere Quellroute 10.12.0.1-10.29.3.1-10.1.44.1 anzugeben:
ping -j 10.12.0.1 10.29.3.1 10.1.44.1 10.0.99.221
*------------------------------

Die ganzen Parameter kannst du auch im Befehl verwenden
-w 200 wartet 200 Millisekunden
v = Shell("cmd.exe /C ping " & rng.Value & " -w 200 > C:\Ping.txt")
Gruss Rainer
Anzeige
@ Rainer - Danke
20.05.2004 19:53:17
Bernhard Ebermann
Hallo Rainer,
das muß ich mir in aller Ruhe reinziehen.
Is ja doch sehr umfangreich.
Mit der TimeOut-Zeit meinte ich im Übrigen jene Zeit,
welche vergeht, bis die Sub erkennt, das der angefragte
Rechner nicht am Netz ist und der Prüfvorgang abgebrochen wird.
Danke nochmal für Deine Geduld
Gruß
Bernhard
Merci :-) Geschlossen o.T.
20.05.2004 21:39:24
Ramses
...
@ Rainer u. Andre
20.05.2004 18:00:13
Bernhard Ebermann
Hallo Rainer,
hallo Andre,
Habe da mal was aus dem Link "https://www.herber.de/forum/messages/"
extrahiert und neu zusammengebastelt.
Das scheint soweit auch zu funktionieren.
Suche jetzt aber noch die Möglichkeit, die TimeOut-Zeit auf etwa
200 mS zu verkürzen, da innerhalb des Netzwerkes wohl kaum mit
Ping-Zeiten über 100 mS zu rechnen ist.
Hier nun der Code:
---------------------------------------------------
Option Explicit
Public Const MIN_SOCKETS_REQD As Long = 1
Private Const SOCKET_ERROR As Long = -1
Private Const MAX_WSADescription = 256
Private Const MAX_WSASYSStatus = 128
Private Type Hostent
hName As Long
hAliases As Long
hAddrType As Integer
hLen As Integer
hAddrList As Long
End Type
Private Type WSAdata
wVersion As Integer
wHighVersion As Integer
szDescription(0 To MAX_WSADescription) As Byte
szSystemStatus(0 To MAX_WSASYSStatus) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpVendorInfo As Long
End Type
Private Declare Function GetHostByName _
Lib "wsock32.dll" Alias "gethostbyname" _
(ByVal Hostname As String) As Long
Private Declare Function WSAStartup _
Lib "WSOCK32" _
(ByVal wVersionRequired As Long, _
lpWSAdata As WSAdata) As Long
Private Declare Function WSACleanup _
Lib "wsock32.dll" _
() As Long
Private Type LngIP
LngIP As Long
End Type
'-----------------------------------------
Sub test()
Dim Hoststring$, Dummy1
Hoststring = "Station-St1" ' Rechnername
Dummy1 = Lng_IP_von_Hostname(Hoststring)
Stop
End Sub

Private Function Initialisierung() As Boolean
Dim udtWSAData As WSAdata
If WSAStartup(MIN_SOCKETS_REQD, udtWSAData) = SOCKET_ERROR Then
Initialisierung = False
Exit Function
End If
Initialisierung = True
End Function

Public Function Lng_IP_von_Hostname(Hoststring As String) As Long
Dim strHostname As String * 256, lp_to_Hostent As Long
On Error Resume Next
If Not Initialisierung() Then Exit Function
strHostname = Hoststring & vbNullChar
Hoststring = ""
lp_to_Hostent = GetHostByName(strHostname)

'################## Auswertung #####################
If lp_to_Hostent = 0 Then
Stop ' ####### Rechner NICHT vorhanden ######
WSACleanup
Exit Function
Else
Stop ' ######### Rechner vorhanden ##########
End If
WSACleanup
End Function
Gruß
Bernhard
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige