Getting your Trinity Audio player ready...
|
Vocês sabem que se quiser testar uma porta TCP um dos métodos mais simples é basicamente um telnet Nome/IP porta.
Se o prompt sumir e o cursor ficar piscando a porta está respondendo (claro,, tirando todas as implicações de liberação de firewall e blá blá blá)
Eu precisava ficar fazendo um teste mais dinâmico, já que o telnet estabelece a conexão e espera uma intervenção para continuar eu queria apenas saber se a porta esta aberta ou não, estávamos tentando identificar uma falha se era no serviço ou na rede.
o script abaixo fica estabelecendo uma comunicação em um intervalo definido usando o socket TCP/IP estão podemos testar TCP e UDP bem no nível da camada e não da aplicação.
ele é bem simples, em qualquer momento que a porta não responda ele coloca a cor de fundo como vermelho.
function TestPort { Param( [parameter(ParameterSetName='ComputerName', Position=0)] [string] $ComputerName, [parameter(ParameterSetName='IP', Position=0)] [System.Net.IPAddress] $IPAddress, [parameter(Mandatory=$true , Position=1)] [int] $Port, [parameter(Mandatory=$true, Position=2)] [ValidateSet("TCP", "UDP")] [string] $Protocol ) $RemoteServer = If ([string]::IsNullOrEmpty($ComputerName)) {$IPAddress} Else {$ComputerName}; If ($Protocol -eq 'TCP') { $test = New-Object System.Net.Sockets.TcpClient; Try { Write-Host "Connecting to "$RemoteServer":"$Port" (TCP).."; $test.Connect($RemoteServer, $Port); Write-Host "Connection successful" -BackgroundColor Green; } Catch { Write-Host "Connection failed" -BackgroundColor Red; } Final { $test.Dispose(); } } If ($Protocol -eq 'UDP') { $test = New-Object System.Net.Sockets.UdpClient; Try { Write-Host "Connecting to "$RemoteServer":"$Port" (UDP).."; $test.Connect($RemoteServer, $Port); Write-Host "Connection successful" -BackgroundColor Green; } Catch { Write-Host "Connection failed" -BackgroundColor Red; } Final { $test.Dispose(); } } }
A forma de testar ele é bem simples:
TestPort -ComputerName Nome/IP -Port 1433 -Protocol TCP
Legal né? só que eu precisava ficar fazendo testes direto e reto e da forma acima ele não é um looping…
logo, para fazer da forma mais simples que conheço ficou assim:
$servidor = "Nome/IP" while (1) { get-date #só pra saber quando executou TestPort -ComputerName $servidor -Port 1433 -Protocol TCP sleep -seconds 1 #tempo de espera entre as execuções }