First commit
This commit is contained in:
parent
97981defb5
commit
919dea03e7
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
Backup_*
|
||||
demos
|
||||
*.bak
|
BIN
Icon256-32.ico
Normal file
BIN
Icon256-32.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 65 KiB |
627
pinz.au3
Normal file
627
pinz.au3
Normal file
@ -0,0 +1,627 @@
|
||||
#NoTrayIcon
|
||||
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
|
||||
#AutoIt3Wrapper_Icon=Icon256-32.ico
|
||||
#AutoIt3Wrapper_Outfile=pinz.exe
|
||||
#AutoIt3Wrapper_UseUpx=y
|
||||
#AutoIt3Wrapper_Change2CUI=y
|
||||
#AutoIt3Wrapper_Res_Description=pinz - Ping mit optischer Laufzeitdarstellung - znil.net
|
||||
#AutoIt3Wrapper_Res_Fileversion=0.0.0.100
|
||||
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
|
||||
#AutoIt3Wrapper_Res_SaveSource=y
|
||||
#AutoIt3Wrapper_Res_Language=1031
|
||||
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
|
||||
#include-once
|
||||
#Include <Array.au3>
|
||||
#Include <Inet.au3>
|
||||
#Include <Misc.au3>
|
||||
#include <WinAPI.au3>
|
||||
|
||||
; ****************************************************************************************
|
||||
; ## ## ### ######## #### ### ######## ## ######## ######
|
||||
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
|
||||
; ## ## ## ## ## ## ## ## ## ## ## ## ## ##
|
||||
; ## ## ## ## ######## ## ## ## ######## ## ###### ######
|
||||
; ## ## ######### ## ## ## ######### ## ## ## ## ##
|
||||
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
|
||||
; ### ## ## ## ## #### ## ## ######## ######## ######## ######
|
||||
; ****************************************************************************************
|
||||
|
||||
; ***************************************************************************************************************************************
|
||||
; Nachfolgendes wird für die "PingLikeMicrosoft" Function gebraucht
|
||||
; Die wurde benötigt da ich bei der in AutoIt eingebauten Ping-Funktion nicht die Paket-Größe ändern kann
|
||||
; Die Funktion habe ich hier gefunden: http://www.autoitscript.com/forum/topic/129525-ping-help/
|
||||
Global Const $IP_SUCCESS = 0
|
||||
Global Const $IP_STATUS_BASE = 11000
|
||||
Global Const $IP_BUF_TOO_SMALL = ($IP_STATUS_BASE + 1)
|
||||
Global Const $IP_DEST_NET_UNREACHABLE = ($IP_STATUS_BASE + 2)
|
||||
Global Const $IP_DEST_HOST_UNREACHABLE = ($IP_STATUS_BASE + 3)
|
||||
Global Const $IP_DEST_PROT_UNREACHABLE = ($IP_STATUS_BASE + 4)
|
||||
Global Const $IP_DEST_PORT_UNREACHABLE = ($IP_STATUS_BASE + 5)
|
||||
Global Const $IP_NO_RESOURCES = ($IP_STATUS_BASE + 6)
|
||||
Global Const $IP_BAD_OPTION = ($IP_STATUS_BASE + 7)
|
||||
Global Const $IP_HW_ERROR = ($IP_STATUS_BASE + 8)
|
||||
Global Const $IP_PACKET_TOO_BIG = ($IP_STATUS_BASE + 9)
|
||||
Global Const $IP_REQ_TIMED_OUT = ($IP_STATUS_BASE + 10)
|
||||
Global Const $IP_BAD_REQ = ($IP_STATUS_BASE + 11)
|
||||
Global Const $IP_BAD_ROUTE = ($IP_STATUS_BASE + 12)
|
||||
Global Const $IP_TTL_EXPIRED_TRANSIT = ($IP_STATUS_BASE + 13)
|
||||
Global Const $IP_TTL_EXPIRED_REASSEM = ($IP_STATUS_BASE + 14)
|
||||
Global Const $IP_PARAM_PROBLEM = ($IP_STATUS_BASE + 15)
|
||||
Global Const $IP_SOURCE_QUENCH = ($IP_STATUS_BASE + 16)
|
||||
Global Const $IP_OPTION_TOO_BIG = ($IP_STATUS_BASE + 17)
|
||||
Global Const $IP_BAD_DESTINATION = ($IP_STATUS_BASE + 18)
|
||||
Global Const $IP_ADDR_DELETED = ($IP_STATUS_BASE + 19)
|
||||
Global Const $IP_SPEC_MTU_CHANGE = ($IP_STATUS_BASE + 20)
|
||||
Global Const $IP_MTU_CHANGE = ($IP_STATUS_BASE + 21)
|
||||
Global Const $IP_UNLOAD = ($IP_STATUS_BASE + 22)
|
||||
Global Const $IP_ADDR_ADDED = ($IP_STATUS_BASE + 23)
|
||||
Global Const $IP_GENERAL_FAILURE = ($IP_STATUS_BASE + 50)
|
||||
Global Const $MAX_IP_STATUS = ($IP_STATUS_BASE + 50)
|
||||
Global Const $IP_PENDING = ($IP_STATUS_BASE + 255)
|
||||
Global Const $PING_TIMEOUT = 500
|
||||
Global Const $WS_VERSION_REQD = 0x101
|
||||
Global Const $MIN_SOCKETS_REQD = 1
|
||||
Global Const $SOCKET_ERROR = -1
|
||||
Global Const $INADDR_NONE = 0xFFFFFFFF
|
||||
Global Const $MAX_WSADescription = 256
|
||||
Global Const $MAX_WSASYSStatus = 128
|
||||
If @AutoItX64 Then Exit 0 * MsgBox(16, @ScriptName & " - Error", "ICMP structures only designed for 32-Bit Version")
|
||||
Global Const $ICMP_OPTIONS = _
|
||||
"ubyte Ttl;" & _
|
||||
"ubyte Tos;" & _
|
||||
"ubyte Flags;" & _
|
||||
"ubyte OptionsSize;" & _
|
||||
"ptr OptionsData" ; Options Data
|
||||
Global Const $tagICMP_ECHO_REPLY = _
|
||||
"ulong Address;" & _ ; IPAddr
|
||||
"ulong Status;" & _
|
||||
"ULONG RoundTripTime;" & _
|
||||
"USHORT DataSize;" & _
|
||||
"USHORT Reserved;" & _
|
||||
"ptr Data;" & _
|
||||
$ICMP_OPTIONS
|
||||
; Vorstehendes wird für die "PingLikeMicrosoft" Function gebraucht
|
||||
; ***************************************************************************************************************************************
|
||||
|
||||
Dim $a_PingError[5] ; Enthält den Text für den Rückgabewert von "PingLikeMicrosoft" bei Fehlern
|
||||
Dim $i_PingTime ; hier steht drin welche Laufzeit der letzte Ping hatte - oder 0 wenn es nicht geklappt hat
|
||||
Dim $i_LastPingTime ; Wir merken uns für jeden Durchlauf die Pinglaufzeit vom mal davor für Vergleiche
|
||||
Dim $s_IP ; IP-Adresse des Hosts den wir anpingen
|
||||
Dim $s_DNS ; DNS-Name des Host den wir anpingen - wird vom DNS-Server abgefragt
|
||||
Dim $s_TargetHost ; Der vom Benutzer übergebende Zielhost als IP oder DNS oder NetBIOS-Name
|
||||
Dim $i_n = 4 ; Anzahl der Pings, Standard ist 4 mal
|
||||
Global $i_Counter = 0 ; Falls der Benutzer uns eine Anzahl n übergeben hat zählen wir hiermit mit wie oft wir schon gepingt haben
|
||||
Dim $i_Pause = 1000 ; Wieviel Pause soll zwischen den einzelnen Pings erfolgen?
|
||||
Dim $s_Result ; In dieser Variablen wird die Ausgabezeile zusammengebaut
|
||||
Dim $i_LastResultLen ; Länge der letzten, vorherigen Ausgabezeile für Vergleiche
|
||||
Dim $i_PercentPingTime ; Pinglaufzeit in Prozent im Verhältnis zum noch freien Platz in der Zeile
|
||||
Dim $b_EndlessPing = False ; Wird auf True gesetzt falls der Benutzer -t angegeben hat
|
||||
Dim $i_WindowSizeHorizontal ; Wieviele Zeichen passen in eine Zeile - ausgelesen aus der Windows-Registry
|
||||
Dim $s_temp, $i_temp ; Temporäre Variablen
|
||||
Dim $i_TimeOut = 4000 ; Maximale Wartezeit auf einen Ping
|
||||
Global $i_Packets_Send = 0 ; Zähler - wieviele Pings wurden gesendet
|
||||
Global $i_Packets_Receive = 0 ; Zähler - wieviele Antworten auf Pings haben wir erhalten?
|
||||
Global $i_PingTimeMin = 0 ; Schnellster Ping
|
||||
Global $i_PingTimeMax = 9999999999 ; langsamster Ping
|
||||
Global $i_timer ; Hilfsvariable mit der wir die Zeit messen in unserer Schleife
|
||||
Global $b_SkipPing = False ; Hilfsvariable die gesetzt wird um das pingen zu überspringen
|
||||
Global $i_Error
|
||||
Global $i_Extended
|
||||
|
||||
; Das normale ping sendet 32 Bytes ... das machen wir auch in dem wir eine Zeichenfolge dieser Länge senden.
|
||||
; Indem wir die Zeichenfolge verlängern oder verkürzen können wir diesen Wert später anpassen
|
||||
; 1 2 3
|
||||
; 12345678901234567890123456789032
|
||||
Dim $s_Payload = "abcdefghijklmnopqrstuvwabcdefghi" ; 32 Bytes!
|
||||
Dim $s_Payload = "pinz -- ping von http://znil.net" ; 32 Bytes!
|
||||
|
||||
|
||||
; Wir holen uns einen Zeiger auf das aktuelle Fenster - brauchen wir für das Abfangen von STRG + C
|
||||
Global $sDllValue, $DOSBOCHandle
|
||||
$sDllValue = DllCall( "Kernel32.dll","hwnd","GetConsoleWindow")
|
||||
$DOSBOCHandle = $sDllValue[0]
|
||||
|
||||
|
||||
; Anzahl der Zeichen pro Zeile ermitteln aus den Default Werten der Registry
|
||||
$s_temp = Hex(RegRead("HKCU\Console", "WindowSize"), 4) ; in den letzten 4 Zeichen steht die Horizontale Breite
|
||||
$i_WindowSizeHorizontal = Dec($s_temp)
|
||||
|
||||
|
||||
; 10 20 30 40 50 60 70 80
|
||||
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
Dim $s_Header = _
|
||||
"+------------------------------------------------------------------------------" & @CRLF & _
|
||||
"| pinz.exe - Version " & FileGetVersion(@ScriptName) & @CRLF & _
|
||||
"+------------------------------------------------------------------------------" & @CRLF & _
|
||||
"| 2015 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net" & @CRLF & _
|
||||
"+------------------------------------------------------------------------------" & @CRLF & _
|
||||
@CRLF
|
||||
|
||||
; 10 20 30 40 50 60 70 80
|
||||
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
Dim $s_HilfeText = _
|
||||
"Pinz - Ein ping Programm welches die Laufzeit des Pings optisch darstellt" & @CRLF & _
|
||||
"-------------------------------------------------------------------------------" & @CRLF & _
|
||||
@CRLF & _
|
||||
"Aufruf: " & @CRLF & _
|
||||
@CRLF & _
|
||||
@ScriptName & " Ziel [-t]" & @CRLF & _
|
||||
@CRLF & _
|
||||
"Ziel : IP-Adresse (IPv4 oder IPv6) oder NetBIOS-Name oder" & @CRLF & _
|
||||
" DNS-Name des Ziels" & @CRLF & _
|
||||
@CRLF & _
|
||||
" -t : Kontinuierlich pingen bis das Programm per STRG + C gestoppt" & @CRLF & _
|
||||
" wird" & @CRLF & _
|
||||
@CRLF & _
|
||||
" -n Anzahl : Anzahl von Pinganforderungen die gesendet werden sollen," & @CRLF & _
|
||||
" Standard ist 4" & @CRLF & _
|
||||
@CRLF & _
|
||||
" -l Größe : Größe der Datenpakete in Bytes, STandard sind 32 Bytes" & @CRLF & _
|
||||
@CRLF & _
|
||||
" -p Zeit : Pause zwischen den einzelnen Pings in Millisekunden," & @CRLF & _
|
||||
" Standard ist 1.000 = 1s" & @CRLF & _
|
||||
@CRLF & _
|
||||
" -w Zeitlimit : Zeitlimit in Millisekunden für eine Rückmeldung." & @CRLF & _
|
||||
@CRLF & _
|
||||
"+------------------------------------------------------------------------------" & @CRLF & _
|
||||
"| pinz.exe ist FREEWARE!" & @CRLF & _
|
||||
"| Kopieren, weitergeben ausdrücklich erlaubt!" & @CRLF & _
|
||||
"| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:" & @CRLF & _
|
||||
"| http://znil.net/index.php?title=pinz" & @CRLF & _
|
||||
"+------------------------------------------------------------------------------" & @CRLF
|
||||
|
||||
; Fehlertexte für "PingLikeMicrosoft" setzen
|
||||
$a_PingError[1] = "Zielhost ist Offline"
|
||||
$a_PingError[2] = "Zielhost nicht erreichbar "
|
||||
$a_PingError[3] = "unbekanntes Ziel"
|
||||
$a_PingError[4] = "Netzwerkfehler"
|
||||
|
||||
; *************************************************************************************
|
||||
; ######## ## ## ## ## ###### ######## #### ####### ## ## ######
|
||||
; ## ## ## ### ## ## ## ## ## ## ## ### ## ## ##
|
||||
; ## ## ## #### ## ## ## ## ## ## #### ## ##
|
||||
; ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ######
|
||||
; ## ## ## ## #### ## ## ## ## ## ## #### ##
|
||||
; ## ## ## ## ### ## ## ## ## ## ## ## ### ## ##
|
||||
; ## ####### ## ## ###### ## #### ####### ## ## ######
|
||||
; *************************************************************************************
|
||||
|
||||
|
||||
; # # # ##### ### ##### ####### ####### # #
|
||||
; # # ## # # # # # # # # # ## ##
|
||||
; # # # # # # # # # # # # # # #
|
||||
; # # # # # ##### # ##### # # ##### # # #
|
||||
; ####### # # # # # # # # # # #
|
||||
; # # # ## # # # # # # # # #
|
||||
; # # # # ##### ### ####### ####### ####### # #
|
||||
;#######
|
||||
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird
|
||||
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt
|
||||
Func _ANSI2OEM($text)
|
||||
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')
|
||||
Return $text[2]
|
||||
;Return $text
|
||||
EndFunc ;==>_ANSI2OEM
|
||||
|
||||
|
||||
; # # #
|
||||
; # # # # ###### ###### # # # # #### #### ###### ##### ###### # #
|
||||
; # # # # # # # # # # # # # # # # # ## #
|
||||
; ####### # # ##### ##### # # # # #### # ##### ##### ##### # # #
|
||||
; # # # # # # ####### # # # # ### # # # # # # #
|
||||
; # # # # # # # # # # # # # # # # # # # ##
|
||||
; # # # ###### # ###### # # #### #### #### ###### ##### ###### # #
|
||||
;#######
|
||||
; Hilfsroutine die den Hilfetext ausgibt
|
||||
Func _HilfeAusgeben()
|
||||
ConsoleWrite(_ANSI2OEM($s_Header))
|
||||
ConsoleWrite(_ANSI2OEM($s_HilfeText))
|
||||
EndFunc ;==>_HilfeAusgeben
|
||||
|
||||
|
||||
; ##### ####### ###### # #####
|
||||
; # # # # # # # #
|
||||
; # # # # # #
|
||||
; # # ###### # #
|
||||
; # # # # # #
|
||||
; # # # # # # # #
|
||||
; ##### # # # ####### #####
|
||||
;####### #######
|
||||
; die Tastenkombination STRG +C abfangen um dann eine Zusammenfassung auszugeben
|
||||
Func _CTRL_C()
|
||||
If WinActive( $DOSBOCHandle, "" ) Then
|
||||
; Unser Fenster ist gerade aktiv!
|
||||
_WriteStatistics()
|
||||
; Abfangen von STRG + C aufheben
|
||||
HotKeySet( "^c" )
|
||||
Exit $i_Error
|
||||
Else
|
||||
; Es wurde zwar STRG + C gedrückt - das war aber nicht für uns bestimmt
|
||||
; Wir senden deshalb den Tastendruck weiter
|
||||
HotKeySet( "^c" )
|
||||
Send( "^c" )
|
||||
HotKeySet( "^c","_CTRL_C" )
|
||||
EndIf
|
||||
EndFunc
|
||||
|
||||
|
||||
; # # #####
|
||||
; # # # ##### # ##### ###### # # ##### ## ##### # #### ##### # #### ####
|
||||
; # # # # # # # # # # # # # # # # # # # #
|
||||
; # # # # # # # ##### ##### # # # # # #### # # # ####
|
||||
; # # # ##### # # # # # ###### # # # # # # #
|
||||
; # # # # # # # # # # # # # # # # # # # # # # #
|
||||
; ## ## # # # # ###### ##### # # # # # #### # # #### ####
|
||||
;#######
|
||||
Func _WriteStatistics()
|
||||
Local $i_Packets_Lost
|
||||
If $i_Packets_Send > 0 Then
|
||||
If $i_PingTimeMax = 9999999999 Then
|
||||
$i_PingTimeMax = 0
|
||||
EndIf
|
||||
$i_Packets_Lost = Int(($i_Packets_Send - $i_Packets_Receive) / $i_Packets_Send * 100)
|
||||
; eben noch sicher gehen das der Prozentwert nicht größer als 100 oder kleiner als 0 ist - kann passieren wenn vor dem ersten Ping schon abgebrochen wird
|
||||
If $i_Packets_Lost < 0 Then
|
||||
$i_Packets_Lost = 0
|
||||
EndIf
|
||||
If $i_Packets_Lost > 100 Then
|
||||
$i_Packets_Lost = 100
|
||||
EndIf
|
||||
ConsoleWrite(@CRLF)
|
||||
ConsoleWrite(_ANSI2OEM("PingZ-Statistik für " & $s_IP & ":" & @CRLF))
|
||||
ConsoleWrite(" Pakete: Gesendet = " & $i_Packets_Send & ", Empfangen = " & $i_Packets_Receive & ", Verloren = " & ($i_Packets_Send - $i_Packets_Receive) & @CRLF)
|
||||
ConsoleWrite(" (" & $i_Packets_Lost & "% Verlust)," & @CRLF)
|
||||
ConsoleWrite("Ca. Zeitangaben in Millisekunden:" & @CRLF)
|
||||
ConsoleWrite(" Minimum = " & $i_PingTimeMin & "ms, Maximum = " & $i_PingTimeMax & "ms, Mittelwert = " & Int(($i_PingTimeMin + $i_PingTimeMax) / 2) & "ms" & @CRLF)
|
||||
EndIf
|
||||
EndFunc
|
||||
|
||||
|
||||
|
||||
; Nachfolgendes wird für die "PingLikeMicrosoft" Function gebraucht
|
||||
; Die wurde benötigt da ich bei der in AutoIt eingebauten Ping-Funktion nicht die Paket-Größe ändern kann
|
||||
; Die Funktion habe ich hier gefunden: http://www.autoitscript.com/forum/topic/129525-ping-help/
|
||||
Func _IcmpCustomPayload($sAddress, $sDataToSend, ByRef $ECHO, $PING_TIMEOUT = 4000) ; ECHO As ICMP_ECHO_REPLY
|
||||
; $ECHO receives an ICMP_ECHO_REPLY on success
|
||||
; by Prog@ndy, used VBSource from http://vbnet.mvps.org/index.html?code/internet/ping.htm
|
||||
; on success return 1 , else 0
|
||||
Local $return = 0, $error = 0
|
||||
;~ 'If Ping succeeds :
|
||||
;~ '.RoundTripTime = time in ms for the ping to complete,
|
||||
;~ '.Data is the data returned (NULL terminated)
|
||||
;~ '.Address is the Ip address that actually replied
|
||||
;~ '.DataSize is the size of the string in .Data
|
||||
;~ '.Status will be 0
|
||||
;~ '
|
||||
;~ 'If Ping fails .Status will be the error code
|
||||
Local $WSOCK32DLL = DllOpen("wsock32.dll")
|
||||
; use Icmp.dll for: Windows 2000 Server and Windows 2000 Professional
|
||||
;Local $ICMPDLL = DllOpen("icmp.dll")
|
||||
; use Iphlpapi.dll for: Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP
|
||||
Local $ICMPDLL = DllOpen("Iphlpapi.dll")
|
||||
Local $hPort ;As Long
|
||||
Local $dwAddress ;As Long
|
||||
Local $INADDR_NONE = -1
|
||||
;~ If Not StringRegExp($sAddress,"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}") Then
|
||||
;~ TCPStartup()
|
||||
;~ $sAddress = TCPNameToIP($sAddress)
|
||||
;~ TCPShutdown()
|
||||
;~ EndIf
|
||||
;~ 'convert the address into a long representation
|
||||
$dwAddress = DllCall($WSOCK32DLL, "uint", "inet_addr", "str", $sAddress)
|
||||
$dwAddress = $dwAddress[0]
|
||||
;~ 'if a valid address..
|
||||
If $dwAddress <> $INADDR_NONE Or $sAddress = "255.255.255.255" Then
|
||||
;~ 'open a port
|
||||
$hPort = DllCall($ICMPDLL, "hwnd", "IcmpCreateFile")
|
||||
$hPort = $hPort[0]
|
||||
;~ 'and if successful,
|
||||
If $hPort Then
|
||||
$ECHO = DllStructCreate($tagICMP_ECHO_REPLY & ";char[355]")
|
||||
;~ 'ping it.
|
||||
Local $ret = _IcmpSendEcho($hPort, _
|
||||
$dwAddress, _
|
||||
$sDataToSend, _
|
||||
StringLen($sDataToSend), _
|
||||
0, _
|
||||
DllStructGetPtr($ECHO), _
|
||||
DllStructGetSize($ECHO), _
|
||||
$PING_TIMEOUT, _
|
||||
$ICMPDLL)
|
||||
;~ 'return the status as ping succes and close
|
||||
$error = DllStructGetData($ECHO, "Status")
|
||||
If $error = $IP_SUCCESS Then $return = 1
|
||||
DllCall($ICMPDLL, "uint", "IcmpCloseHandle", "hwnd", $hPort)
|
||||
EndIf
|
||||
Else
|
||||
;~ 'the address format was probably invalid
|
||||
$return = 0
|
||||
$error = $INADDR_NONE
|
||||
EndIf
|
||||
DllClose($WSOCK32DLL)
|
||||
DllClose($ICMPDLL)
|
||||
Return SetError($error, 0, $return)
|
||||
EndFunc ;==>_IcmpCustomPayload
|
||||
; by BugFix, modified by Prog@ndy
|
||||
; für 1000 < @error < 1004 is der error von Dllcall. Die DllCall-Fehlernummer ist dabei @error/1000
|
||||
Func _IcmpSendEcho($IcmpHandle, $DestinationAddress, $RequestData, $RequestSize, $RequestOptions, $ReplyBuffer, $ReplySize, $Timeout, $ICMPDLL = "icmp.dll")
|
||||
Local $ret = DllCall($ICMPDLL, "dword", "IcmpSendEcho", _
|
||||
"hwnd", $IcmpHandle, _
|
||||
"uint", $DestinationAddress, _
|
||||
"str", $RequestData, _
|
||||
"dword", $RequestSize, _
|
||||
"ptr", $RequestOptions, _
|
||||
"ptr", $ReplyBuffer, _
|
||||
"dword", $ReplySize, _
|
||||
"dword", $Timeout)
|
||||
If @error Then Return SetError(@error+1000, 0, 0)
|
||||
Return $ret[0]
|
||||
EndFunc ;==>_IcmpSendEcho
|
||||
|
||||
Func _PingLikeMicrosoft($DestinationAddress, $Timeout = 4000, $sPayLoad = "abcdefghijklmnopqrstuvwabcdefghi")
|
||||
; function created by CUNNINGT
|
||||
Local $ECHORet
|
||||
Local $pingSucess = _IcmpCustomPayload($DestinationAddress, $sPayLoad, $ECHORet, $Timeout)
|
||||
If @error Then
|
||||
Switch @error
|
||||
Case $IP_REQ_TIMED_OUT
|
||||
$i_Error = 1
|
||||
$i_Extended = 1
|
||||
Return SetError(1, 1)
|
||||
Case $IP_DEST_HOST_UNREACHABLE
|
||||
$i_Error = 1
|
||||
$i_Extended = 2
|
||||
Return SetError(1, 2)
|
||||
Case $IP_BAD_DESTINATION
|
||||
$i_Error = 1
|
||||
$i_Extended = 3
|
||||
Return SetError(1, 3)
|
||||
Case Else
|
||||
$i_Error = 1
|
||||
$i_Extended = 4
|
||||
Return SetError(1, 4)
|
||||
EndSwitch
|
||||
Else
|
||||
$i_Error = 0
|
||||
$i_Extended = 0
|
||||
Return DllStructGetData($ECHORet, "RoundTripTime")
|
||||
EndIf
|
||||
|
||||
EndFunc ;==>_PingLikeMicrosoft
|
||||
|
||||
; ****************************************
|
||||
; ## ## ### #### ## ##
|
||||
; ### ### ## ## ## ### ##
|
||||
; #### #### ## ## ## #### ##
|
||||
; ## ### ## ## ## ## ## ## ##
|
||||
; ## ## ######### ## ## ####
|
||||
; ## ## ## ## ## ## ###
|
||||
; ## ## ## ## #### ## ##
|
||||
; ****************************************
|
||||
|
||||
; falls keine Parameter angegeben wurden die Hilfe ausgeben
|
||||
If $CmdLine[0] = 0 Then
|
||||
_HilfeAusgeben()
|
||||
Exit 0
|
||||
EndIf
|
||||
;testen ob der Parameter 1 ist auf "/?" testen und ebenfalls Hilfe ausgeben
|
||||
If $CmdLine[1] = "/?" Then
|
||||
_HilfeAusgeben()
|
||||
Exit 0
|
||||
EndIf
|
||||
|
||||
; Die übergebenen Parameter auswerten und zuordnen
|
||||
For $i = 1 To $CmdLine[0]
|
||||
If StringLeft($CmdLine[$i], 2) = "-t" Then
|
||||
; Dauerping!
|
||||
$b_EndlessPing = True
|
||||
ElseIf StringLeft($CmdLine[$i], 2) = "-n" Then
|
||||
; Bestimmte Anzahl von Ping senden
|
||||
If $CmdLine[0] >= ($i + 1) Then
|
||||
$i = $i + 1
|
||||
$i_n = Int($CmdLine[$i])
|
||||
If $i_n < 1 Then
|
||||
$i_n = 4
|
||||
EndIf
|
||||
Else
|
||||
ConsoleWrite(_ANSI2OEM("Der Wert muss für die Option angegeben werden: -n" & @CRLF))
|
||||
Exit 1
|
||||
EndIf
|
||||
ElseIf StringLeft($CmdLine[$i], 2) = "-p" Then
|
||||
|
||||
If $CmdLine[0] >= ($i + 1) Then
|
||||
$i = $i + 1
|
||||
$i_Pause = Int($CmdLine[$i])
|
||||
Else
|
||||
ConsoleWrite(_ANSI2OEM("Der Wert muss für die Option angegeben werden: -p" & @CRLF))
|
||||
Exit 1
|
||||
EndIf
|
||||
ElseIf StringLeft($CmdLine[$i], 2) = "-l" Then
|
||||
If $CmdLine[0] >= ($i + 1) Then
|
||||
$i = $i + 1
|
||||
$i_temp = Int($CmdLine[$i])
|
||||
If $i_temp < 1 Then
|
||||
$i_temp = 32
|
||||
EndIf
|
||||
$s_Payload = ""
|
||||
For $j = 1 To $i_temp
|
||||
$s_Payload = $s_Payload & "z"
|
||||
Next
|
||||
EndIf
|
||||
ElseIf StringLeft($CmdLine[$i], 2) = "-w" Then
|
||||
If $CmdLine[0] >= ($i + 1) Then
|
||||
$i = $i + 1
|
||||
$i_TimeOut = Int($CmdLine[$i])
|
||||
If $i_TimeOut < 1 Then
|
||||
$i_TimeOut = 4000
|
||||
EndIf
|
||||
ConsoleWrite("Timneout: " & $i_TimeOut & @CRLF)
|
||||
Else
|
||||
ConsoleWrite(_ANSI2OEM("Der Wert muss für die Option angegeben werden: -w" & @CRLF))
|
||||
Exit 1
|
||||
EndIf
|
||||
Else
|
||||
$s_TargetHost = $CmdLine[$i]
|
||||
EndIf
|
||||
Next
|
||||
|
||||
HotKeySet("^c", "_CTRL_C")
|
||||
|
||||
|
||||
TCPStartup()
|
||||
|
||||
$s_IP = TCPNameToIP($s_TargetHost)
|
||||
$s_DNS = _TCPIpToName($s_IP)
|
||||
TCPShutdown ( )
|
||||
|
||||
If $s_IP = "" Then
|
||||
ConsoleWrite(_ANSI2OEM("pinz konnte Host " & $s_TargetHost & " nicht finden. Überprüfen Sie den Namen, und versuchen Sie es erneut." & @CRLF))
|
||||
Exit 1
|
||||
EndIf
|
||||
|
||||
ConsoleWrite(@CRLF)
|
||||
If $s_DNS = "" Then
|
||||
ConsoleWrite(_ANSI2OEM("pinz wird ausgeführt für " & $s_IP & " mit " & StringLen($s_Payload) & " Bytes Daten:" & @CRLF))
|
||||
Else
|
||||
ConsoleWrite(_ANSI2OEM("pinz wird ausgeführt für " & $s_DNS & " [" & $s_IP & "] mit " & StringLen($s_Payload) & " Bytes Daten:" & @CRLF))
|
||||
EndIf
|
||||
|
||||
|
||||
|
||||
While 1
|
||||
If $b_SkipPing = False Then
|
||||
$i_Packets_Send = $i_Packets_Send + 1
|
||||
;$s_Result = "Antwort von " & $s_IP & ": "
|
||||
$s_Result = " " & $s_IP & ": "
|
||||
If $s_IP = "127.0.0.1" Then
|
||||
$i_PingTime = Ping($s_IP, $i_TimeOut)
|
||||
Else
|
||||
$i_PingTime = _PingLikeMicrosoft($s_IP, $i_TimeOut, $s_Payload)
|
||||
EndIf
|
||||
; When the function fails, @error contains extended information:
|
||||
; 1 = Host is offline
|
||||
; 2 = Host is unreachable
|
||||
; 3 = Bad destination
|
||||
; 4 = Other errors
|
||||
;~ MsgBox(0,"",@error & ";" & @extended)
|
||||
If $i_Error > 0 Then
|
||||
$a_PingError[0] = _ANSI2OEM(" Zeitüberschreitung (" & $a_PingError[$i_Extended] & ")" )
|
||||
If $i_Extended > 0 Then
|
||||
$s_Result = $s_Result & " " & Chr(195) & " " & $a_PingError[$i_Extended]
|
||||
Else
|
||||
;~ $s_Result = $s_Result & " " & Chr(179) & _ANSI2OEM(" Zeitüberschreitung (>") & $i_TimeOut & "ms)"
|
||||
$s_Result = StringTrimRight($s_Result, 1)
|
||||
For $i = 1 To (4 - StringLen($i_TimeOut))
|
||||
$s_Result = $s_Result & " "
|
||||
Next
|
||||
$s_Result = $s_Result & ">" & $i_TimeOut & "ms " & Chr(179)
|
||||
EndIf
|
||||
$i_PingTime = 0
|
||||
EndIf
|
||||
If $i_PingTime > $i_TimeOut Then
|
||||
$i_PingTime = 0
|
||||
;ConsoleWrite("Result: " & $s_Result & @CRLF)
|
||||
$s_Result = StringTrimRight($s_Result, 1)
|
||||
For $i = 1 To (4 - StringLen($i_TimeOut))
|
||||
$s_Result = $s_Result & " "
|
||||
Next
|
||||
$s_Result = $s_Result & ">" & $i_TimeOut & "ms " & Chr(179)
|
||||
EndIf
|
||||
If $i_PingTime >= 0 And $i_Error = 0 Then
|
||||
For $i = 1 To (4 - StringLen($i_PingTime))
|
||||
$s_Result = $s_Result & " "
|
||||
Next
|
||||
$i_Packets_Receive = $i_Packets_Receive + 1
|
||||
If $i_PingTime < $i_PingTimeMax Then
|
||||
$i_PingTimeMax = $i_PingTime
|
||||
EndIf
|
||||
If $i_PingTime > $i_PingTimeMin Then
|
||||
$i_PingTimeMin = $i_PingTime
|
||||
EndIf
|
||||
;~ $s_Result = $s_Result & $i_PingTime & "ms |"
|
||||
$s_Result = $s_Result & $i_PingTime & "ms " & Chr(195)
|
||||
EndIf
|
||||
; So, String sollte jetzt genau 8 Zeichen lang sein, bleiben noch 72 für Anzeige
|
||||
If $i_PingTime < ($i_WindowSizeHorizontal - StringLen($s_Result)) Then
|
||||
; Variante 1: Ping ist unter maximalen Fensterbreite
|
||||
For $i = 1 To ($i_PingTime)
|
||||
;~ $s_Result = $s_Result & "-"
|
||||
;~ $s_Result = $s_Result & Chr(196) ; Pfeilspitze
|
||||
;~ $s_Result = $s_Result & Chr(178) ; grauer Kasten 1
|
||||
;~ $s_Result = $s_Result & Chr(219) ; voller Kasten
|
||||
$s_Result = $s_Result & Chr(254) ; voller Kasten klein
|
||||
Next
|
||||
Else
|
||||
; Neue Variante 2: Wir kürzen den Wert auf unter 100!
|
||||
$i_PercentPingTime = Int(StringRight($i_PingTime, 2))
|
||||
If $i_PercentPingTime > ($i_WindowSizeHorizontal - StringLen($s_Result)) Then
|
||||
; In Prozente umrechnen im Verhältnis zu den freien Zeichen
|
||||
$i_PercentPingTime = Int(($i_WindowSizeHorizontal - StringLen($s_Result)) / $i_PercentPingTime * 100)
|
||||
; Aus den Prozenten wieder die Anzahl der Zeichen errechnen
|
||||
$i_PercentPingTime = Int(($i_WindowSizeHorizontal - StringLen($s_Result)) * $i_PercentPingTime / 100)
|
||||
EndIf
|
||||
;~ ConsoleWrite("Breite der Konsole : " & $i_WindowSizeHorizontal & @CRLF)
|
||||
;~ ConsoleWrite("Bisherige Länge : " & StringLen($s_Result) & @CRLF)
|
||||
;~ ConsoleWrite("Noch freie Zeichen in der Zeile : " & ($i_WindowSizeHorizontal - StringLen($s_Result)) & @CRLF)
|
||||
;~ ConsoleWrite("Geplante Zeichen : " & ($i_PercentPingTime - 1) & @CRLF)
|
||||
;~ ConsoleWrite("Summe: : " & (StringLen($s_Result) + $i_PercentPingTime) & @CRLF)
|
||||
|
||||
For $i = 1 To ($i_PercentPingTime - 1)
|
||||
;~ $s_Result = $s_Result & "-"
|
||||
;~ $s_Result = $s_Result & Chr(196) ; Pfeilspitze
|
||||
;~ $s_Result = $s_Result & Chr(178) ; grauer Kasten 1
|
||||
;~ $s_Result = $s_Result & Chr(219) ; voller Kasten
|
||||
$s_Result = $s_Result & Chr(254) ; voller Kasten klein
|
||||
Next
|
||||
EndIf
|
||||
|
||||
;~ If $i_PingTime > $i_LastPingTime Then
|
||||
;~ $s_Result = $s_Result & Chr(16)
|
||||
;~ ElseIf $i_PingTime = $i_LastPingTime Then
|
||||
;~ $s_Result = $s_Result & Chr(16)
|
||||
;~ Else
|
||||
;~ $s_Result = $s_Result & Chr(16)
|
||||
;~ EndIf
|
||||
|
||||
;~ If $i_PingTime <= 0 Then
|
||||
;~ $s_Result = $s_Result & _ANSI2OEM(" Zeitüberschreitung (") & $i_TimeOut & "ms)"
|
||||
;~ EndIf
|
||||
|
||||
If ($i_LastPingTime < $i_PingTime) And ($i_LastResultLen = StringLen($s_Result)) Then
|
||||
$s_Result = $s_Result & Chr(254)
|
||||
EndIf
|
||||
If ($i_LastPingTime > $i_PingTime) And ($i_LastResultLen = StringLen($s_Result)) Then
|
||||
$s_Result = StringTrimRight($s_Result, 1)
|
||||
EndIf
|
||||
|
||||
|
||||
ConsoleWrite($s_Result & @CRLF)
|
||||
$i_LastResultLen = StringLen($s_Result)
|
||||
|
||||
EndIf
|
||||
; Sleep($i_Pause)
|
||||
|
||||
$i_LastPingTime = $i_PingTime
|
||||
|
||||
If $b_SkipPing = False Then
|
||||
$i_timer = TimerInit()
|
||||
$b_SkipPing = True
|
||||
EndIf
|
||||
If $b_SkipPing = True Then
|
||||
If TimerDiff($i_timer) > $i_Pause Then
|
||||
;~ ConsoleWrite(TimerDiff($i_timer) & "ms" & @CRLF)
|
||||
$b_SkipPing = False
|
||||
If $b_EndlessPing = False Then
|
||||
$i_Counter = $i_Counter + 1
|
||||
If $i_Counter >= $i_n Then
|
||||
ExitLoop
|
||||
EndIf
|
||||
EndIf
|
||||
Else
|
||||
Sleep(100)
|
||||
EndIf
|
||||
EndIf
|
||||
WEnd
|
||||
|
||||
_WriteStatistics()
|
||||
Exit $i_Error
|
Loading…
Reference in New Issue
Block a user