Работа с сетью (TCP/IP) в Windows PowerShell (примеры)

archive view archive save

PowerShell 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')

Автор: Олег Головский


Об авторе
АдМинь БагоИскатель
АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.
Ещё статьи автора

Нет комментариев

Вы можете стать первым, кто добавит комментарий к этой записи.

Добавить комментарий

АХТУНГ! Все комменты гостей модерасятся модерастом.
  1. Мессаги исключительно рекламного содержания, либо содержащие только одни оценочные суждения типа "круто" ("отлично", "спасибо", "автор дебил" и т.п.) не публикуются;
  2. Злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах!;
  3. Разумная обоснованная критика, замечания, дополнения приветствуются. Поля помеченные символом * обязательны к заполнению.


Защитный код
Обновить

Комментарии в блоге
Новое на форуме