Comandos de rede
Esta aula aborda comandos essenciais de diagnóstico de rede no PowerShell, incluindo Test-Connection, Test-NetConnection, Resolve-DnsName e ferramentas de diagnóstico integradas, com exemplos práticos e exercícios para fixação.
Nesta aula, vamos explorar os principais comandos de rede do PowerShell, fundamentais para administradores de sistemas e profissionais de TI que precisam diagnosticar problemas de conectividade, resolver nomes e avaliar a saúde da rede. Dominar essas ferramentas é essencial para automatizar tarefas de troubleshooting e monitoramento.
O PowerShell oferece uma variedade de cmdlets nativos que substituem ou complementam ferramentas clássicas como ping, nslookup e tracert. Esses cmdlets retornam objetos estruturados, permitindo que você filtre, formate e integre os resultados em scripts complexos. Vamos analisar cada um em detalhes, com exemplos práticos e boas práticas.
Test-Connection
O cmdlet Test-Connection é o equivalente moderno do comando ping, mas com muito mais recursos. Ele envia pacotes ICMP (Internet Control Message Protocol) para um ou mais computadores remotos e retorna informações detalhadas sobre a resposta, como tempo de ida e volta (RTT), endereço IP resolvido e status da resposta.
Além de verificar a conectividade básica, o Test-Connection pode ser usado para aguardar um computador ficar online, testar múltiplos endereços simultaneamente e até mesmo executar uma ação quando uma resposta for recebida. Isso o torna uma ferramenta indispensável em scripts de provisionamento e monitoramento.
# Teste básico de conectividade
Test-Connection -ComputerName 'google.com'
# Teste com contagem de pacotes e intervalo
Test-Connection -ComputerName '8.8.8.8' -Count 4 -Interval 1
# Teste silencioso (retorna apenas True/False)
Test-Connection -ComputerName 'servidor01' -Quiet
# Testar vários computadores ao mesmo tempo
Test-Connection -ComputerName 'servidor01', 'servidor02', 'servidor03'
# Aguardar até que o computador responda (útil em scripts)
Test-Connection -ComputerName 'servidor01' -Count 1 -Delay 5 -QuietO parâmetro -Quiet retorna um valor booleano (True ou False), facilitando o uso em estruturas condicionais. Já o parâmetro -Delay define o intervalo entre tentativas quando usado com -Count maior que 1. É importante notar que, por padrão, o cmdlet usa o protocolo ICMP, mas pode ser configurado para usar TCP em algumas versões do PowerShell 7+.
Test-NetConnection
O cmdlet Test-NetConnection é uma ferramenta mais avançada que combina várias funcionalidades de diagnóstico em um único comando. Ele pode testar conectividade de rede, portas TCP específicas, resolução de DNS, e até mesmo realizar um trace de rota (traceroute). É especialmente útil para verificar se um serviço está acessível em uma porta específica.
Diferentemente do Test-Connection, que usa ICMP, o Test-NetConnection permite testar portas TCP, o que é crucial para validar serviços web (porta 80/443), SSH (22), RDP (3389), entre outros. Ele também fornece informações detalhadas sobre a interface de rede utilizada e o endereço IP local.
# Testar conectividade básica (equivalente a ping)
Test-NetConnection -ComputerName 'google.com'
# Testar uma porta específica (ex.: HTTP)
Test-NetConnection -ComputerName 'google.com' -Port 80
# Testar uma porta e exibir apenas o resultado
Test-NetConnection -ComputerName 'servidor01' -Port 3389 -InformationLevel Quiet
# Testar várias portas de uma vez
'80', '443', '22' | ForEach-Object {
Test-NetConnection -ComputerName 'servidor01' -Port $_
}
# Realizar um traceroute
Test-NetConnection -ComputerName 'google.com' -TraceRouteO parâmetro -InformationLevel permite controlar a quantidade de detalhes retornados. Com Quiet, o cmdlet retorna apenas um valor booleano, enquanto Detailed (padrão) fornece todas as informações. O parâmetro -TraceRoute executa um traceroute, mostrando todos os saltos até o destino.
Resolve-DnsName
O cmdlet Resolve-DnsName é a ferramenta moderna para consultas DNS no PowerShell, substituindo o antigo nslookup. Ele permite consultar registros A, AAAA, CNAME, MX, NS, TXT, e muitos outros, retornando objetos estruturados que podem ser facilmente manipulados.
Com esse cmdlet, você pode verificar se um nome de domínio resolve corretamente, obter o endereço IP associado, listar servidores de e-mail, e até mesmo consultar servidores DNS específicos. Isso é essencial para diagnosticar problemas de resolução de nomes e para automatizar verificações de DNS em scripts.
# Resolver um nome de host para IP
Resolve-DnsName -Name 'google.com'
# Consultar um tipo específico de registro (ex.: MX)
Resolve-DnsName -Name 'gmail.com' -Type MX
# Consultar um registro TXT
Resolve-DnsName -Name 'exemplo.com' -Type TXT
# Usar um servidor DNS específico
Resolve-DnsName -Name 'exemplo.com' -Server '8.8.8.8'
# Obter apenas o endereço IP (simplificado)
(Resolve-DnsName -Name 'google.com' -Type A).IPAddressO parâmetro -Type permite especificar o tipo de registro DNS desejado. Se omitido, retorna todos os tipos. O parâmetro -Server permite consultar um servidor DNS específico, útil para testar servidores internos ou alternativos. A saída é um objeto com propriedades como Name, Type, IPAddress, NameHost (para CNAME), etc.
Diagnóstico
Além dos três cmdlets principais, o PowerShell oferece outras ferramentas de diagnóstico de rede que podem ser combinadas para uma análise abrangente. O cmdlet Get-NetAdapter exibe informações sobre as interfaces de rede, Get-NetIPConfiguration mostra configurações de IP, e Test-NetConnection com -TraceRoute pode ser usado para identificar gargalos na rota.
Para um diagnóstico completo, é comum usar uma combinação desses comandos em um script. Por exemplo, você pode verificar se o servidor está acessível (Test-Connection), se a porta do serviço está aberta (Test-NetConnection), e se o DNS está resolvendo corretamente (Resolve-DnsName). Essas verificações em sequência podem identificar rapidamente onde está o problema.
# Exemplo de diagnóstico combinado
$servidor = 'servidor01'
# 1. Testar conectividade ICMP
if (Test-Connection -ComputerName $servidor -Count 1 -Quiet) {
Write-Host "$servidor está acessível via ping" -ForegroundColor Green
} else {
Write-Host "$servidor não responde ao ping" -ForegroundColor Red
}
# 2. Testar porta RDP
$portaTeste = Test-NetConnection -ComputerName $servidor -Port 3389 -InformationLevel Quiet
if ($portaTeste) {
Write-Host "Porta 3389 (RDP) está aberta" -ForegroundColor Green
} else {
Write-Host "Porta 3389 (RDP) não está acessível" -ForegroundColor Red
}
# 3. Resolver nome DNS
$dnsResult = Resolve-DnsName -Name $servidor -ErrorAction SilentlyContinue
if ($dnsResult) {
Write-Host "DNS resolveu para: $($dnsResult.IPAddress)" -ForegroundColor Green
} else {
Write-Host "Falha na resolução DNS" -ForegroundColor Red
}Outra ferramenta útil é o Get-NetRoute, que exibe a tabela de roteamento. Combinado com Test-NetConnection -TraceRoute, você pode mapear o caminho até o destino e identificar onde os pacotes estão sendo perdidos. Essas informações são vitais para administradores de rede.
Boas Práticas
Ao usar esses comandos em scripts, considere as seguintes boas práticas:
- Use
-Quietquando precisar apenas de um valor booleano para tomada de decisão. - Defina timeouts adequados para evitar que scripts fiquem travados aguardando resposta.
- Trate erros com
-ErrorActionpara evitar interrupções inesperadas. - Combine os cmdlets para criar um script de diagnóstico completo, mas organize a lógica para que seja fácil de entender.
- Documente seus scripts para que outros administradores possam entender o propósito de cada teste.
Referências
- Documentação oficial do Test-Connection
- Documentação oficial do Test-NetConnection
- Documentação oficial do Resolve-DnsName
- Documentação do Get-NetAdapter
- Documentação do Get-NetIPConfiguration
- Documentação do Get-NetRoute
Exercícios
- Exercício 1: Escreva um comando que teste a conectividade com o servidor 'contoso.com' enviando 4 pacotes e exibindo o resultado detalhado.✓ Resposta:
Test-Connection -ComputerName 'contoso.com' -Count 4 - Exercício 2: Verifique se a porta 443 do site 'exemplo.com' está acessível. Use o parâmetro que retorna apenas um valor booleano.✓ Resposta:
Test-NetConnection -ComputerName 'exemplo.com' -Port 443 -InformationLevel Quiet - Exercício 3: Consulte o registro MX do domínio 'gmail.com' e exiba o campo 'NameExchange' e 'Preference' de cada registro.✓ Resposta:
Resolve-DnsName -Name 'gmail.com' -Type MX | Select-Object NameExchange, Preference - Exercício 4: Crie um script que testa a conectividade com 'servidor01' e, se falhar, executa um traceroute para diagnosticar a rota.✓ Resposta:
if (-not (Test-Connection -ComputerName 'servidor01' -Count 1 -Quiet)) { Test-NetConnection -ComputerName 'servidor01' -TraceRoute } - Exercício 5: Escreva um comando que resolva o nome 'www.microsoft.com' e mostre apenas os endereços IPv4 resultantes.✓ Resposta:
(Resolve-DnsName -Name 'www.microsoft.com' -Type A).IPAddress