PowerShell для мереж
PowerShell – це скриптова мова та оболонка командного рядка, яка входить до складу операційної системи Windows. Вона дає можливість автоматизувати адміністративні завдання та створювати скрипти для взаємодії з різними службами та додатками.
Для моніторингу сканування мережі в PowerShell можна використовувати наступні скрипти:
- Сканування портів на віддаленому комп’ютері:
$ipaddress = Read-Host "Enter IP address or Hostname"
$port = Read-Host "Enter Port Number"
$socket = New-Object System.Net.Sockets.TcpClient
$socket.Connect($ipaddress, $port)
Write-Host "Port $port on $ipaddress is open."
$socket.Close()
2. Пошук відкритих портів на всіх комп’ютерах в мережі:
$iprange = "192.168.1."
for ($i=1; $i -lt 255; $i++) {
$ip = $iprange+$i
for ($port=1; $port -le 1024; $port++) {
$socket = New-Object System.Net.Sockets.TcpClient
$socket.Connect($ip, $port)
if($socket.Connected) {
Write-Host "Port $port on $ip is open."
}
$socket.Close()
}
}
3. Пошук активних комп’ютерів в мережі:
$iprange = "192.168.1."
for ($i=1; $i -lt 255; $i++) {
$ip = $iprange+$i
if(Test-Connection $ip -Count 1 -Quiet) {
Write-Host "$ip is online."
}
}
Отримання списку підключених пристроїв: цей скрипт використовує Get-NetNeighbor для отримання списку підключених пристроїв у мережі.
$ip = "192.168.0."
for ($i=1; $i -le 255; $i++)
{
$addr = $ip + $i
$result = Test-Connection $addr -Quiet -Count 1
if ($result -eq $True)
{
$neighbor = Get-NetNeighbor -Address $addr
if ($neighbor -ne $null)
{
Write-Host "Device Name: $($neighbor.ComputerName), IP Address: $($neighbor.IPv4Address)"
}
}
}
самий простий скрипт та видає результат вигляді таблиці:
$neighbors = Get-NetNeighbor -AddressFamily IPv4
$neighbors | Out-GridView -Title "Network Neighbors"
от такий буде результат роботи
ще варіанти (зберігаю для себе щоб протестувати та вибрати найкращий)
# Отримуємо список сусідів мережі
$neighbors = Get-NetNeighbor
# Виводимо результат в вікно з таблицею
$neighbors | Out-GridView
Цей скрипт запитає користувача про початкову адресу для сканування, а потім виведе результат у вигляді таблиці, якщо є пристрої в мережі, або повідомлення “Немає пристроїв в мережі”, якщо результату немає.
# Запит користувача для введення початкової адреси
$startAddress = Read-Host "Введіть початкову адресу для сканування"
# Отримати всі пристрої в мережі
$neighbors = Get-NetNeighbor -IPAddress $startAddress/24
# Перевірити чи є результати
if ($neighbors.Count -eq 0) {
Write-Host "Немає пристроїв в мережі"
} else {
# Створити порожній масив для збереження результатів
$results = @()
# Проітерувати всі пристрої та додати інформацію в масив результатів
foreach ($neighbor in $neighbors) {
$result = New-Object -TypeName PSObject
$result | Add-Member -MemberType NoteProperty -Name "IP Address" -Value $neighbor.IPAddress
$result | Add-Member -MemberType NoteProperty -Name "MAC Address" -Value $neighbor.MACAddress
$result | Add-Member -MemberType NoteProperty -Name "Interface Index" -Value $neighbor.InterfaceIndex
$results += $result
}
# Вивести результат у вигляді таблиці
$results | Format-Table -AutoSize
}
Для перебору всіх доступних локальних мереж і знаходження активних пристроїв можна використовувати скрипт на PowerShell з використанням бібліотеки Nmap.
Можливо потрібно вручну встановити бібліотеку Nmap. Завантажити з офіційного сайта: Download the Free Nmap Security Scanner for Linux/Mac/Windows
Цей скрипт встановлює бібліотеку Nmap за допомогою команди Install-Module
, задає діапазон IP-адресів для сканування, виконує сканування мережі за допомогою команди Get-NmapHost
, перебирає всі знайдені пристрої і виводить інформацію про активні з них. Якщо жодного активного пристрою не знайдено, виводиться відповідне повідомлення.
# Встановлюємо бібліотеку Nmap
Install-Module -Name Nmap
# Задаємо діапазон IP-адрес для сканування
$subnet = "192.168.0.0/24"
# Виконуємо сканування мережі та зберігаємо результат в змінну
$nmapResults = Get-NmapHost -Target $subnet
# Перебираємо всі пристрої, що були знайдені
foreach ($host in $nmapResults) {
# Якщо пристрій активний, виводимо інформацію про нього
if ($host.Status -eq "Up") {
Write-Host "IP: $($host.Address), Hostname: $($host.Hostname), Vendor: $($host.Vendor), OS: $($host.OS.Name)"
}
}
# Якщо жодного активного пристрою не знайдено, виводимо відповідне повідомлення
if ($nmapResults.Count -eq 0) {
Write-Host "Немає активних пристроїв у мережі."
}
Ці скрипти можна зберегти у файл з розширенням .ps1 та запустити з командного рядка PowerShell. Для запуску скрипту необхідно відкрити PowerShell з правами адміністратора та виконати команду Set-ExecutionPolicy RemoteSigned
, щоб дозволити виконання скриптів з файлів, які не були підписані цифровим підписом. Після цього можна запустити скрипти командою .\scriptname.ps1
.