Пакетный захват входящих IP-адресов Netstat как переменных
Я пытаюсь выяснить, есть ли способ, которым я могу захватить (и, если возможно, зарегистрировать) IP-адреса, отображаемые командой netstat. Я пытаюсь сделать сценарий, который ожидает пинг с определенного хоста. Есть ли способ записать эту информацию в работоспособную переменную, чем я могу использовать в сценарии? Я перенес выходные данные в текстовый файл, но я все еще не понимаю, как можно захватить IP-адреса из текстового файла в переменные.
заранее спасибо
2 ответа
Если у вас есть текстовый файл с IP-адресами, и вы просто хотите получить IP-адреса, то netstat становится неактуальным.
получите grep от gnuwin32 и правильное регулярное выражение. Это сделает это
C:\blah>grep -oP (\d{1,3}\.){1,3}\d{1,3} filewithips
пытаться arp -a>myfile
или netstat -aon>a, тогда у вас есть файл IP-адресов среди другой информации, и вы просто хотите, чтобы IP-адреса теперь выполняли команду grep, которую я дал вам, и вы получаете только IP-адреса
или это
C:\>netstat -aon | grep -oP (\d{1,3}\.){1,3}\d{1,3}
выведет список IP-адресов
Вы можете запустить цикл for, просто читая каждую строку в переменную
тогда речь идет не о чтении IP-адресов, а о чтении строк файла.
Этот скрипт демонстрирует, как сохранить netstat
выходные IP-адреса в переменные в PowerShell
Просто запустите скрипт в PowerShell ISE, откройте новый браузер, зайдите на www.google.com и посмотрите, что происходит.
$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
}
После запуска он запрашивает все соединения с netstat -n
каждые 2 секунды (while ($true)
вместе с sleep 2
).
Чтобы ускорить netstat, -n
(числовой) является наиболее важным параметром, поскольку поиск DNS не производится. Вы можете прочитать больше о других параметрах, таких как -a
а также -o
в Technet
Далее PowerShell фильтрует только установленные соединения (select-string "$myIP.*ESTABLISHED"
) например, www.google.com. Это просто пример, чтобы показать, как это работает. + Изменить
$myIP = $allIPs[0].IPAddressToString
на IP-адрес которого вы ожидаете пинг
$myIP = '192.168.1.1'
Последняя часть состоит в том, чтобы разбить строки на пробелы ($_.line.split(' '
), удалите эти пробелы впоследствии ([System.StringSplitOptions]::RemoveEmptyEntries
), удалите порт (-replace ":.*", ""
) и сохраните результаты в соответствующих переменных.
Вы можете делать с ними все, что захотите. Я просто повторил их write-host $localIP $remoteIP