Windows PowerShell имеет в своём арсенале богатые возможности для работы с сетью и не только. В Windows PowerShell, используя объекты (свойства/методы) платформы .NET, можно клепать полноценные интерактивные риложения работающие практически со всеми сетевыми протоколами стека TCP/IP: UDP, ICMP, HTTP, HTTPS, SOCKET и пр..
Проверка активности сетевого VPN подключения
Бывает нужно автоматически после входа в систему активировать сетевое подключение с последующей проверкой его активности. В Windows PowerShell такую процедуру можно реализовать в несколько строк. Логика такая - в ИП конфигурации ищем нужный нам сетевой интерфейс, а если не находим, то активируем (подключаем) его:
# Задать паузу перед выполнением #Start-Sleep -Seconds 300 # Среди сетевых интерфейсов ищем наше VPN подключение # -Quiet Возвращает не искомую строку а false | true $net = (ipconfig | Select-String "BeeVPN" -Quiet) if ("$net" -eq 'true') { #VPN подключение активно Write-Host "BeeVPN it's connected now!" } else { #VPN подключение отключено Write-Host "BeeVPN it's disconnected now!" rasdial 'BeeVPN' '0003672402' 'password' }
Потому как каждый раз, когда запускается скрипт Windows PowerShell, оболочка, подгружая нужные ей библиотеки и функции, потребляет больше системных ресурсов для выполнения той или иной команды нежели повторное выполнение команды в уже запущенной оболочке, то ещё немного извратившись можно запустить скрипт на постоянное (циклическое) его выполнение с определённым интервалом без планировщика заданий:
Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!
Этот вариант скрипта Windows PowerShell после первого запуска будет постоянно пребывать в активном состоянии, засыпая на определённый интервал времени после каждой проверки активности сетевого VPN подключения, в консоль будет выдаваться сообщение о текущем статусе сетевого VPN подключения с датой и временем последней проверки, перед каждой следующей проверкой окно консоли будет очищено от предыдущих сообщений.
Если наш провайдер раздаёт динамические IP адреса, то в блок кода который выполняется при отсутствии сетевого VPN подключения можно дописать несколько строк кода которые будут отправлять нам на почту данные о конфигурации сетевых интерфейсов, дабы в случае смены IP адреса мы без труда смогли найти свой ПК в сети Интернет.
Один из представленных выше скриптов можно добавить в планировщик с его запуском при входе в систему, например через каждые 5-ть или 10-15-ть минут.
* ПРИМЕЧАНИЕ:
При добавлении скрипта Windows PowerShell в планировщик заданий нужно перед полным путем к скрипту указать имя исполняемого скрипта Windows PowerShell: powershell.exe путь_к_файлу.ps1
TCP сканер портов, работа с сокетами в Windows PowerShell
Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!
Windows PowerShell может использовать объекты платформы .NET Framework, а поэтому если у кого есть возможность и желание, то можно написать хороший сканер портов или современный брутфорс для почты или ещё чего то там.
Проверка IP адреса для некоторого хоста (домена)
Для того, что б узнать все IP адреса для некоторого хоста, можно использовать следующий код:
$hostname = "microsoft.com" $result = [system.Net.Dns]::GetHostByName($hostname) $result.AddressList | ForEach-Object {$_.IPAddressToString} # или воспользоваться циклом если нужно проверить несколько хостов: # Массив доменных имен для проверки $name='itmag.pro','remoteshaman.com' # Сервер имен который нужно опросить # если нужно опросить системные ДНС, оставьте пустое значение $ns='ns1.server.biz' $i=0 while($i -lt $name.length) { nslookup $name[$i] $ns echo '--------------------------------------------------' $i++ }
Получение географической информации про ИП адрес
Приведённый ниже пример PowerShell скрипта предназначен для получения по ИП адресу (не имени домена) такой информации как Страна, Регион, Город, Широта, Долгота, Операционная система, Провайдер.
Если хотите получать эту же информацию но, только по имени хоста, а не ИП адресу, тогда в эту функцию нужно дописать несколько строк которые будут предварительно получать ИП адрес по имени хоста.
Function Get-GeoIp($Location="") { $webcl = New-Object System.Net.WebClient try { $struct = "" | select "IP адрес",Страна,Регион,Город,Широта, Долгота,"Операционная система",Провайдер $geop = $webcl.DownloadString("http://ip-whois.net/ip_geo.php?ip=$Location") $struct.'IP адрес' = $($geop -match "IP адрес: (.+)" | Out-Null;$matches[1]) $struct.Страна = $($geop -match "Страна: (.+)" | Out-Null;$matches[1]) $struct.Регион = $($geop -match "Регион: (.+)" | Out-Null;$matches[1]) $struct.Город,$struct.Широта = $( $geop -match "Город: (.+)" | Out-Null;$matches[1] -split '.+: ' ) $struct.Долгота = $( $geop -match "Долгота: (.+)" | Out-Null;$matches[1] ) $struct.'Операционная система' = (Get-WmiObject Win32_OperatingSystem).Name -split '\|' | Select-Object -First 1 $struct.Провайдер = $($geop -match ">Провайдер: " | Out-Null;$matches[1]) $struct } catch { "Информацию получить не удалось." } } Get-GeoIp -Location 87.250.251.3
Получение Whois информации о домене
$web = New-WebServiceProxy 'http://www.webservicex.net/whois.asmx?WSDL' $web.GetWhoIs('itmag.pro')