Skip to content

Instantly share code, notes, and snippets.

@darkk
Last active April 20, 2018 13:04
Show Gist options
  • Save darkk/70ec8fc57832ae39c791c5511b03ebb7 to your computer and use it in GitHub Desktop.
Save darkk/70ec8fc57832ae39c791c5511b03ebb7 to your computer and use it in GitHub Desktop.
Социально-значимые сервисы не пострадали (c) РКН

Спасибо Алексею и zapret-info за открытые данные.

Благодаря им можно быстро посчитать, сколько же доменов на настоящий момент заблокировано "подсетями".

По выгрузке от 2018-04-20 11:13:00 +0000 таких доменов было по меньшей мере 33856: 31440 -- .ru, 1856 -- .рф и 560 -- .su.

subnets.sql: subnets.txt
echo 'SELECT tld, COUNT(*) FROM domain WHERE' >$@
./mksql.py a1 a2 a3 a4 <$^ >>$@
echo 'GROUP BY tld;' >>$@
subnets.txt: dump.csv
cut -d ';' -f 1 <$^ | tr '| ' '\n' | grep / | sort -n >$@
#!/usr/bin/env python3
import ipaddress
import sys
import struct
import socket
nets = []
for line in sys.stdin:
net = ipaddress.ip_network(line.strip())
pair = (net.network_address, net.broadcast_address)
pair = map(str, pair)
pair = map(socket.inet_aton, pair)
pair = map(lambda x: struct.unpack('>I', x)[0], pair)
start, end = pair
clause = ['INET_ATON({:s}) BETWEEN {:d} AND {:d}'.format(arg, start, end)
for arg in sys.argv[1:]]
nets.append(' OR '.join(clause))
print(' OR '.join(nets))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment