Batch Capture IPs Netstat de entrada como variáveis

1

Estou tentando descobrir se há uma maneira de capturar (e, se possível, registrar) os endereços IP exibidos no comando 'netstat'. Eu estou tentando fazer um script que aguarda um ping de um host específico. Existe alguma maneira de capturar essas informações em variáveis viáveis do que posso usar em um script? Eu canalizo a saída para um arquivo de texto, mas ainda não entendo como capturar o IP do arquivo de texto em variáveis

Obrigado antecipadamente

    
por user23412 07.06.2014 / 06:24

2 respostas

0

se você tiver um arquivo de texto com IPs e quiser apenas os IPs, o netstat se tornará irrelevante.

obtenha o grep no gnuwin32 e o regex certo. Isso vai fazer isso

C:\blah>grep -oP (\d{1,3}\.){1,3}\d{1,3} filewithips

tente arp -a>myfile ou netstat -aon > a então você tem um arquivo de IPs entre outras informações e você quer que os IPs agora executem o comando grep que dei a você e você obtenha apenas os IPs

ou isto

C:\>netstat -aon | grep -oP (\d{1,3}\.){1,3}\d{1,3}

produzirá uma lista de IPs

Você pode executar um loop for apenas lendo cada linha em uma variável

então não é uma questão de ler IPs apenas lendo linhas de um arquivo.

    
por 07.06.2014 / 15:16
0

Este script demonstra como salvar IPs de saída de netstat em variáveis no PowerShell

Basta executar o script no PowerShell ISE, abrir um novo navegador, acessar www.google.com e ver o que está acontecendo.

$allIPs = [System.Net.Dns]::GetHostAddresses("www.google.com")
$myIP = $allIPs[0].IPAddressToString

while ($true) {
  cls
  netstat -n | select-string "$myIP.*ESTABLISHED" | foreach {
    $part = $_.line.split(' ',[System.StringSplitOptions]::RemoveEmptyEntries)
    $localIP  = $part[1] -replace ":.*", "" 
    $remoteIP = $part[2] -replace ":.*", "" 
    write-host $localIP  $remoteIP
  }
  sleep 2
}  

Uma vez iniciado, ele consulta todas as conexões com netstat -n a cada 2 segundos ( while ($true) junto com sleep 2 ).

Para acelerar o netstat, -n (numérico) é o parâmetro mais importante, pois nenhuma pesquisa de DNS é feita. Você pode ler mais sobre outros parâmetros, como -a e -o , no Technet

Em seguida, o PowerShell filtra apenas as conexões estabelecidas ( select-string "$myIP.*ESTABLISHED" ) para, por exemplo, www.google.com. Este é apenas um exemplo para mostrar como funciona. Mudar

$myIP = $allIPs[0].IPAddressToString

para o IP que você está esperando por um ping

$myIP = '192.168.1.1'

A última parte é dividir as linhas por espaços ( $_.line.split(' ' ), remover esses espaços depois ( [System.StringSplitOptions]::RemoveEmptyEntries ), remover a porta ( -replace ":.*", "" ) e salvar os resultados em suas variáveis correspondentes.

Você pode fazer o que quiser com eles. Eu apenas os ecoei com write-host $localIP $remoteIP

    
por 07.06.2014 / 17:43