LINUX.ORG.RU

zicsv и zicsv-tool v0.1.0

 , ,


3

3

Как известно, распространение списков блокировок Роскомнадзора официально запрещено за пределами провайдеров. Но нашлись добрые люди, которые создали проект Zapret-Info и регулярно выкладывают свежие выгрузки реестра заблокированных адресов.

К сожалению, дампы выгрузок выкладываются в неудобном для использования формате (CSV, CP1251, иногда содержит ошибки). Для разбора этого формата была написана библиотека zicsv, позволяющая поточно читать дамп. На основе этой библиотеки разработана утилита командной строки zicsv-tool, с помощтю которой можно:

  • конвертировать дамп в гораздо более читабельный JSON;
  • выводить определённые типы заблокированных адресов (например только подсети) простым списком;
  • и искать адреса в списке заблокированных.

Вот так выглядит пример работы функции поиска адресов:

$ zicsv-tool -i dump.csv search "http://google.com"
http://google.com:
    http://google.com/: not found

    google.com: not found

    74.125.205.100: blocked
        IPv4 address is equal to blocked IPv4 address:
            Blocked: 74.125.205.100
            Organization: Генпрокуратура
            Document ID: 27-31-2018/Ид2971-18
            Document date: 2018-04-16

    74.125.205.138: not found

    74.125.205.102: blocked
        IPv4 address is equal to blocked IPv4 address:
            Blocked: 74.125.205.102
            Organization: Генпрокуратура
            Document ID: 27-31-2018/Ид2971-18
            Document date: 2018-04-16

    74.125.205.113: blocked
        IPv4 address is equal to blocked IPv4 address:
            Blocked: 74.125.205.113
            Organization: Генпрокуратура
            Document ID: 27-31-2018/Ид2971-18
            Document date: 2018-04-16

    74.125.205.139: not found

    74.125.205.101: blocked
        IPv4 address is equal to blocked IPv4 address:
            Blocked: 74.125.205.101
            Organization: Генпрокуратура
            Document ID: 27-31-2018/Ид2971-18
            Document date: 2018-04-16

>>> Краткая инструкция по установке и использованию.

>>> Репозиторий на гитхабе

★★★★★

Проверено: jollheef ()
  • Патчи и багрепорты приветствуются.
  • Пример с http://google.com не всегда работает одинаково из-за того, что разные DNS-серверы выдают разные адреса для google.com. Некоторые серверы выдают разные ответы на каждый запрос.
  • Доменные имена из самого дампа не ресолвятся.
  • Демон, который бы периодически скачивал дамп, ресолвил оттуда всё, что возможно, и запихивал результат куда-нибудь в ipset, уже в процессе написания...
mironov_ivan ★★★★★ ()
Последнее исправление: mironov_ivan (всего исправлений: 1)

гораздо более читабельный JSON

На мой взгляд - спорное утверждение. Не думаю, что добавление фигурных скобок к запятым добавляет читабельности.

Возможно YAML (примерно как в выхлопе в Вашем примере) был бы более читабельным.

Добавлено: Может заменить «читабельный» на «юзабельный»? Тогда вполне соглашусь.

MumiyTroll ★★ ()
Последнее исправление: MumiyTroll (всего исправлений: 2)

написал бы кратко, что с этим растом делать.
не все хипсторы врожденные.

mos ★★★★★ ()
Ответ на: комментарий от mos

Загрузи в опенофисс и выставь кодировку - cp1251. А вот что дальше делать ? Х.з.

По идее нужно писать рпс-сервис и плагин к фф что бы если есть обращение к этому адресу - всплывал баннер какой то ... опять же не понятно зачем :(

mx__ ★★★★ ()
Последнее исправление: mx__ (всего исправлений: 1)
Ответ на: комментарий от MumiyTroll

Видимо имелось в виду машиночитаемый. Глазами-то читать эту партянку в любом случае странная идея

MrClon ★★★★★ ()

Диссидентство на главной.
Не думал, что когда-либо такое увижу.

Когда счёт идёт на полмиллиона адресов, не проще ли держать вайт-лист адресов, на которые трафик роутить не через vpn?

aidaho ★★★★★ ()
Ответ на: комментарий от MrClon

Видимо имелось в виду машиночитаемый.

Именно поэтому я и предложил заменить «читабельный» на «юзабельный»

MumiyTroll ★★ ()

Но нашлись добрые люди

...и этих прикроют... :(

EternalNewbie ()
Ответ на: комментарий от aidaho

Не нашел там полмиллиона. Опятьже, по моему, вариант с dnsmasq, который динамически по моменту обращения клиента ресолвит домен и добавляет его адрес в ipset сводит всю эту таблицу до нескольких тысяч адресов.

AVL2 ★★★★★ ()

гораздо более читабельный JSON;

Бендер, это ты?

AVL2 ★★★★★ ()

В какой вселенной json более удобен для чтения, чем csv для табличных данных?

Im_not_a_robot ★★★ ()

К сожалению, дампы … иногда содержит ошибки.
утилита командной строки zicsv-tool, с помощтю которой

Проверено: jollheef

Шома растит себе достойного преемника.

LamerOk ★★★★★ ()

CP1251, иногда содержит ошибки

В дампе оно ровно в таком виде, в котором присылает безумные XML-ки РКН, жалуйся им. И там не только cp1251 бывает.

eSyr ★★ ()
Ответ на: комментарий от Im_not_a_robot

В какой вселенной json более удобен для чтения, чем csv для табличных данных?

Там не совсем табличные данные. В первых трёх полях - списки IP/подсетей, доменов и урлов. Они могут быть очень длинными. То есть просто открыть CSV либреофисом и увидеть красивую таблицу не получится.

mironov_ivan ★★★★★ ()
Ответ на: комментарий от eSyr

В дампе оно ровно в таком виде, в котором присылает безумные XML-ки РКН, жалуйся им. И там не только cp1251 бывает.

А есть вообще где-нибудь документация на это всё с примерами оригинальных XMLек? Было бы очень интересно посмотреть на это.

mironov_ivan ★★★★★ ()
Ответ на: комментарий от mx__

Загрузи в опенофисс и выставь кодировку - cp1251. А вот что дальше делать ? Х.з.

В том то и дело, что опенофис тут не помогает никак.

В последнее время, я стал часто натыкаться на неработающие сайты. Чтобы понять кто виноват - провайдер или роскомнадзор, приходилось руками ресолвить адреса, подбирать под эти адреса подсети и делать что-то типа «iconv -f cp1251 <dump.csv | grep $предполагаемая_подсеть». Чтобы не делать подобный поиск вручную я и написал утилиту для поиска по дампу.

Официальный поисковик от Роскомнадзора вообще бесполезен: если забочили подсеть, а ты ему передаёшь URL, имя домена или IP-адрес, то он ничего не находит. Поиск на https://antizapret.info тоже не умеет ничего.

mironov_ivan ★★★★★ ()

дампы выгрузок выкладываются в неудобном для использования формате (CSV, CP1251, иногда содержит ошибки)

А нам в XML присылают. Не исключено даже, что файл может лежать на публично доступном ftp-сервере, но это не точно. Может быть надо поискать ссылку на этот файл?

anonymous ()
Ответ на: комментарий от anonymous

А нам в XML присылают. Не исключено даже, что файл может лежать на публично доступном ftp-сервере, но это не точно. Может быть надо поискать ссылку на этот файл?

Если знаешь где достать оригинальные файлы - пиши. Я не нашёл.

mironov_ivan ★★★★★ ()
Ответ на: комментарий от mironov_ivan

Знаю, конечно же. Завтра подумаю как бы поудобнее найти ссылку. Ник на фриноде или oftc кому писать скажи только.

anonymous ()

есть же proxy или tor ,вчера ещё vpn попробовал что за зверь ,теперь эти блокировки как я понимаю не имеют смысла

zoloz ()
Ответ на: комментарий от AVL2

Опятьже, по моему, вариант с dnsmasq, который динамически по моменту обращения клиента ресолвит домен и добавляет его адрес в ipset сводит всю эту таблицу до нескольких тысяч адресов.

dnsmasq - это интересное решение. Но у него тоже есть проблемы:

  • ipset придётся как-то периодически чистить. Потому что блокировки иногда снимают.
  • Всё равно надо прикручивать какие-то дополнительные скрипты чтобы добавлять в ipset подсети и отдельные адреса, так как блокировки не всегда идут с доменными именами, плюс и обращение к адресами не всегда включает обращение в DNS, даже если имя известно.

Да и я уже начал делать свой велосипед =).

mironov_ivan ★★★★★ ()
Последнее исправление: mironov_ivan (всего исправлений: 1)
Ответ на: комментарий от mironov_ivan

Товарищи, причастные к провайдерам!

Насколько я понял, у РКН есть робот, которые ходит по провайдерам и проверяет, не заблочен ли адрес? А нельзя ли блочить «неугодные» IP только для него? :)

Sahas ★★★★★ ()
Ответ на: комментарий от mironov_ivan

Абсолютно верно. Днсмаск это часть решения решающий проблему смены адресов у заблокированных адресов.

Задача наполнения таблицы адресов без имени и парсинга базы блокировок остается. И здесь как раз библиотечка, которая грамотно читает эту базу и фиксить ошибки будет очень кстати. Ещё хотелось бы оптимизацию базы. Объединять адреса в подсети. Причем с порогом. Есть например, тридцать процентов или более забаненых адресов в подсети - пишем всю подсеть. Есть десяток поддоменов - пишем домен. Естественно, домены типа жж или первого уровня должны быть в исключениях. Так что твоей библиотеке есть что делать и с днсмаск она никак не конфликтует.

По поводу адресов, которые по имени и не ресолвит клиентом. Ну так значит они или в хостах и ещё как то прибиты. Сам бог велел завести табличку этих адресов и забивать ее тем же скриптом, который обновляет базу.

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

Ещё хотелось бы оптимизацию базы. Объединять адреса в подсети. Причем с порогом. Есть например, тридцать процентов или более забаненых адресов в подсети - пишем всю подсеть. Есть десяток поддоменов - пишем домен. Естественно, домены типа жж или первого уровня должны быть в исключениях.

Добавил issue себе. Если будет время на выходных - сделаю.

По поводу объединения доменов: имеется ввиду, что если у нас есть test1.example.com, test2.example.com и test3.example.com, то с «порогом» <=3 должно выдаваться *.example.com?

mironov_ivan ★★★★★ ()
Ответ на: комментарий от Sahas

Насколько я понял, у РКН есть робот, которые ходит по провайдерам и проверяет, не заблочен ли адрес?

Насколько я знаю, провайдеры обязаны ставить себе в сеть некий девайс (китайский роутер с кастомной прошивкой?), который периодически проверяет заблокированность адресов и отправляет отчёты в РКН. Но инфа не 100%, это со слов человека, который видел как это работает 8).

А нельзя ли блочить «неугодные» IP только для него? :)

По идее против этого работает «контрольная закупка», а так же доносы от благонадёжных граждан 8).

mironov_ivan ★★★★★ ()
Ответ на: комментарий от mironov_ivan

По поводу объединения доменов: имеется ввиду, что если у нас есть test1.example.com, test2.example.com и test3.example.com, то с «порогом» <=3 должно выдаваться *.example.com?

именно так. Чтобы все эти вулканы, например, были одной записью.

AVL2 ★★★★★ ()
Ответ на: комментарий от mironov_ivan

И кстати про оптимизацию. Белый список должен быть и для доменов и для адресов.

То есть если я указал livejournal.com, то он не должен попасть в правила, хоть там тысяча поддоменов забанено. И если я указал адрес 1.2.3.4 в белых адресах, то хоть там все адреса из 1.0.0.0/8 будут забанены кроме 1.2.3.4, в сеть 1.0.0.0/8 он сворачиваться не должен.

AVL2 ★★★★★ ()
Ответ на: комментарий от mironov_ivan

@mironov_ivan http://tcpst.net/5si6

Вот сегодняшний файл. Как тебя найти в IRC (freenode или oftc), обсудить некоторые детали?

anonymous ()
Ответ на: комментарий от AVL2

Я сам не считал, но графики на гиктаймсе доросли до 18 миллионов IP адресов.

По что купил, по то и продаю.

aidaho ★★★★★ ()
Ответ на: комментарий от anonymous

/me расчехлил IRC-клиент

Как тебя найти в IRC (freenode или oftc), обсудить некоторые детали?

im-0 на freenode

mironov_ivan ★★★★★ ()
Ответ на: комментарий от mironov_ivan

ipset можно не чистить. Он позволяет атомарно поменять местами (swap) два сета, поэтому можно (и нужно!) просто создавать новый, не заботясь о состоянии старого, и после swap удалить ненужное.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.