Экспорт списка клиентов из координатора ViPNet HW1000
Компания Infotecs не предусмотрела возможность вытащить список клиентов с данными о них из своих координаторов ViPNet Coordinator HW1000 и HW2000. Я придумал способ и сейчас им с вами поделюсь.
Все, у кого есть такое средство криптографической защиты информации, должны знать как управлять данным программно-аппаратным комплексом при помощи Putty, так как множество настроек можно сделать только подключив Монитор и клавиатуру к нему или подключившись по SSH.
И так, открываем Putty и до подключения необходимо указать настройки логирования. Открываем вкладку Logging и в Session output ставим All session output. Возможно при использовании Printable output будет меньше мусора в логе, не пробовал. Нажимаем на кнопку Browse и указываем куда сохранить лог. Имя файла оставьте по умолчанию "putty.log".
После настройки логирования подключаемся к координатору, вводим логин и пароль. Права администратора не нужны.
Пишем команду:
iplir show config
и листаем конфиг до самого конца при помощи кнопки PageDown.
Для закрытия режима чтения конфига нажимаем кнопку Q на английской раскладке. И потом закрываем терминал - exit.
Теперь советую установить Notepad++, один из самых популярных текстовых редакторов в мире.
Файл putty.log открываем при помощи Notepad++. Открываем вкладку кодировки \ кодировки \ кириллица \ KOI8-R. Потом опять открываем вкладку кодировки Преобразовать в UTF-8.
Теперь нужно очистить конфиг от мусора. В Notepad++ есть функция поиска с заменой - Поиск \ Замена. Можно выделить мусор (он будет повторяться) и нажать CTRL+ F и перейти во вкладку Замена. Также поставьте галочку Зациклить поиск, а остальные три наоборот снимите. И можно нажать кнопку Заменить все.
Я далее покажу свой скрипт, но необходимо установить Python, он бесплатен, я использовал версию 3.8.10.
Теперь сам скрипт:
# -*- coding: utf-8 -*-
filename = 'putty.log'
f = open(filename, 'r', encoding='utf-8')
d = open('1.csv', 'w', encoding='utf-8')
starttxt = 'name ;ip ;firewallip ;virtualip ;version ;tunnel \n'
upN = 0 #количество строк
sCh = 0 #счетчик - текушая строка
for l in f: #считаем количество строк в документе
upN += 1
f.close()
f = open(filename, 'r', encoding='utf-8')
piska = []
d.write(starttxt)
h = ''
slovar = {}
for line in f: #анализиуем текстовый файл
if '[adapter]' in line:
break
sCh += 1
if '[id]' in line:
slovar = {}
line = line.replace("\n", "")
# if 'id=' in line:
# if not 'proxyid' in line:
# line = line.replace("id= ", "")
# slovar['id'] = line
if 'name=' in line:
line = line.replace("name= ", "")
slovar['name'] = line
if 'ip=' in line:
if not 'virtualip' in line:
if not 'accessip' in line:
if not 'accessiplist' in line:
if not 'firewallip' in line:
line = line.replace("ip= ", "")
slovar['ip'] = line
if 'tunnel=' in line:
line = line.replace("tunnel= ", "")
try:
slovar['tunnel'] = line + ', ' + slovar['tunnel']
except:
slovar['tunnel'] = line
if 'firewallip=' in line:
line = line.replace("firewallip= ", "")
slovar['firewallip'] = line
if 'virtualip=' in line:
line = line.replace("virtualip= ", "")
slovar['virtualip'] = line
if 'version=' in line:
line = line.replace("version= ", "")
slovar['version'] = line
try:
if slovar['tunnel'] == None:
slovar['tunnel'] = 'Пусто'
except:
slovar['tunnel'] = 'Пусто'
try:
if slovar['firewallip'] == None:
slovar['firewallip'] = 'Пусто'
except:
slovar['firewallip'] = 'Пусто'
try:
if slovar['version'] == None:
slovar['version'] = 'Пусто'
except:
slovar['version'] = 'Пусто'
try:
if slovar['virtualip'] == None:
slovar['virtualip'] = 'Пусто'
except:
slovar['virtualip'] = 'Пусто'
if not slovar == None:
piska.append(slovar)
x = (sCh / upN ) * 100
print('Анализирую конфиг: ' + str(int(x)) + '%')
dubli = []
sCh = 0
print('Записываю данные в файл')
for stroka in piska: #записываем данные в CSV
sCh += 1
x = (sCh / upN ) * 100
print('Записываю данные в файл: ' + str(int(x)) + '%')
try:
StrokaName = stroka['name']
except:
continue
try:
Strokafirewallip = stroka['firewallip']
except:
Strokafirewallip = 'Пусто'
try:
Strokavirtualip = stroka['virtualip']
except:
Strokavirtualip = 'Пусто'
try:
Strokaversion = stroka['version']
except:
Strokaversion = 'Пусто'
try:
Strokatunnel = stroka['tunnel']
except:
Strokatunnel = 'Пусто'
if not StrokaName in dubli:
g = StrokaName + ';' + stroka['ip']
g = g + ';' + Strokafirewallip
g = g + ';' + Strokavirtualip
g = g + ';' + Strokaversion
g = g + ';' + Strokatunnel + '\n'
d.write(g)
dubli.append(StrokaName)
d.close()
f.close()
print('Я закончил!')
Данный скрипт можно при помощи Notepad++ или обычного блокнота сохранить в script.py, имя может быть любым, главное, чтобы сохранилось расширение py.
На выходе будет 1.csv, который будет сохранен в папке со скриптом. Это еще не готовый продукт.
Открываем Microsoft Excel, далее пишу по памяти, вкладка данные и там из текста или импорт из текста. Он определит всё правильно по умолчанию, только нужно проконтролировать, чтобы стояла галочка с фиксированными разделителями или просто с разделителя, и выбираем в качестве разделителя ; (точка с запятой).
И всё, там будет таблица со всеми клиентами, включая координаторы. В ней будут поля:
- name (имя);
- ip;
- firewallip;
- virtualip;
- version (версия ViPNet Client);
- tunnel.
Вы сможете узнать реальный и виртуальный IP, при кривых настройках некоторых координаторов реальный IP может проскальзывать через firewallip. Туннели тоже могут быть полезны, как и версия ViPNet.