ValdikSS / blockcheck

Russian ISP blocking type checker NOTE: NOT WORKING CURRENTLY. ВНИМАНИЕ: НЕ РАБОТАЕТ НА ТЕКУЩИЙ МОМЕНТ
MIT License
1.37k stars 143 forks source link

Починил _get_a_records #27

Closed LebedevRI closed 9 years ago

LebedevRI commented 9 years ago

Не прерывать обработку списка сайтов при ошибке, просто переходить к следующему

Без этого, у меня все получения адресов не работали:

$ ./blockcheck.py 
[O] Тестируем DNS
[O] Получаем эталонные DNS с сервера
        Эталонные адреса:                ['5.178.68.100', '69.165.95.242', '78.110.160.185']
        Адреса через системный DNS:      
        Не удалось подключиться к Google DNS
        Не удалось подключиться к DNS AntiZapret

[O] Тестируем HTTP
        Открываем  http://sukebei.nyaa.se/
[✓] Сайт открывается
        Открываем  http://gelbooru.com/index.php?page=post&s=view&id=1989610
[☠] Сайт не открывается
        Открываем  http://skidows.ru/20648-nastoyaschiy-detektiv-true-detective-2-sezon-1-2-serii-iz-8-2015-hdtvrip-amedia.html
[☠] Сайт не открывается
        Открываем  http://gelbooru.com/
[✓] Сайт открывается
        Открываем  http://skidows.ru/
[☠] Сайт не открывается
        Открываем  http://sukebei.nyaa.se/?page=view&tid=395631
[☠] Сайт не открывается
        Открываем через прокси  http://sukebei.nyaa.se/
[✓] Сайт открывается
        Открываем через прокси  http://gelbooru.com/index.php?page=post&s=view&id=1989610
[✓] Сайт открывается
        Открываем через прокси  http://skidows.ru/20648-nastoyaschiy-detektiv-true-detective-2-sezon-1-2-serii-iz-8-2015-hdtvrip-amedia.html
[☠] Сайт не открывается
        Открываем через прокси  http://gelbooru.com/
[✓] Сайт открывается
        Открываем через прокси  http://skidows.ru/
[☠] Сайт не открывается
        Открываем через прокси  http://sukebei.nyaa.se/?page=view&tid=395631
[✓] Сайт открывается

[O] Тестируем HTTPS
        Открываем  https://2chru.net/
[☠] Сайт не открывается

[!] Результат:
[⚠] Ваш провайдер блокирует чужие DNS-серверы.
 Вам следует использовать шифрованный канал до DNS-серверов, например, через VPN, Tor или HTTPS/Socks прокси.
[⚠] У вашего провайдера "полный" DPI. Он отслеживает ссылки даже внутри прокси, поэтому вам следует использовать любое шифрованное соединение, например, VPN или Tor.

хотя вручную через dig(1) все было нормально:

 dig sukebei.nyaa.se gelbooru.com skidows.ru

; <<>> DiG 9.9.5-11-Debian <<>> sukebei.nyaa.se gelbooru.com skidows.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10797
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sukebei.nyaa.se.               IN      A

;; ANSWER SECTION:
sukebei.nyaa.se.        232     IN      A       69.165.95.242

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Aug 13 12:44:08 MSK 2015
;; MSG SIZE  rcvd: 60

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9915
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gelbooru.com.                  IN      A

;; ANSWER SECTION:
gelbooru.com.           232     IN      A       5.178.68.100

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Aug 13 12:44:08 MSK 2015
;; MSG SIZE  rcvd: 57

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 46885
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;skidows.ru.                    IN      A

;; AUTHORITY SECTION:
ru.                     1015    IN      SOA     a.dns.ripn.net. hostmaster.ripn.net. 4023951 86400 14400 2592000 3600

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Aug 13 12:44:08 MSK 2015
;; MSG SIZE  rcvd: 100
dig @8.8.4.4 sukebei.nyaa.se gelbooru.com skidows.ru

; <<>> DiG 9.9.5-11-Debian <<>> @8.8.4.4 sukebei.nyaa.se gelbooru.com skidows.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24597
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;sukebei.nyaa.se.               IN      A

;; ANSWER SECTION:
sukebei.nyaa.se.        299     IN      A       69.165.95.242

;; Query time: 57 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Thu Aug 13 12:44:40 MSK 2015
;; MSG SIZE  rcvd: 60

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21869
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;gelbooru.com.                  IN      A

;; ANSWER SECTION:
gelbooru.com.           299     IN      A       5.178.68.100

;; Query time: 58 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Thu Aug 13 12:44:40 MSK 2015
;; MSG SIZE  rcvd: 57

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 63418
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;skidows.ru.                    IN      A

;; AUTHORITY SECTION:
ru.                     1023    IN      SOA     a.dns.ripn.net. hostmaster.ripn.net. 4023951 86400 14400 2592000 3600

;; Query time: 1 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Thu Aug 13 12:44:40 MSK 2015
;; MSG SIZE  rcvd: 100
dig @107.150.11.192 sukebei.nyaa.se gelbooru.com skidows.ru 

; <<>> DiG 9.9.5-11-Debian <<>> @107.150.11.192 sukebei.nyaa.se gelbooru.com skidows.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1209
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sukebei.nyaa.se.               IN      A

;; ANSWER SECTION:
sukebei.nyaa.se.        165     IN      A       107.150.11.192

;; Query time: 150 msec
;; SERVER: 107.150.11.192#53(107.150.11.192)
;; WHEN: Thu Aug 13 12:45:15 MSK 2015
;; MSG SIZE  rcvd: 60

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13801
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gelbooru.com.                  IN      A

;; ANSWER SECTION:
gelbooru.com.           165     IN      A       107.150.11.192

;; Query time: 145 msec
;; SERVER: 107.150.11.192#53(107.150.11.192)
;; WHEN: Thu Aug 13 12:45:15 MSK 2015
;; MSG SIZE  rcvd: 57

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 23418
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;skidows.ru.                    IN      A

;; Query time: 149 msec
;; SERVER: 107.150.11.192#53(107.150.11.192)
;; WHEN: Thu Aug 13 12:45:15 MSK 2015
;; MSG SIZE  rcvd: 39

И с моими изменениями:

$ ./blockcheck.py 
[O] Тестируем DNS
[O] Получаем эталонные DNS с сервера
        Эталонные адреса:                ['5.178.68.100', '69.165.95.242', '78.110.160.185']
        Адреса через системный DNS:      ['5.178.68.100', '69.165.95.242', '78.110.160.185']
        Адреса через Google DNS:         ['5.178.68.100', '69.165.95.242', '78.110.160.185']
        Адреса через DNS AntiZapret:     ['107.150.11.192', '107.150.11.192', '107.150.11.192']
[✓] DNS записи не подменяются
[✓] DNS не перенаправляется

[O] Тестируем HTTP
        Открываем  http://gelbooru.com/index.php?page=post&s=view&id=1989610
[☠] Сайт не открывается
        Открываем  http://skidows.ru/
[☠] Сайт не открывается
        Открываем  http://skidows.ru/20648-nastoyaschiy-detektiv-true-detective-2-sezon-1-2-serii-iz-8-2015-hdtvrip-amedia.html
[☠] Сайт не открывается
        Открываем  http://sukebei.nyaa.se/?page=view&tid=395631
[☠] Сайт не открывается
        Открываем  http://gelbooru.com/
[✓] Сайт открывается
        Открываем  http://sukebei.nyaa.se/
[✓] Сайт открывается
        Открываем через прокси  http://gelbooru.com/index.php?page=post&s=view&id=1989610
[✓] Сайт открывается
        Открываем через прокси  http://skidows.ru/
[☠] Сайт не открывается
        Открываем через прокси  http://skidows.ru/20648-nastoyaschiy-detektiv-true-detective-2-sezon-1-2-serii-iz-8-2015-hdtvrip-amedia.html
[☠] Сайт не открывается
        Открываем через прокси  http://sukebei.nyaa.se/?page=view&tid=395631
[✓] Сайт открывается
        Открываем через прокси  http://gelbooru.com/
[✓] Сайт открывается
        Открываем через прокси  http://sukebei.nyaa.se/
[✓] Сайт открывается

[O] Тестируем HTTPS
        Открываем  https://2chru.net/
[☠] Сайт не открывается

[!] Результат:
[⚠] У вашего провайдера "полный" DPI. Он отслеживает ссылки даже внутри прокси, поэтому вам следует использовать любое шифрованное соединение, например, VPN или Tor.

Видимо, было сломлено в fb533703e529203021ad7579fbf71dd5783297c2

@sockeye44 у меня нету опыта с Python, так что я не знаю насколько мои изменения правильные и как они себя поведут в той ситуации, для которой тот коммит был предназначен. Так что было-бы неплохо, если-бы Вы проверили что мое изменение не ломает тот функционал.

ValdikSS commented 9 years ago

Хм, а уберите вообще except там, и запустите в консоли (./blockcheck.py --console), хотел бы увидеть exception.

LebedevRI commented 9 years ago
$ ./blockcheck.py --console
[O] Тестируем DNS
[O] Получаем эталонные DNS с сервера
        Эталонные адреса:                ['5.178.68.100', '69.165.95.242', '78.110.160.185']
Traceback (most recent call last):
  File "./blockcheck.py", line 327, in <module>
    main()
  File "./blockcheck.py", line 267, in main
    dns = test_dns()
  File "./blockcheck.py", line 150, in test_dns
    resolved_default_dns = _get_a_records(sites_list)
  File "./blockcheck.py", line 107, in _get_a_records
    for item in _get_a_record(site, dnsserver):
  File "./blockcheck.py", line 94, in _get_a_record
    for item in resolver.query(site).rrset.items:
  File "/usr/lib/python3/dist-packages/dns/resolver.py", line 901, in query
    raise NXDOMAIN
dns.resolver.NXDOMAIN
ValdikSS commented 9 years ago

Хм, у вас первый DNS-сервер не работает? Или у вас IPv6?

LebedevRI commented 9 years ago

Ни одно из этого. (Локально я использую unbound + dnssec-trigger) Похоже что по skidows.ru ни один из серверов не возвращяет ответ...

dig @8.8.8.8 skidows.ru

; <<>> DiG 9.9.5-11-Debian <<>> @8.8.8.8 skidows.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 5376
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;skidows.ru.                    IN      A

;; AUTHORITY SECTION:
ru.                     1461    IN      SOA     a.dns.ripn.net. hostmaster.ripn.net. 4023951 86400 14400 2592000 3600

;; Query time: 1 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Aug 13 14:04:37 MSK 2015
;; MSG SIZE  rcvd: 100

Хотя оригинальные сервера из whois

whois skidows.ru
% By submitting a query to RIPN's Whois Service
% you agree to abide by the following terms of use:
% http://www.ripn.net/about/servpol.html#3.2 (in Russian) 
% http://www.ripn.net/about/en/servpol.html#3.2 (in English).

domain:        SKIDOWS.RU
nserver:       dns1.yandex.net.
nserver:       dns2.yandex.net.
state:         REGISTERED, NOT DELEGATED, VERIFIED
person:        Private Person
registrar:     REGRU-RU
admin-contact: http://www.reg.ru/whois/admin_contact
created:       2014.12.21
paid-till:     2015.12.21
free-date:     2016.01.21
source:        TCI

Last updated on 2015.08.13 14:01:32 MSK

возвращают:

dig @dns1.yandex.net skidows.ru

; <<>> DiG 9.9.5-11-Debian <<>> @dns1.yandex.net skidows.ru
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20895
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;skidows.ru.                    IN      A

;; ANSWER SECTION:
skidows.ru.             21600   IN      A       46.148.17.146

;; Query time: 2 msec
;; SERVER: 213.180.204.213#53(213.180.204.213)
;; WHEN: Thu Aug 13 14:06:24 MSK 2015
;; MSG SIZE  rcvd: 55
ValdikSS commented 9 years ago

А, хм, посмотрю, можно ли его заменить на что-то более стабильное.

LebedevRI commented 9 years ago

Да, спасибо.

Но все-равно, мне кажется не стоит прерывать обработку если один из доменов возвращает NXDOMAIN. Хотя возможно, NXDOMAIN нужно ловить отдельно и явно предупреждать об этом.

Вобщем скажете если/как я могу исправить код.

ValdikSS commented 9 years ago

Как-то так, наверное.

LebedevRI commented 9 years ago

Да, так лучше. (возможно стоит писать с каким именно доменом это произошло)

$ ./blockcheck.py 
[O] Тестируем DNS
[O] Получаем эталонные DNS с сервера
        Эталонные адреса:                ['5.178.68.100', '69.165.95.242', '78.110.160.185']
[!] Невозможно получить DNS-запись (NXDOMAIN). Результаты могут быть неточными.
        Адреса через системный DNS:      ['5.178.68.100', '69.165.95.242', '78.110.160.185']
[!] Невозможно получить DNS-запись (NXDOMAIN). Результаты могут быть неточными.
        Адреса через Google DNS:         ['5.178.68.100', '69.165.95.242', '78.110.160.185']
[!] Невозможно получить DNS-запись (NXDOMAIN). Результаты могут быть неточными.
        Адреса через DNS AntiZapret:     ['107.150.11.192', '107.150.11.192', '107.150.11.192']
[✓] DNS записи не подменяются
[✓] DNS не перенаправляется

[O] Тестируем HTTP
        Открываем  http://sukebei.nyaa.se/
[✓] Сайт открывается
        Открываем  http://skidows.ru/20648-nastoyaschiy-detektiv-true-detective-2-sezon-1-2-serii-iz-8-2015-hdtvrip-amedia.html
[☠] Сайт не открывается
        Открываем  http://sukebei.nyaa.se/?page=view&tid=395631
[☠] Сайт не открывается
        Открываем  http://gelbooru.com/
[✓] Сайт открывается
        Открываем  http://gelbooru.com/index.php?page=post&s=view&id=1989610
[☠] Сайт не открывается
        Открываем  http://skidows.ru/
[☠] Сайт не открывается
        Открываем через прокси  http://sukebei.nyaa.se/
[✓] Сайт открывается
        Открываем через прокси  http://skidows.ru/20648-nastoyaschiy-detektiv-true-detective-2-sezon-1-2-serii-iz-8-2015-hdtvrip-amedia.html
[☠] Сайт не открывается
        Открываем через прокси  http://sukebei.nyaa.se/?page=view&tid=395631
[✓] Сайт открывается
        Открываем через прокси  http://gelbooru.com/
[✓] Сайт открывается
        Открываем через прокси  http://gelbooru.com/index.php?page=post&s=view&id=1989610
[✓] Сайт открывается
        Открываем через прокси  http://skidows.ru/
[☠] Сайт не открывается

[O] Тестируем HTTPS
        Открываем  https://2chru.net/
[☠] Сайт не открывается

[!] Результат:
[⚠] У вашего провайдера "полный" DPI. Он отслеживает ссылки даже внутри прокси, поэтому вам следует использовать любое шифрованное соединение, например, VPN или Tor.
ValdikSS commented 9 years ago

Готово, проверьте.

LebedevRI commented 9 years ago

Да, все отлично, спасибо!

$ ./blockcheck.py 
[O] Тестируем DNS
[O] Получаем эталонные DNS с сервера
        Эталонные адреса:                ['162.159.243.197', '162.159.244.197', '5.178.68.100', '69.165.95.242', '78.110.160.185']
        Адреса через системный DNS:      ['162.159.243.197', '162.159.244.197', '5.178.68.100', '69.165.95.242', '78.110.160.185']
        Адреса через Google DNS:         ['162.159.243.197', '162.159.244.197', '5.178.68.100', '69.165.95.242', '78.110.160.185']
        Адреса через DNS AntiZapret:     ['107.150.11.192', '107.150.11.192', '107.150.11.192', '107.150.11.192']
[✓] DNS записи не подменяются
[✓] DNS не перенаправляется

[O] Тестируем HTTP
        Открываем  http://gelbooru.com/
[✓] Сайт открывается
        Открываем  http://sukebei.nyaa.se/
[✓] Сайт открывается
        Открываем  http://sukebei.nyaa.se/?page=view&tid=395631
[☠] Сайт не открывается
        Открываем  http://gelbooru.com/index.php?page=post&s=view&id=1989610
[☠] Сайт не открывается
        Открываем через прокси  http://gelbooru.com/
[✓] Сайт открывается
        Открываем через прокси  http://sukebei.nyaa.se/
[✓] Сайт открывается
        Открываем через прокси  http://sukebei.nyaa.se/?page=view&tid=395631
[✓] Сайт открывается
        Открываем через прокси  http://gelbooru.com/index.php?page=post&s=view&id=1989610
[✓] Сайт открывается

[O] Тестируем HTTPS
        Открываем  https://e621.net/
[☠] Сайт не открывается
        Открываем  https://2chru.net/
[☠] Сайт не открывается

[!] Результат:
[⚠] У вашего провайдера "обычный" DPI.
 Вам поможет HTTPS/Socks прокси, VPN или Tor.

Так даже лучше: (для моего провайдера)

- [⚠] У вашего провайдера "полный" DPI. Он отслеживает ссылки даже внутри прокси, поэтому вам следует использовать любое шифрованное соединение, например, VPN или Tor.
+ [⚠] У вашего провайдера "обычный" DPI.