Пакетный захват входящих IP-адресов Netstat как переменных

1018
user23412

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

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

1
Вы пытались перенаправить вывод netstat в текстовый файл, например: `netstat> log.txt`? Doktoro Reichard 9 лет назад 0
Это [сценарий PowerShell] (http://www.kennethghartman.com/log-connections-powershell-script/) от Шей Леви что-то для вас? nixda 9 лет назад 0
В настоящее время я передаю результаты в файл .txt, и я рассмотрю скрипт powershell. Спасибо user23412 9 лет назад 0

2 ответа на вопрос

0
barlop

если у вас есть текстовый файл с IP-адресами, и вы просто хотите получить IP-адреса, то netstat становится неактуальным.

получите grep от gnuwin32 и правильное регулярное выражение. Это сделает это

C:\blah>grep -oP (\d\.)\d filewithips 

попробуйте arp -a>myfileили netstat -aon> a, тогда у вас есть файл IP-адресов среди другой информации, и вы просто хотите, чтобы IP-адреса теперь выполняли команду grep, которую я дал вам, и вы получаете только IP-адреса

или это

C:\>netstat -aon | grep -oP (\d\.)\d 

выведет список IP-адресов

Вы можете запустить цикл for, просто читая каждую строку в переменную

тогда речь идет не о чтении IP-адресов, а о чтении строк файла.

0
nixda

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

это выглядит очень круто, хотя powershell не является пакетным ... также, что касается netstat -n каждые две секунды ... Я хотел бы отметить, что существует программный MS 'port reporter', который похож на непрерывный протоколированный netstat, хотя ms port reporter обращается к только делать TCP barlop 9 лет назад 0