$sIp = InputBox('Input IP-address', 'Input IP-address', 'google.ru')
$var = Ping($sIp, 250)
If $var Then
Msgbox(0, 'Status', 'Online, roundtrip was:' & $var)
Else
Msgbox(0, 'Status', 'An error occured with number: ' & @error)
EndIf
$sIp = InputBox('Input IP-address & port', 'Input IP-address & port through ":"', '74.125.232.17:80')
TCPStartup()
$aIp = StringSplit($sIp, ':')
$socket = TCPConnect($aIp[1], $aIp[2])
If @error Then
MsgBox(16, 'Error', 'Connection is not established!')
Else
MsgBox(64, 'Done', 'Connection accepted!')
TCPCloseSocket($socket)
EndIf
TCPShutdown()
т.е. везде вместо TCPStartup прописать UDP ?Redline сказал(а):Для UDP всё аналогично
То есть не полениться и хотя бы мельком просмотреть справку по Network Management. Вспомнить что такое UDP или узнать, что udp работает без соединеният.е. везде вместо TCPStartup прописать UDP ?
$sServer = "google.com"
$iPort = 80
If _HTTPServerIsOnline($sServer, $iPort) Then
MsgBox(64, "Проверка сервера", "Сервер [" & $sServer & "] on-line.")
Else
MsgBox(48, "Проверка сервера", "Сервер [" & $sServer & "] НЕ on-line.")
EndIf
Func _HTTPServerIsOnline($sServer, $iPort = 80)
TCPStartup()
Local $sName_To_IP = TCPNameToIP($sServer)
Local $iSocket = TCPConnect($sName_To_IP, $iPort)
If $iSocket = -1 Then
TCPCloseSocket($iSocket)
Return SetError(1, 0, "")
EndIf
Local $sCommand = "HEAD / HTTP/1.1" & @CRLF
$sCommand &= "Host: " & $sServer & @CRLF
$sCommand &= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" & @CRLF
$sCommand &= "Referer: " & $sServer & @CRLF
$sCommand &= "Connection: close" & @CRLF & @CRLF
Local $iBytesSent = TCPSend($iSocket, $sCommand)
If $iBytesSent = 0 Then Return SetError(2, @error, 0)
Local $sRecv = "", $sCurrentRecv
While 1
$sCurrentRecv = TCPRecv($iSocket, 16)
If @error <> 0 Then
ExitLoop
EndIf
If $sCurrentRecv <> "" Then
$sRecv &= $sCurrentRecv
EndIf
WEnd
TCPCloseSocket($iSocket)
TCPShutdown()
Return StringRegExp($sRecv, "(?i)HTTP/\d.\d (200|301)") = 1
EndFunc
Циклом можно проверить, но это может занять много времени:есть ли какой-нибудь скрипт сканера портов
$sServer = "google.com"
$iStart_Port = 21
$iEnd_Port = 28000
For $iPort = $iStart_Port To $iEnd_Port
ConsoleWrite("Current Port: " & $iPort & @LF)
If _HTTPServerIsOnline($sServer, $iPort, 5000) Then
MsgBox(64, "Проверка сервера", "Сервер [" & $sServer & "] on-line с использованием порта: " & $iPort)
EndIf
Next
Func _HTTPServerIsOnline($sServer, $iPort = 80, $iTimeOut = 10000)
TCPStartup()
Local $sName_To_IP = TCPNameToIP($sServer)
Local $iSocket = TCPConnect($sName_To_IP, $iPort)
If $iSocket = -1 Then
TCPCloseSocket($iSocket)
Return SetError(1, 0, "")
EndIf
Local $sCommand = "HEAD / HTTP/1.1" & @CRLF
$sCommand &= "Host: " & $sServer & @CRLF
$sCommand &= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" & @CRLF
$sCommand &= "Referer: " & $sServer & @CRLF
$sCommand &= "Connection: close" & @CRLF & @CRLF
Local $iBytesSent = TCPSend($iSocket, $sCommand)
If $iBytesSent = 0 Then Return SetError(2, @error, 0)
Local $sRecv = "", $sCurrentRecv, $iTimer = TimerInit()
While 1
$sCurrentRecv = TCPRecv($iSocket, 16)
If @error <> 0 Or TimerDiff($iTimer) >= $iTimeOut Then
ExitLoop
EndIf
If $sCurrentRecv <> "" Then
$sRecv &= $sCurrentRecv
EndIf
WEnd
TCPCloseSocket($iSocket)
TCPShutdown()
Return StringRegExp($sRecv, "(?i)HTTP/\d.\d (200|301)") = 1
EndFunc
Нужно, чтобы он проверял не только TCP порты а еще и FTP, UDP и некоторые порты типа 27015-27030.CreatoR сказал(а):Циклом можно проверить, но это может занять много времени:
Я с этим особо не знаком, эти порты нужно проверять по другому протоколу? тогда это сложнее...Нужно, чтобы он проверял не только TCP порты а еще и FTP, UDP и некоторые порты типа 27015-27030
Да, порты 27015-27030 используют UDP протокол.CreatoR сказал(а):эти порты нужно проверять по другому протоколу?
Можно так попробовать:порты 27015-27030 используют UDP протокол
TCPStartup()
UDPStartup()
$sServer = "google.com"
$iStart_Port = 21
$iEnd_Port = 28000
For $iPort = $iStart_Port To $iEnd_Port
ConsoleWrite("Current Port: " & $iPort & @LF)
If ($iPort >= 27015 And $iPort <= 27030 And _UDPServerIsOnline($sServer, $iPort, 5000)) Or ($iPort < 27015 And _TCPServerIsOnline($sServer, $iPort, 5000)) Then
MsgBox(64, "Проверка сервера", "Сервер [" & $sServer & "] on-line с использованием порта: " & $iPort)
EndIf
Next
TCPShutdown()
UDPShutdown()
Func _TCPServerIsOnline($sServer, $iPort = 80, $iTimeOut = 10000)
Local $sName_To_IP = TCPNameToIP($sServer)
Local $iSocket = TCPConnect($sName_To_IP, $iPort)
If $iSocket = -1 Then
TCPCloseSocket($iSocket)
Return SetError(1, 0, "")
EndIf
Local $sCommand = "HEAD / HTTP/1.1" & @CRLF
$sCommand &= "Host: " & $sServer & @CRLF
$sCommand &= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" & @CRLF
$sCommand &= "Referer: " & $sServer & @CRLF
$sCommand &= "Connection: close" & @CRLF & @CRLF
Local $iBytesSent = TCPSend($iSocket, $sCommand)
If $iBytesSent = 0 Then Return SetError(2, @error, 0)
Local $sRecv = "", $sCurrentRecv, $iTimer = TimerInit()
While 1
$sCurrentRecv = TCPRecv($iSocket, 16)
If @error <> 0 Or TimerDiff($iTimer) >= $iTimeOut Then
ExitLoop
EndIf
If $sCurrentRecv <> "" Then
$sRecv &= $sCurrentRecv
EndIf
WEnd
TCPCloseSocket($iSocket)
Return StringRegExp($sRecv, "(?i)HTTP/\d.\d (200|301)") = 1
EndFunc
Func _UDPServerIsOnline($sServer, $iPort = 80, $iTimeOut = 10000)
Local $sName_To_IP = TCPNameToIP($sServer)
Local $iSocket = UDPOpen($sName_To_IP, $iPort)
If $iSocket = -1 Then
UDPCloseSocket($iSocket)
Return SetError(1, 0, "")
EndIf
Local $sCommand = "HEAD / HTTP/1.1" & @CRLF
$sCommand &= "Host: " & $sServer & @CRLF
$sCommand &= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" & @CRLF
$sCommand &= "Referer: " & $sServer & @CRLF
$sCommand &= "Connection: close" & @CRLF & @CRLF
Local $iBytesSent = UDPSend($iSocket, $sCommand)
If $iBytesSent = 0 Then Return SetError(2, @error, 0)
Local $sRecv = "", $sCurrentRecv, $iTimer = TimerInit()
While 1
$sCurrentRecv = UDPRecv($iSocket, 16)
If @error <> 0 Or TimerDiff($iTimer) >= $iTimeOut Then
ExitLoop
EndIf
If $sCurrentRecv <> "" Then
$sRecv &= $sCurrentRecv
EndIf
WEnd
UDPCloseSocket($iSocket)
Return StringRegExp($sRecv, "(?i)HTTP/\d.\d (200|301)") = 1
EndFunc
Не помогло :(CreatoR сказал(а):Можно так попробовать
Если вы хотите проверять статус серверов Counter Strike то зачем вам сканировать порты:Мне всего лишь нужен скрипт, который проверяет сервера на заданном ip и порту (от 21 до 28000). То есть неважно какой сервер, главное, чтобы скрипт определил его статус (в сети или нет)
#include <Array.au3>
Global $t = 0
Dim $iCount = 0
Dim $iIP = "93.81.248.130"
Dim $aPort[2] = [26000,29000]
OnAutoItExitRegister("_Cleanup()")
AdlibRegister("_Timer", 300)
UDPStartup()
For $i = $aPort[0] To $aPort[1]
If _Status($iIP, $i) Then
$iCount += 1
$iMsg = MsgBox(262212, "On Line!", "Сервер найден!" &@LF & $iIP &":"& $i)
If $iMsg = 7 Then
ExitLoop
EndIf
EndIf
Next
MsgBox(262208, "Выполнено!", "Поиск серверов закончен!" & @LF & "Найден (" & $iCount & ") сервер.")
Func _Status($iIP, $iPort)
$_Socket = UDPOpen($iIP, $iPort)
If @error <> 0 Then Exit
$_Status = UDPSend($_Socket, "0xFFFFFFFF6765746368616C6C656E6765")
If $_Status = 0 then
MsgBox(16, "Ошибка!", "Ошибка отправки сообщения: " & @error)
Exit
EndIf
Do
$iData = UDPRecv($_Socket, 100, 1)
If $iData <> "" Then
Return 1
EndIf
Until $t = 1
Return 0
EndFunc
Func _Timer()
$t = 1
Return $t
EndFunc
Func _Cleanup()
AdlibUnRegister("_Timer()")
UDPCloseSocket($_Socket)
UDPShutdown()
EndFunc
Большое спасибо! То, что нужно.Garrett сказал(а):статус серверов Counter Strike
Defines the time before TCP functions stop if no communication.
Time in milliseconds before timeout (default=100).