Отчет по подключениям VPN
И так, предположим, что у нас есть OpenVPN и система, которая снимает отчеты. Наша задача, получив внешний ip-адрес клиента произвести его соответствие стране. Грубо говоря, берем каждый ip-адрес из отчета и проверяем его.
Конечно же мы будем использовать Python со следующими библиотеками:
- pysyge — Python библиотека для доступа к базе Sypex Geo IP.
- openpyxl — Python библиотека для работы (чтение/запись) с документами формата xlsx/xlsm/xltx/xltm.
- pyTelegramBotAPI — Python библиотека для создания бота.
Так выглядит наш отчет о подключениях, из которого мы будем брать ip адрес и проверять его по базе — SxGeoCityMax.dat.
И так сам скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#!/usr/bin/python3 from pysyge import GeoLocator import openpyxl import telebot import pandas as pd import os import glob import time token = 'TOKEN_-_BOT_-_ID' bot = telebot.TeleBot(token) chat_id = 'CHAT_-_ID' excelbase = '/tmp/*.xlsx' path = os.getcwd() csv_files = glob.glob(os.path.join(path, "*.xlsx")) for f in csv_files: df = pd.read_excel(f) csv_files = f.split("\\")[-1] wb = openpyxl.load_workbook(csv_files) geodata = GeoLocator('SxGeoCityMax.dat') sheet = wb.active weltext = "\U0001F916 Доброе утро. \n" bot.send_message(chat_id, weltext) rows = sheet.max_row for i in range(3, rows + 1): colsip = sheet.cell(row=i, column=4).value location = geodata.get_location(colsip, detailed=True) if (location['info']['country']['name_ru'] != 'Россия'): fio = sheet.cell(row=i, column=2).value ipadd = sheet.cell(row=i, column=4).value whereayf = location['info']['country']['name_ru'] textmess = "С адреса " + ipadd + " из страны " + whereayf + " подключался " + fio bot.send_message(chat_id, textmess) time.sleep(1.5) print(sheet.cell(row=i, column=2).value, ';', sheet.cell(row=i, column=4).value, ';', location['info']['country']['name_ru']) print('Просчет закончен!') os.remove(csv_files) |
IP-адрес сверяется с базой и если адрес не относится к России, то производится отправка сообщения с указанием кто и откуда подключался.
В данном примере нужна будет база данных Sypex Geo IP, которую можно приобрести у правообладателя или поискать старую на GitHub. В обоих случаях пример будет рабочим, поэтому не стоит расстраиваться. 🙂