MikroTik Winbox парсинг CDB
Парсинг CDB-файла MikroTik с помощью PowerShell
В этой статье мы рассмотрим, как извлечь все текстовые строки из бинарного CDB-файла MikroTik и вывести их таблично по 5 колонок без фильтров и ограничений.
Что такое CDB-файл и зачем его парсить?
CDB-файлы — это бинарные базы данных, используемые MikroTik для хранения настроек и резервных копий. Часто в них можно найти полезные данные, включая логины, пароли и адреса, но они хранятся в бинарном виде.
Задача
- Считать файл как бинарные данные
- Извлечь из них все ASCII-строки длиной 3 и более символов
- Вывести строки в виде таблицы с 5 колонками
PowerShell-скрипт с комментариями
# Путь к файлу CDB
$filePath = "C:\Users\User\Desktop\backup.cdb"
# Читаем весь файл как массив байт
$fileBytes = [System.IO.File]::ReadAllBytes($filePath)
# Функция для извлечения ASCII-строк минимальной длины из массива байт
function Get-AsciiStrings {
param([byte[]]$bytes, [int]$minLength = 3)
$chars = @() # Временный массив символов текущей строки
$results = @() # Массив всех найденных строк
foreach ($b in $bytes) {
# Проверяем, что байт — печатный ASCII символ (код от 32 до 126)
if ($b -ge 32 -and $b -le 126) {
$chars += [char]$b # Добавляем символ в текущую строку
} else {
# Если встретился непечатный символ и длина текущей строки >= minLength,
# добавляем её в результаты
if ($chars.Count -ge $minLength) {
$results += -join $chars
}
$chars = @() # Сбрасываем временный массив для следующей строки
}
}
# Обработка остатка после окончания цикла
if ($chars.Count -ge $minLength) {
$results += -join $chars
}
return $results
}
# Извлекаем все ASCII строки из файла
$strings = Get-AsciiStrings -bytes $fileBytes -minLength 3
# Количество колонок для вывода
$columns = 5
$rows = @()
# Формируем объекты с динамическими колонками для вывода
for ($i = 0; $i -lt $strings.Count; $i += $columns) {
# Берём срез из $columns элементов (если меньше — берём остаток)
$rowItems = $strings[$i..([Math]::Min($i + $columns - 1, $strings.Count - 1))]
$obj = [PSCustomObject]@{}
for ($j = 0; $j -lt $rowItems.Count; $j++) {
$colName = "Column$($j + 1)" # Имена колонок: Column1, Column2 и т.д.
$obj | Add-Member -NotePropertyName $colName -NotePropertyValue $rowItems[$j]
}
$rows += $obj
}
# Выводим таблицу с автоматическим подбором ширины колонок
$rows | Format-Table -AutoSize
Как это работает
- Читаем файл как последовательность байт
- Ищем подряд идущие ASCII-символы длиной 3 и более, формируем из них строки
- Группируем полученные строки по 5 штук и формируем строки таблицы
- Выводим результат в табличном виде — удобно просматривать много строк подряд
Применение
Этот скрипт полезен для быстрого анализа содержимого CDB-файла MikroTik, когда нужно просто увидеть все текстовые данные подряд, без дополнительной фильтрации и поиска.
Можно легко менять число колонок, задав переменную $columns — например, 3, 4, 6 и так далее.