Это не мое. Использовались python и php скрипты c
http://forum.nag.ru/forum/index.php?showtopic=80677
Для корректной работы их пришлось немного модифицировать.
Задачи:
- Получить с сайта реестра запрещенных ресурсов выгрузку в формате xml
- Сделать парсинг — извлечь ip и url адреса из файла выгрузки
- Закинуть это на маршрутизатор mikrotik
1. Для получения будем использовать python-скрипты от автора Pavel Yegorov
zapretinfo.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__version__ = «0.0.4»
__author__ = «Pavel Yegorov»
import suds
from base64 import b64encode
#API_URL = «http://www.zapret-info.gov.ru/services/OperatorRequest/?wsdl»
API_URL = «http://vigruzki.rkn.gov.ru/services/OperatorRequest/?wsdl»
В нем мы изменили api_url на новый.
zapret_checker.py
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
# yegorov-p.ru
from xml.etree.ElementTree import ElementTree
from datetime import datetime,timedelta
from zapretinfo import ZapretInfo
import time
import zipfile
from base64 import b64decode
XML_FILE_NAME = «/data/reestr/request.xml»
P7S_FILE_NAME = «/data/reestr/request.xml.sig»
Где XML_FILE_NAME и P7S_FILE_NAME файл запроса и файл запроса, подписанный цифровой подписью. Последний может иметь расширения sign, sig, p7s.
Файл запроса должен быть в формате cp1251.
<?xml version=»1.0″ encoding=»windows-1251″?>
<request>
<requestTime>2012-10-01T01:01:01.000+04:00</requestTime>
<operatorName>имя оператора</operatorName>
<inn>ИНН оператора</inn>
<ogrn>ОГРН оператора</ogrn>
<email>обратная связь</email>
</request>
Как пишут на http://habrahabr.ru/sandbox/51575/ реально проверяются только ИНН и ОГРН. Я убедился, что можно сколь угодно раз посылать эти два файла и получать выгрузку. Хотя по идее, они должны сверять дату.
Файл провайдер подписывал в Крипто-ПРО. Ее можно установить в пробном режиме на 30 дней. Можно каждый раз создавать новый файл запроса (в вышеуказанных ссылках в скриптах он генерируется) и подписывать через openssl, как, например, здесь http://blog.timba.org.ua/post/1896.
Чтобы скрипт работал, должен быть установлен python2.6 или 2.7 (в версии 3 скрипт не работает. Я тестировал на 2.7) и модуль suds
Python2.7 ставим из портов
cd /usr/ports/lang/python27
make install clean
Модуль suds тоже из портов
cd /usr/ports/net/py-suds
make install clean
или вручную http://www.py-my.ru/post/4e818bd81d41c821a9000003#!
wget https://fedorahosted.org/releases/s/u/suds/python-suds-0.4.tar.gz
tar -xzf python-suds-0.4.tar.gz
cd python-suds-0.4/
python setup.py build
sudo python setup.py install
Присвоим скрипту права на выполнение и запускаем скрипт
chmod +x zapret_checker.py
./zapret_checker.py
В итоге сразу же отобразится идентификатор запроса, через некоторое время (7-10 минут) после фраз «Try it now…» появится фраза «Got in!», что означает, что дамп реестра получен. Этот файл называется dump.xml.
2. Теперь перейдем к парсингу и закидыванию адресов в mikrotik.
В версии скрипта для php есть способ закидывания ip и url в базу данных mysql. Также этот скрипт может подписывать и генерировать xml запрос, кидать его на сайт Роскомнадзора и получать ту же выгрузку. Так как я не сильно силен в php и python, скрипт php почему-то не пошел. Поэтому я убрал из него ненужные функции и оставил только закидывание в БД и на микротик. По сути, в начало скрипта я добавил
exec(‘ssh login@ip /ip firewall address remove [find list=blocklist]’);
Этим мы очистим blocklist. О нем расскажу позже. И в конец файла в цикл работы с базой данных добавляем
exec(«ssh login@ip /ip firewall address-list add list=blocklist address=’$ips'»);
Также вводим параметры подключения к БД
$db = Database::obtain
(
‘127.0.0.1’,
‘login’,
‘password’,
‘rzs’
);
‘rzs‘ — имя базы данных. Ее необходимо предварительно создать и подготовить. В ней два поля: ip и url. Первое поле тип INT, второе TEXT.
Присвоим скрипту права на выполнение и запускаем скрипт
chmod +x parser.php
./parser.php
3. Немного о маршрутизаторе Mikrotik. Для начала необходимо добавить в него логин без пароля и предоставить этому логину доступ к ssh с ip сервера, на котором лежат скрипты. После этого с сервера необходимо один раз подключиться по ssh к Mikrotik, чтобы сервер запомнил ключи ssh. Я осуществил блокировку через access-list, хотя в интернете есть реализация под layer 7, но там вся процедура получения,парсинга и закидывания на Mikrotik описана на языке С.
Закидываем скрипты в cron.
crontab -e
Добавляем
45 9 * * * root cd /data/reestr/; /data/reestr/zapret_checker.py
0 10 * * * root cd /data/reestr/; /data/reestr/parser.php
Между скриптами 15 минутный перерыв, так как между запросом и выгрузкой необходимо подождать несколько минут.
Все скрипты в архиве…reestr_mikrotik
UPD: Вышло обновление статьи. Читать Выгрузка реестра запрещенных ресурсов на Mikrotik через сервер с FreeBSD. 2.0
Октябрь 17, 2013 в 03:19
после выполнение скрипта zapret_checker.py выходит следующее: (Win7)
F:\Windows\system32>F:\Python27\python.exe F:\zapret_checker.py
Got code 877c995fbc8fa900014daf8919dec7dc
Trying to get result…
Not ready yet.
Not ready yet.
Got it!
Traceback (most recent call last):
File «F:\zapret_checker.py», line 45, in
file = open(‘result.zip’, «wb»)
IOError: [Errno 13] Permission denied: ‘result.zip’
Январь 16, 2014 в 10:06
необходимо адаптировать скрипт под windows. У вас не хватает прав на доступ к файлу result.zip. Проверьте, есть ли запись в папку, куда он будет сбрасываться
Октябрь 25, 2013 в 10:25
При запуске zapret_checker.py получаю следующее:
./zapret_checker.py
Traceback (most recent call last):
File «./zapret_checker.py», line 29, in
request=opener.sendRequest(XML_FILE_NAME,P7S_FILE_NAME)
File «/usr/scripts/EP/zapretinfo.py», line 19, in sendRequest
file = open(requestFile, «rb»)
IOError: [Errno 2] No such file or directory: ‘/usr/scripts/EP/req.xml’
Все файлы лежат в одной директории. Пути прописаны в файле zapret_checker.py, сайт на который надо обращаться указан как он сейчас реально есть, файл подписи переименован, как рекомендовано.
Что у меня не так?
Январь 16, 2014 в 10:13
проверьте права на доступ к файлу. И проверьте все же путь к нему. Большие буквы в названиях каталога должны быть большими, маленькие-маленькими
Октябрь 25, 2013 в 11:49
Подправил найденные ошибки и ..теперь получаю такое:
# ./zapret_checker.py
Got code ffa04280ac726c687e839ef87a64b09f
Trying to get result…
Error: пЇп╟п©я─п╬я│ п╬п╠я─п╟п╠п╟я┌я▀п╡п╟п╣я┌я│я▐
#
Что тут написано….?
Прбовал в перекодировщике. Не помогло… (((
Январь 16, 2014 в 10:10
это осталось с оригинальных скриптов. Оригинальные скрипты написаны в непонятной кодировке. Попробуйте открыть в текстовом редакторе nLite И пересохранить в нужную кодировку
Октябрь 25, 2013 в 12:06
Перевел.. Это «Запрос обрабатывается»
а сколько ждать то?
прождал более получаса и ничего не приехало. Что упустил я?
Октябрь 29, 2013 в 12:00
Спасибо за статью, реально пригодилась!
Ноябрь 26, 2013 в 11:20
Пытаюсь запустить скрипт но выдается ошибка
Traceback (most recent call last):
File «./zapret_checker.py», line 29, in
request=opener.sendRequest(XML_FILE_NAME,P7S_FILE_NAME)
File «/home/userbilli/vigruzka/zapretinfo.py», line 32, in sendRequest
sert = b64encode(sert)
UnboundLocalError: local variable ‘sert’ referenced before assignment
На что обратить внимание?
Январь 16, 2014 в 10:05
не находит подписанного файла и файла в формате xml, сделанного по образцу на сайте реестра
Декабрь 4, 2013 в 07:52
Пробовал выше указанный скрипт. Коенчно установил питона и судс.
Однако получаю в ответ:
Есть код 5cd47b9a67f5ec729a450a2a7daddcf7
Попытка получить результат
Ошибка-1: Запрос обрабатывается.
и всё.
Что может быть причиной такого ответа?
Январь 16, 2014 в 10:14
видимо, сайту реестра не нравится или подписанный файл или xml файл
Декабрь 4, 2013 в 09:52
это мой косяк.Со скриптом все нормально.
Июль 19, 2014 в 08:12
Плохо, что я не знаю Питон((( У меня такой ответ, и не знаю что с этим делать((
Traceback (most recent call last):
File «./zapret_checker.py», line 6, in
from zapretinfo import ZapretInfo
ImportError: cannot import name ZapretInfo
Апрель 25, 2016 в 09:06
Не находит файл zapretinfo.py .Его необходимо разместить в одном каталоге вместе с zapret_checker.py