ZitatKann man mit der Ping Variante auch auf gewisse Ports hin überprüfen?
Nein, mit Ping kann man nur Hosts abfragen, also ob ein Rechner erreichbar ist oder nicht!
Server(ports) fragt man per TCP ab, Beispiel s. unten
Allerdings gibt es dann das Problem, dass du per Ping zwar schnell feststellen kannst, ob ein Rechner online ist, und auch im Falle eines offenen Ports eine schnelle Antwort bekommst, aber wenn der Serverdienst nicht zu erreichen ist (Port nicht offen) kann es SEHR lange (bis zu 15 Sekunden) dauern, bis du diese Nachricht erhälst!
Erklärung siehe hier
Script zum Testen:
Spoiler anzeigen
Opt("TCPTimeout", 3000) ;1000 milliseconds egal welche zahl, bringt nix....
[/autoit] [autoit][/autoit] [autoit]TCPStartup()
;ip-adressen der ftp-server oder eines erreichbaren rechners, auskommentieren zum testen
$szIPADDRESS = "193.99.144.80" ; Heise hat dort ftp-server laufen
; $szIPADDRESS = "85.214.130.125" ;autoit aber schon
$szIPADDRESS = "173.194.69.94" ;google
;~ $szIPADDRESS = "217.237.149.205";Timeserver RWTH Aachen
;$szIPADDRESS = "127.0.0.1" ;intern, hier wird die adlib-funktion aufgerufen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$pingzeit = Ping($szIPADDRESS, 1000)
If $pingzeit <> 0 Then ;wenn Rechner per ping erreichbar, dann
MsgBox(0, "Ping auf "&$szIPADDRESS&" erfolgreich", $pingzeit)
Else
MsgBox(0, "Ping auf "&$szIPADDRESS&" fehlgeschlagen!", 0)
EndIf
$nport = 21;ftp oder jeden anderen Port
$mainsocket = -1 ;keine Verbindung
Global $t = TimerInit() ; timer startzeit merken
Adlibregister("_tcp_timeout", 1000) ;"normalerweise" würde nach einer Sekunde die Funktion aufgerufen werden, auch wenn der Rechner nicht erreichbar ist, funktion
$mainsocket = TCPConnect($szIPADDRESS, $nport) ; wenn kein server auf port 21 erreichbar ist, dann Wartezeit ca 15-20 sec, obwohl der rechner online ist
$error=@error
AdlibUnRegister()
$m = TimerDiff($t) ;wieviel zeit ist seit dem timerstart vergangen?
If $mainsocket <> -1 Then ;wenn Verbindung zum FTP hergestellt, dann
MsgBox(0, "mainsocket " & $m, "FTP-Server erreicht unter "&$mainsocket)
Else
MsgBox(0, $m, "FTP-Server nicht erreichbar"&@crlf&"Fehlernummer: "&$error)
EndIf
Exit
Func _tcp_timeout() ;wird nur bei internen netzverbindungen aufgerufen....
$m = Int(TimerDiff($t)) ;wieviel zeit ist seit dem timerstart vergangen?
If $mainsocket = -1 Then
MsgBox(0, "adlib "& $m, "FTP-Server nicht erreichbar" & @CRLF )
Else
Msgbox(0,0,"Diese Nachricht sollte man normalerweise nicht sehen!")
endif
AdlibUnRegister()
EndFunc ;==>_tcp_timeout
In Zeile 20 können die Ports angegeben werden