1

Я пытаюсь выяснить, есть ли способ, которым я могу захватить (и, если возможно, зарегистрировать) IP-адреса, отображаемые командой netstat. Я пытаюсь сделать сценарий, который ожидает пинг с определенного хоста. Есть ли способ записать эту информацию в работоспособную переменную, чем я могу использовать в сценарии? Я перенес выходные данные в текстовый файл, но я все еще не понимаю, как можно захватить IP-адреса из текстового файла в переменные.

заранее спасибо

2 ответа2

0

если у вас есть текстовый файл с 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-адресов, а о чтении строк файла.

0

Этот скрипт демонстрирует, как сохранить выходные IP-адреса netstat в переменных в 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .