Sto cercando di capire se c'è un modo per catturare (e se ansible, registrare) gli indirizzi IP visualizzati dal command 'netstat'. Sto provando a fare uno script che aspetta un ping da un host specifico. C'è un modo per catturare queste informazioni in variables funzionabili di quelle che posso utilizzare in uno script? Ho condotto l'output in un file di text, ma non riesco ancora a comprendere alcun modo per andare a catturare l'IP dal file di text in variables
Grazie in anticipo
se si dispone di un file di text con IP e si desidera solo gli IP, allora netstat diventa irrilevante.
get grep da gnuwin32 e la giusta regex. Questo lo farà
C:\blah>grep -oP (\d{1,3}\.){1,3}\d{1,3} filewithips
provare arp -a>myfile
o netstat -aon> a allora hai un file di IP tra altre informazioni e vuoi solo che i comandi ora eseguano quel command grep che ti ho dato e che hai solo IP
o questo
C:\>netstat -aon | grep -oP (\d{1,3}\.){1,3}\d{1,3}
emetterà un elenco di IP
Potresti eseguire un ciclo per che solo leggendo each row in una variabile
allora non è una questione di leggere IP che legge le righe di un file.
Questo script illustra come salvare gli output IP di netstat
in variables all'interno di PowerShell
Basta eseguire lo script in PowerShell ISE, aprire un nuovo browser, visitare il sito http://www.google.com e vedere cosa succede.
$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 }
Una volta iniziato, interroga tutte le connessioni con netstat -n
each 2 secondi ( while ($true)
insieme al sleep 2
).
Per velocizzare il netstat, il parametro -n
(numbersco) è il parametro più importnte in quanto non vengono eseguite ricerche DNS. È ansible leggere di più su altri parametri come -a
e -o
a Technet
Successivamente, PowerShell filtra solo le connessioni stabilite ( select-string "$myIP.*ESTABLISHED"
) ad esempio http://www.google.com. Questo è solo un esempio per mostrare come funziona. Modificare
$myIP = $allIPs[0].IPAddressToString
al IP che stai aspettando un ping
$myIP = '192.168.1.1'
L'ultima parte è dividere le righe da spazi ( $_.line.split(' '
), rimuoverli successivamente ( [System.StringSplitOptions]::RemoveEmptyEntries
), rimuovere la port ( -replace ":.*", ""
) e salvare i risultati alle rispettive variables.
Puoi fare quello che vuoi con loro. Li ho appena echeggiati con write-host $localIP $remoteIP