Update 27.12.2019: pping hat sich inzwischen wesentlich weiter entwickelt. Die wichtigsten Neuerungen sind:
- pping basiert nun auf .NET Core 3.1
- pping kann nun auch per chocolatey installiert werden
- Der Code und die Doku liegen auf GitHub
Manchmal muss man eben selbst Hand anlegen, wenn man etwas braucht. Normalerweise suche ich mir kleine Apps und Tools im schier unerschöpflichen Fundus des Internet. Dieses Mal gab es aber nichts, was mir wirklich passte. Ich brauchte ein ping, das nicht den Rechner, sondern einen Port auf diesem auf Erreichbarkeit prüft.
Download aktuelle Version (7Zip)
Wofür?
PPing ist eigentlich schnell erklärt. Ein normales ping gibt einem Nutzer an, ob ein Netzwerkendpunkt erreichbar ist, oder eben nicht. Das ist in den meisten Fällen auch alles, was man wissen muss. Ich brauchte aber immer wieder die Information, ob ein bestimmter Port auf einer Maschine erreichbar ist und das kann ping erstmal nicht.
Sucht man in Internetforen nach einer Lösung dieses Problems, tauchen immer wieder 2 Lösungsvorschläge auf:
- Versuchen, eine telnet-Session auf den betreffenden Port aufzubauen.
- nmap benutzen
Irgendwie fand ich beides immer schon reichlich blöd bzw. überzogen. telnet muss man unter Windows z.B. erstmal freischalten bzw. installieren. Hat man das dann endlich und benutzt diesen Weg, macht man eigentlich nichts anderes, als ein Programm zu missbrauchen. telnet ist einfach nicht für diese Aufgabe gemacht und wenn ich (wie man es bei ping oft tut) einen Trace laufen lassen möchte, der mir sagt, wann ein Port einfach da ist, dann geht das auch nicht.
nmap scheint da besser geeignet, aber es ist einfach zu mächtig. nmap ist die eierlegenede Wollmilchsau unter den Netzwerktools. Ein Sniffer-Portchecker-Clone, der mir immer irgendwie zu „schwer“ vorkam.
Und genau hier kommt pping ins Spiel.
Wie?
Ich habe pping als .NET-Konsolenanwendung geschrieben. Es basiert auf .NET Framework 4.5, nutzt eigentlich nur den Namespace System.Net und kommt mit vielerlei Optionen daher, die ich später noch erläutern werde.
Der Download bringt einem ein 7Zip, das aus 2 Dateien besteht. pping.exe und SabUtils.dll. Letztere ist eine Bibliothek, die ich für meine Firmen-Belange geschrieben habe bzw. immer weiter entwickle. Sie beinhaltet die eigentliche Logik für das Feststellen, ob ein Port offen ist oder nicht (auch dazu später mehr).
Die Nutzung ist nun denkbar einfach. Der Minimal-Aufruf lautet:
pping {Adresse} {Portnummer}
Das bei Nutzung von codingfreaks.de als Port und 80 als Port zu folgendem Output:
C:\Program Files (x86)\PPing>pping codingfreaks.de 80 Starting pinging host codingfreaks.de on port 80 4 times: # 1 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 2 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 3 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 4 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN Finished pinging host codingfreaks.de (IP:-). 4 pings sent (4 OK, 0 CLOSED)
Was man da sieht ist also dem Verhalten des Windows-Ping nachempfunden. Ohne weitere Angabe von Optionen werden 4 Versuche unternommen, den Zielhost auf dem angegebenen Port zu erreichen. Die IP-Adresse wird nicht aufgelöst (Zeitgründe) und zum Schluss wird eine Zusammenfassung angezeigt.
Was geht sonst noch?
In der aktuellen Version sind weitere Optionen enthalten. Hier mal eine alphabetisch sortierte Liste.
udp (u)
Wenn dieses Flag mit angegeben wird, wird anstelle einer TCP-Verbindung eine UDP-Verbindung genutzt.
address (a)
Die Adresse des Endpunkts, der geprüft werden soll. man könnte auch sagen, die Netzwerkadresse des Rechners, der gepingt werden soll. Die Adresse ist logischerweise ein Pflichtparameter. Man kann ihn z.B. so angeben:
pping -a=irgendwas.com
oder einfach hinter pping als erstes einfügen.
autostop (as)
Autostop ist ein Flag-Parameter. Es reicht also, ihn anzugeben, damit er wirksam wird. Ziel ist es, beim ersten OPEN-Ergebnis die Ausführung zu stoppen. Hier ein Beispiel:
C:\Program Files (x86)\PPing>pping codingfreaks.de 80 -as Starting pinging host codingfreaks.de on port 80 4 times: # 1 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN Finished pinging host codingfreaks.de (IP:-). 4 pings sent (1 OK, 0 CLOSED)
Da bereits die erste Anfrage „OPEN“ lieferte, wird das Programm sofort verlassen. Man kann das z.B. in Verbindung mit endless nutzen, um solange Anfragen an den Port zu senden, bis er endlich da ist. Ich nutze dies gelegentlich, um auf Port 3389 eines Systems zu lauschen, dass ich gerade remote neu gestartet habe. Dann brauche ich nicht dümmlich immer wieder zu versuchen, eine RDP-Verbindung aufzubauen, obwohl der Dienst noch gar nicht online ist.
endless (t)
Endless sorgt dafür, dass pping nicht auffhört, Anfragen zu senden. „Nicht aufhört“ ist dabei natürlich relativ. Das Maximum an Anfragen beträgt in .NET gesprochen int.MaxValue. Der Parameter wurde von mir mit „t“ abgekürzt, weil das bei ping genauso gemacht wurde.
Auch endless ist ein Flag-Parameter, es reicht also, ihn anzugeben:
Starting pinging host codingfreaks.de on port 80 infinite times: # 1 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 2 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 3 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 4 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 5 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 6 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 7 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 8 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 9 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 10 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 11 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 12 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 13 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN
logo (l)
Ein Flag, das dafür sorgt, dass ein App-Header erscheint, wenn es gesetzt wurde. Beispiel:
C:\Program Files (x86)\PPing>pping codingfreaks.de 80 -logo ******************************************************************************* * PPing * * --------------------------------------------------------------------------- * * codingfreaks ping with port-check * * --------------------------------------------------------------------------- * * codingfreaks * * Copyright © codingfreaks 2012 * ******************************************************************************* Starting pinging host codingfreaks.de on port 80 4 times: # 1 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 2 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 3 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 4 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN Finished pinging host codingfreaks.de (IP:-). 4 pings sent (4 OK, 0 CLOSED)
ports (p)
Die Nummer des Ports, der geprüft werden soll. Wenn mehrere Ports geprüft werden sollen, müssen die Werte durch Komma voneinander getrennt werden. Der Wert pro Port muss größer als 0 sein und darf int.MaxValue nicht überschreiten:
C:\Program Files (x86)\PPing>pping codingfreaks.de -p=3389 Starting pinging host codingfreaks.de on port 3389 4 times: # 1 -> Pinging host codingfreaks.de (IP:-) on port 3389 with timeout 1: CLOSED # 2 -> Pinging host codingfreaks.de (IP:-) on port 3389 with timeout 1: CLOSED # 3 -> Pinging host codingfreaks.de (IP:-) on port 3389 with timeout 1: CLOSED # 4 -> Pinging host codingfreaks.de (IP:-) on port 3389 with timeout 1: CLOSED Finished pinging host codingfreaks.de (IP:-). 4 pings sent (0 OK, 4 CLOSED)
repeats (r)
Kann genutzt werden, um anzugeben, wie viele Anfrage-Pakete das Tool senden soll. Der Standardwert ist 4.
C:\Program Files (x86)\PPing>pping codingfreaks.de 80 -r=10 Starting pinging host codingfreaks.de on port 80 10 times: # 1 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 2 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 3 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 4 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 5 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 6 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 7 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 8 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 9 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN # 10 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 1: OPEN Finished pinging host codingfreaks.de (IP:-). 10 pings sent (10 OK, 0 CLOSED)
resolve (res)
Sorgt dafür, dass das Tool versucht, die IP-Adresse aus dem angegebenen Endpunkt zu ermitteln. Resolve ist ein Flag-Parameter und braucht keinen Wert.
C:\Program Files (x86)\PPing>pping codingfreaks.de 80 -res Starting pinging host codingfreaks.de on port 80 4 times: # 1 -> Pinging host codingfreaks.de (IP:85.13.141.89) on port 80 with timeout 1: OPEN # 2 -> Pinging host codingfreaks.de (IP:85.13.141.89) on port 80 with timeout 1: OPEN # 3 -> Pinging host codingfreaks.de (IP:85.13.141.89) on port 80 with timeout 1: OPEN # 4 -> Pinging host codingfreaks.de (IP:85.13.141.89) on port 80 with timeout 1: OPEN Finished pinging host codingfreaks.de (IP:85.13.141.89). 4 pings sent (4 OK, 0 CLOSED)
timeout (tim)
Ein Wert in Sekunden, der angibt, wie lange eine einzelne Anfrage wartet, bis sie als unbeantwortet gilt:
C:\Program Files (x86)\PPing>pping codingfreaks.de 80 -tim=10 Starting pinging host codingfreaks.de on port 80 4 times: # 1 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 10: OPEN # 2 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 10: OPEN # 3 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 10: OPEN # 4 -> Pinging host codingfreaks.de (IP:-) on port 80 with timeout 10: OPEN Finished pinging host codingfreaks.de (IP:-). 4 pings sent (4 OK, 0 CLOSED)
waittime (w)
Zeitspanne in Millisekunden, die zwischen den einzelnen Anfragen gewartet werden soll. Der Sinn ist einfach, nicht zuviel Traffic zu erzeugen bzw. das Zielsystem nicht zu flooden. Standardmäßig steht dieser Wert auf 500. Hier ein Sample, dass 1,5 Sekunden zwischen 2 Aufrufen wartet:
C:\Program Files (x86)\PPing>pping codingfreaks.de 80 -w=1500
Technische Details
Das hier wäre nicht codingfreaks, wenn ich den Kern der Sache nicht enthüllen würde. Wie weiter oben bereits angemerkt, ist die Logik zum Ermitteln, ob ein Port geöffnet ist. Ich habe das wie folgt gelöst:
var result = false; using (var client = new TcpClient()) { try { client.ReceiveTimeout = timeout * 1000; client.SendTimeout = timeout * 1000; var asyncResult = client.BeginConnect(host, port, null, null); var waitHandle = asyncResult.AsyncWaitHandle; try { if (!asyncResult.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(timeout), false)) { // wait handle didn't came back in time client.Close(); } else { // The result was positiv result = client.Connected; } // ensure the ending-call client.EndConnect(asyncResult); } finally { // Ensure to close the wait handle. waitHandle.Close(); } } catch { } } return result;
Ich habe vorher ein wenig mit allen möglichen einfacheren und komplizierteren Möglichkeiten rumgespielt. Die Variante oben erschien mir einfach ein guter Kompromiss aus Aufwand und Performance und arbeitet außerdem asynchron, was mir wichtig war. Wer weiß denn schon, wie lange es nur bei Konsolenanwendung bleibt?
Ach ja: Bevor mich Enthusiasten wegen des leeren catch geißeln: Weiter unten habe ich angekündigt, dass Logging kommt später noch und erst dann macht das an der Stelle auch Sinn.
Was kommt noch?
Ich habe wohl noch ein wenig zu tun. Mir sind ein paar Fehlerchen bekannt, wenn man einfach nur pping schreibt. Dann gibt das Tool eine Liste mit den Optionen aus, und die ist noch ein wenig „überarbeitungswürdig“.
Folgende Erweiterungen habe ich geplant:
- Portranges
- Logging
- Implementierung in PowerShell-Commandlet
Mal schauen, wann ich dazu komme. Feedback ist immer gern gesehen. Ansonsten wünsche ich viel Spaß und hoffentlich nutzbringenden Einsatz.
Hallo und Danke!!!
Habe soetwas schon länger gesucht – optimal wenn man einige Firewallrules auf die schnelle testen muss.
Gruss !
Super, dass es Dir gefällt. Freude damit!
Hallo,
genau so ein tool benötige ich.
Ich habe Net Framework 4.51 installiert und versuche nun die anwendung unter Windows 7 zu starten.
Dann wird kurz eine Konsole geöffnet, aber sofort wieder geschlossen.
Was mache ich falsch?
Hallo Rainer,
geh‘ folgendermaßen vor. Wenn Du die Dateien z.B. in C:\Program Files\pping entpackt hättest, dann öffne eine Konsole und gehe in ihr in diesen Ordner. Dann kannst Du pping eingeben und los gehts. Alternativ kannst Du den Pfad auch Deiner Umgebungsvariablen hinzufügen. Dann reicht es, einfach nur eine Konsole aufzumachen. Wenn Du Hilfe brauchst, schreib noch mal.
sprinter
Hallo,
durch Zufall auf pping gestoßen, echt super.
Eine Frage habe ich dennoch, gehen auch IPv6, ich bekomme es nicht hin.
Grüße Tom
Hi TomZ, leider nein! Wäre ein Update wert. Wir checken das mal durch.
super tool, genau das was ich gesucht hatte, aber leider bekomme ich wenn CLOSED kommen sollte dies hier:
c:\temp\pping>pping.exe -address=10.238.232.172 -ports=1352 -timeout=1 -repeats=
1
Starting pinging host 10.238.232.172 on TCP port(s) 1352 1 times:
Unhandled Exception: System.Net.Sockets.SocketException: Es konnte keine Verbind
ung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 10.238.23
2.172:1352
at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
at System.Net.Sockets.TcpClient.EndConnect(IAsyncResult asyncResult)
at s2.s2Utils.Logic.Base.Utilities.NetworkUtil.IsPortOpened(String host, Int3
2 port, Int32 timeout, Boolean useUdp)
at codingfreaks.pping.Ui.ConsoleApp.Program.c__DisplayClass27.b__18(I
nt32 port)
at System.Collections.Generic.List`1.ForEach(Action`1 action)
at codingfreaks.pping.Ui.ConsoleApp.Program.Main(String[] args)
haben Win7 in Virtual Desktop Umgebung im Einsatz. Ich hoffen es kann mir geholfen werden. Danke im Voraus.
Gruß Lutz
Hallo zusammen,
ich bin auf einen Bug gestoßen und wollte fragen ob das richtig ist oder ob es ein update geben wird:
mache ich eine tcp pping auf zdf.de auf port 80 ist alles ok
pping.exe -a=zdf.de -p=80 -t -res -r=2 -w=1500 -tim=1
==> Port ist offen
mache ich hingegen einen Ping auf port 81 welches zu ist:
pping.exe -a=zdf.de -p=81 -t -res -r=2 -w=1500 -tim=1
sollte doch geschlossen zurück kommen
dies macht pping aber nicht, es kommt eine art Fehlermeldung mit der ich nichts anfangen kann.
ausser das die gegenstelle nach angemessener zeit nicht antwortet. Die nachfolgenden Einträge sagen mir nichts.
Könntet ihr bitte mal über dieses Ergebniss schauen und mir ein kurze Rückmeldung geben. DANKE
leachim
Hallo leachim,
danke für Dein Feedback. Die neue Version 1.2.12 ist unter http://www.codingfreaks.de/files/pping_1_2_12.7z fertig. Sie behebt das Problem, dass durch Fehler bei Einsatz von „-res“ auftauchten. Bitte beachte, dass Du aktuell mit „-r=2“ sagst, dass 2 Requests geschickt werden sollen und mit „-t“, dass Du endlos Requests schicken möchtest. Die beiden Einstellungen widersprechen sich. „-res“ macht übrigens keinen richtigen Sinn, wenn Du den DNS-Namen schon weist. Macht es dann nur langsamer.
Ich nutze immer gern die Kurzschreibweise „pping zdf.de 80 -t -as“. Das „-t“ macht zwar endlos, das „-as“ stoppt aber beim ersten erfolgreichen Connect.
Gruß, sprinter
Scheint nicht mit .NET 4.6 zu laufen (Windows 10, 64 Bit) … ?
Hi Gregor! In welchem Ordner auf Deiner Platte hast Du es laufen?
Bei mir unter Win 10×64 .Net 4.6 kein Problem :)
Per Zufall auf diesen nützlichen Helfer gestossen :)
die Ports können ja mit Komma getrennt aneinender gereiht werden.
nun folgende Frage:
geht auch Port Range? also 80-88
geht auch eine Kombination? also 80,88,8000-8080
Hi! Ja Portrange geht. Einfach „pping hostname 80-88“ und schon gehts los. Es würde auch „80,81,83“ als Port-Filter gehen.
kann es sein dass mit 1.7.52 die Ranges nicht mehr gehen?
Generell schient mir unter Win10 1709 alle Ports als CLOSED gemeldet was definitiv nicht sein kann
Oder wo mach ich mit angehängtem Muster den Denkfehler, was hab ich übersehen?
cls
echo
set CheckHost=LicSRV
pping %CheckHost% 80,8080,21-22,3389,1180,2080,27000-27009 -as
timeou=6
DANKE
PS: für’s Logging ergänzich üblicher weise am Schluss noch mit Pinklog_%1.log aber daran liegt es offenbar auch nicht
eben auch mit 1.8.67 (Link im Blog noch falsch) probiert identisches Result, Ranges scheinen nihct mehr zu gehen und alles endet CLOSED :(
Danke
Ich checke nochmal alles durch. Die Links sind scheinbar ein echtes Problem :-(. Ich melde mich dann wieder hier.
Ich habe das mit den Ranges jetzt wieder eingebaut. Also z.B.: ‚pping google.de 80-85‘ sollte 6 ports auf google.de scannen. Zur Sicherheit hier der direkte Link zur neuen Version 1.9.78: http://codingfreaks.de/files/tools/pping_1_9_78.7z. Update ist auf heise auch eingereicht.
Besten Dank, Download ab direktem Link hat geklappt. von Google.de wird nur der 80er nur das erste mal von 4 Sequenzen als Open gemeldet 81-85 CLOSED. Leider schient die Kombination 80-88, 21 nicht mehr zu gehen (80-88 geht jetzt wieder)
Eigentlich wollte ich das Teil auch im internen LANn nutzen da geht aber zumindest unter Win10 1709 16299 gar nix :(
Bsp. pping 192.168.1.11 80-88,21-22,3389,8080 -logo (da kommt dann error, dass PARAMETER 2 nicht interpretiert werden kann) macht man jeden einzeln geht’s aber, also: pping 192.168.1.11 80-88 geht pping 192.168.1.11 21-22 geht pping 192.168.1.11 3389 geht pping 192.168.1.11 8080 geht
Hallo RePao! Vielen Dank für das ausführliche Feedback. Ich setze mich zwischen den Jahren mal dran und überarbeite das. Ich habe vor, die Parameter-Checks komplett umzubauen und die Ausgabe mehr Unix-Like zu gestalten. Ich melde mich wieder.
Super tool, vielen Dank dafür! Praktisch auch für Spezialdienste die auf ICMP-Pings nicht antworten.
Jedoch habe ich ein seltsames Verhalten festgestellt, ich weiß nicht ob es ein Bug ist oder ob irgendwelche Caches im Spiel sind. Pinge ich eine Adresse erfolgreich an und ziehe anschließend das Netzwerkkabel wird mit beim nächsten mal immer noch eine erfolgreiche Verbindung angezeigt. Der Rechner ist definitiv offline.
Hallo Markus! Danke für das Feedback! Ich werde das mal checken. Es kann sein, dass ich hier irgendeinem Caching auf Netzwerkseite aufsitze. Mal gucken, was ich raus bekommen. Du kannst übrigens mittlerweile über https://github.com/codingfreak/cfUtils/blob/master/Logic/Logic.Base/Utilities/NetworkUtil.cs die eigentliche Logik einsehen. Die Methode „IsPortOpen“ ist genau das, was pping nutzt.
Hi, Unable to download the 1.4 release.
Hi blade! Thanks for Feedback. Link is updated. Try again please.
Hi sprinter,
Tested working. Great utility. Thanks.
Thanks for the response! Enjoy!
Hallo sprinter,
für tcp funktioniert das Tool super. Leider zeigt er mir bei jedem udp port den ich remote prüfe „OPEN“ an. Egal ob die Ports dicht sind oder nicht. (Beispielaufruf: „pping.exe -address=192.168.240.61 -ports=1333 -udp“)
Hi bazze! Ich kann das tatsächlich nachstellen und muss offensichtlich nochmal ran. Danke fürs Feedback. Ich checke das.
Hi,
hätte ein paar Erweiterungsvorschläge:
1.) Anzahl der Coutns als Errorlevel zurückgeben.
2.) Open als Errorlevel 0 zurückgeben
Close als Errorlevel 1 zurückgeben
3.) Verhalten von 1 oder 2 per Parameter konfigurierbar
LG Andreas
Hallo Andreas, danke fürs Feedback. Wird hiermit als Feature-Request aufgenommen.
Hallo Andreas, die neue Version 1.5.43 kann nun über den Tools-Bereich heruntergeladen werden. Die beiden neuen Flags sind -elf und -elsc (Kurzversion).
Hi sprinter,
Was wondering if a English documentation could be provided.
Thanks.
Hi, blade. I’ll implement this in the GitHub Wiki. I’ll come back here when it’s finished.
Done. Look at https://github.com/codingfreak/pping
Hi sprinter,
Thanks so much!
Hi blad! You`re welcome!
Super Sache.
Aber kann es sein das der Timeout nur auf Portebene funktioniert und bei nicht vorhandenen Adressen nicht funktioniert bzw. viel länger als eingestellt ist?
Könntest du den Timeout (oder evtl. einen zusätzlichen Parameter) auch auf Adressebene einbauen?
Hallo Hans. Ich habe bereits Ähnliches festgestellt, allerdings scheint es hier Abhängigkeiten zur Windows-Konfig zu geben. Ich versuche, das noch genauer zu ermitteln. Ich nutze ja leider nur die Basis-Technik von .NET.
Hallo sprinter,
danke erst mal für das sehr hilfreiche Werkzeug.
Allerdings sind jetzt viele verschiedene Versionen zum Download angeboten.
Bei Heise liegt die 1.2.2, in deinem Blog oben die 1.4.4 und unter Tools die aktuelle Version 1.5.4.
grüße vom it-frosch
Hallo it-frosch! Hast Recht. Das mit dem Blog habe ich jetzt gerade gezogen. Heise ist bei den Uploads leider irgendwie hinterher. Ich habe die 1.5.43 oben.
Hallo it-frosch! Meinst Du sowas hier http://www.codingfreaks.de/feed/ ? Meinst Du, dass ein Feed-Link auf der Seite fehlt?
Ein Tipp an alle, wenn man die Umschalt- Taste gedrückt hält und die rechte Maustaste auf eine freie Fläche klickt, kann man im Kontextmenü „Eingabeforderung hier öffnen“ auszuwählen.
Dies macht natürlich nur dort Sinn, wo sich auch die pping.exe befindet. Anschließend kann man gleich mit den eintragen der Parameter beginnen.
Tipp 2: Ich habe mir eine cmd Datei im selben Order erstellt, die ich im Grunde nur ändern brauche um z.B. anderen Host einzutragen
Hallo Andreas! Danke für den Tipp. Ich trage den Ordner, in dem pping liegt immer in die Umgebungsvariable PATH ein. Dann kann ich in jedem Ordner einfach pping nutzen.
Hallo,
die Version 1.5.43 gibt noch immer falsche Rückgabewerte bei UDP-Pings aus, sodass jede Anfrage OPEN ist. Ist bereits ein Update in Arbeit/Planung?
Gruß,
Martin Beckert
Hallo Martin. Ich bin noch dabei, die Fehlerursache zu finden. Es hat mal funktioniert glaube ich. Ich bin mehr oder weniger immer mal wieder dran.
Supernützliches Tool – vielen Dank!
Danke fürs Feedback!
Klasse Tool, sehr schlank und nicht überladen – Danke!
Ein Feature was mir noch fehlt:
Ich teste damit Firewallregeln. Leider ist mit pping nicht zu erkennen ob die Firewallregel selbst funktioniert oder nicht. Hierzu müsste pping noch auswerten ob der ange-pping-te Server ein RST zurücksendet oder ob gar nichts kommt. Wenn nichts kommt, könnte man ähnlich wie bei nmap ein FILTERED zurück geben. Dann kann ich sagen, alles was OPEN und CLOSED ist, ist Firewalltechnisch ok.
Hallo Reinhard! Vielen Dank fürs Feedback. Das Problem hierbei ist, dass ich aktuell noch relativ „dämlich“ teste und dadurch auch Probleme mit UDP habe. Ich plane schon seit längerem, vernünftig mit den Protokollen umzugehen. Dein Tipp kommt auf jeden Fall mit aufs Trapez.
Hallo Reinhard. Ich habe eine die neue Version 1.6.44 hochgeladen. Es gibt jetzt eine „-d“-Option, die aktuell TimeOut und Refused unterscheiden kann. Außerdem funktioniert UDP jetzt sauber und die TimeOuts werden endlich sauber berücksichtigt.
Tolles Tool – kann ich gut für diverse Life-Checks brauchen. Aber hat es einen Grund, dass die Errorlevel genau entgegen den PING-Errorleveln gesetzt werden? PPING gibt 1 bei Offen und 0 bei Fehler und PING wirft 0 bei Erreichbar/Offen und 1 bei Fehler. Andersrum wäre es m.E. kosistenter gewesen.
Hallo Arti. Werde ich umdrehen. Guter Hinweis. Danke!
Hallo Arti! Version 1.7.52 ist jetzt raus und hat den Fix drin.
Hallo Sprinter, wow – das ging ja schnell. Du machst Deinem Namen alle Ehre! Allerdings ist beim Packen wohl etwas scheif gegangen – in den zips (bei Heise und hier) sollte die exe und die beiden dll stecken. Es sind aber 2 pdb drin und die neue exe läuft mit den alten dll niicht mehr.
Hallo Arti! Danke fürs Feedback. Auf dem codingfreaks-Link sollte jetzt alles laufen. Probier mal bitte.
Hallo Sprinter, super – passt nun. Auf der Tools-Seite ist die neueste Version 1.7.52 verlinkt. Die enthaltene EXE und 2 DLL passen zueinander und PPING läuft. Der Errorlevel ist nun genau andersrum wie bei der Vorgängerversion (NEU: 0=ok 1=Fehler) – manche Skripter werden mich verfluchen :-). Ich habe in meinen Skripts die Errorlevels angepasst (wohl dem, der mit Variablen arbeitet ;-)) – alles läuft.
Bei Heise ist noch die falsche 1.7.52 zu finden und auf Deiner Blog-Seite ganz oben ist die alte Version 7.5.43 verlinkt.
Nochmals danke und ich denke, es ist so die konsistentere Lösung, auch wenn so manches Skript angepasst werden muss. Vielleicht ist es ein Extra-Kommentar wert der Art: „ACHTUNG! Ab Version 1.7.52 Errorlevel geändert – 0=Ok und 1=Fehler).
Hi! Danke fürs Feedback. Das mit den Skriptern sehe ich erstmal entspannt. Wenn sich jemand dazu meldet, baue ich noch einen Extra-Schalter ein. Heise braucht leider immer ein Bisschen bis die Updates approved sind. Mal schauen. Ich bin grad etwas verwirrt, was Du mit „auf Deiner Blog-Seite ganz oben“ meinst. Ist wahrscheinlich das Alter!
hier ist noch die alte Version:
http://www.codingfreaks.de/2013/01/05/pping-ein-ping-auf-port-ebene/
Der Link auf Augenhöhe ;-) http://www.codingfreaks.de/files/tools/pping_1_5_43.7z
thanks & hold on good work!
Vielen Dank! Hab’s korrigiert.
Solange das trotz Verwirrtheit noch alles so gut klappt, ist’s kein Problem :-). Mit Blog meine ich die Seite, die auf der Tools Seite mit „Mehr Infos gibts im Blog-Artikel.“ verlinkt ist: http://www.codingfreaks.de/?p=1604 –> http://www.codingfreaks.de/2013/01/05/pping-ein-ping-auf-port-ebene/. Und dort ist unter „Download aktuelle Version (7Zip)“ die Version 1.5.43 verlinkt.
Den verwirrenden „Extra-Schalter“ würde ich mir sparen. Wenn man in ’nem Skript den Extra-Schalter aktivieren kann, dann kann man auch die Errorlevels anpassen…
Danke für den Hinweis! Ist eingebaut.
bei eingabe von „pping 192.168.178.1 80“ erscheint über win7: „pping funktioniert nicht mehr“. Auf Konsolenebene erscheint der Satz:
„Unbehandelte Ausnahme: System.IO.FileNotFoundException: Die Datei oder Assembly „cfUtils.cfBaseUtils, Version=1.0.26.41, Culture=
bei codingfreaks.pping.Ui.ConsoleApp.Program.Main(String[] args)“
Was mache ich falsch?
Hallo Huepp. Hattest Du Dir die Version noch einmal gezogen? Ich musste ein Update vornehmen. Geh bitte nocheinmal auf http://codingfreaks.de/files/tools/pping_1_7_52.7z und versuch es mit der Version noch einmal.
Hi codingfreaks,
I habe euer PPING 1.7.52 heute gebraucht und einen Fehler gefunden.
Ein TCP Port wurde mir als CLOSE angezeigt, obwohl er offen ist. (der Test mit telnet bestätigte das dann auch)
Windows 10 x64
grüße vom it-frosch
Anmerkung zu meiner Fehlermeldung.
Der Port, den PPING als CLOSE anzeigt, war im Listen Status.
Soll ich die Kommunikation mit wireshark mal mitschneiden oder was braucht ihr an Infos?
grüße vom it-frosch
Hallo it-frosch. Bin nicht ganz sicher, ob Wireshark hilft. Wir benutzen aktuell den TCP-Stack von .NET. Offensichtlich reagiert der nicht auf alle Ports sondern nur auf die, die von außen über eine der IPs auch erreichbar ist. Kann das das Problem sein (interner Port)?
Hallo
tolles Tool. Dank dafür!
Ein kleines Problem habe ich aber mit der Errolevel. Ich bekomme immer nur 0 zurück egal ob der Port offen ist oder nicht. Hat vieleicht jemand einen cmd schnipsel wo ich den richtigen Umgang sehen kann?
Alternativ müsste ich mit | find arbeiten, was aber nicht so elegant wäre.
Ich sage jetzt schon mal Danke.
What versions of Windows are supported? What version of .Net is required?
We support all current Windows versions (Server 2012 or newer, 7, 8, 10) and require .NET 4.6.2 or newer.
Hallo schönes praktisches Tool.
Ich hätte ein paar Anmerkungen.
-Würde die Ausgabe ohne # machen, hatte Probleme mit gesetzten Variablen.
-Errorlevel scheint nicht zu funktionieren.
-Loging wäre cool
Hi TEP, ich gucke mir das mal an.
Cooles Tool. Was etwas schade ist, das Programm setzt keinen Errorlevel ;-( So ist es leider in Scripte nicht komfortabel einsetzbar. Der Errorlevel ist immer 0! selbst wenn man das Programm mit falschen Parametern aufruft wird 0 zurück gegeben.
Das stimmt. Ich werde da mal entsprechend updaten. Im Moment versuche ich, es bei chocolaty zu hosten. Update sollte bald kommen. Danke!