Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

При запросе с локального хоста, имя пира пустое, а ресурс отображается как незаблокированный. #16

Open
dserov opened this issue Aug 27, 2016 · 7 comments
Assignees

Comments

@dserov
Copy link

dserov commented Aug 27, 2016

Доброго времени суток!

Я слегка добавил диагностики, чтоб при запуске их командной строки было удобнее видеть ип пира и код статуса ответа сервера. Видно, что на доменах, которые ресолвятся в 127.0.0.1 отсутствует ип пира, и они, соответственно не помечаются, как local-ip.
Плюс отключил проверку при открытии https ресурсов. У нас там тоже заглушка. Сертификат невалидный, поэтому отключил.

(roskombox) admin@xbtt:~/www/roskombox/portal/management/commands$ diff -p ./roskom_check.py.origin ./roskom_check.py
*** ./roskom_check.py.origin    2016-08-25 21:00:06.000000000 +0300
--- ./roskom_check.py   2016-08-28 01:38:03.108796516 +0300
*************** import resource, time, sys, threading, l
*** 21,26 ****
--- 21,30 ----
  import requests
  from lxml import etree

+ # Отключим ругань на невалидный сертификат
+ from requests.packages.urllib3.exceptions import InsecureRequestWarning
+ requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
+
  # Время начала работы скрипта
  execution_start = time.time()

*************** class Worker(threading.Thread):
*** 88,100 ****
                        percents = int((float(counter) / float(self.total_count)) * 100.0)
                        self.scan.set_progress(percents)

!               print(u"(%d of %d) [%s] %s" % (counter, self.total_count, item['status'], item['url']))

        def process_item(self, item):
                global search_substring, request_headers
                try:
!                       response = requests.get(item['url'], timeout = self.timeout, stream = True, headers = request_headers)
!
                        maxsize = 100000
                        content = ''
                        for chunk in response.iter_content(2048):
--- 92,107 ----
                        percents = int((float(counter) / float(self.total_count)) * 100.0)
                        self.scan.set_progress(percents)

!               print(u"(%d of %d) [%s] %s(%s) -  %s" % (counter, self.total_count, item['status'], item['peer'], item['status_code'], item['url']))

        def process_item(self, item):
                global search_substring, request_headers
                try:
!                       # Умолчательное значение, если выскочит исключение
!                       item['peer'] = 'exception'
!                       item['status_code'] = 'Null'
!                       response = requests.get(item['url'], timeout = self.timeout, stream = True, headers = request_headers, verify = False)
!
                        maxsize = 100000
                        content = ''
                        for chunk in response.iter_content(2048):
*************** class Worker(threading.Thread):
*** 105,125 ****
                                item['status'] = 'available'
                                item['reply'] = 'data too large'

                        if search_substring in content:
                                item['status'] = 'blocked'
                        else:
-                               peer = response.raw._original_response.peer
                                if peer is not None:
                                        address = peer[0]
                                        if address.startswith('127') or address.startswith('192.168') or address.startswith('10.10'):
                                                item['status'] = 'local-ip'
                                        else:
                                                item['status'] = 'available'
-                                               item['reply'] = content
                                else:
                                        item['status'] = 'available'
-                                       item['reply'] = content
- #                                     print('status: available, reply: %s' % content[:100])
                except Exception as e:
                        item['status'] = 'failure'

--- 112,131 ----
                                item['status'] = 'available'
                                item['reply'] = 'data too large'

+                       peer = response.raw._original_response.peer
+                       item['peer'] = (peer[0] if peer is not None else 'None')
+                       item['status_code'] = response.status_code
                        if search_substring in content:
                                item['status'] = 'blocked'
                        else:
                                if peer is not None:
                                        address = peer[0]
                                        if address.startswith('127') or address.startswith('192.168') or address.startswith('10.10'):
                                                item['status'] = 'local-ip'
                                        else:
                                                item['status'] = 'available'
                                else:
                                        item['status'] = 'available'
                except Exception as e:
                        item['status'] = 'failure'

@dserov
Copy link
Author

dserov commented Aug 27, 2016

Кусок лога в догонку. Домены, естественно, "замазаны". Нет ip пира и ответ 404 - так же не бывает))

(roskombox) admin@xbtt:~/www/roskombox$ ./manage.py roskom_check | grep  available
(5737 of 39979) [available] None(404) -  http://aqweqwen/
(6365 of 39979) [available] None(404) -  http://vqwem.ru/
(37054 of 39979) [available] 88.80.28.8(200) -  http://sqwe.com/28/1qewq981/?K0_01.swf
(37086 of 39979) [available] 88.80.28.8(200) -  http://swqwean.com/29/142qw
(37665 of 39979) [available] None(404) -  http://www.soqwe/rus/indqwenewsid=418

Так выглядят заблокированные:

(39904 of 39979) [blocked] 10.10.23.23(451) -  http://for234tali.ua/viewt43.php?t=4273
(39905 of 39979) [blocked] 10.10.23.23(451) -  http://www234n/blog/nei34ten_avtor/9931.html
(39906 of 39979) [blocked] 10.10.23.23(451) -  http://fu34o43rg/faq43e=help_grow

(roskombox) admin@xbtt:~/www/roskombox$

@WST WST self-assigned this Aug 29, 2016
WST pushed a commit that referenced this issue Aug 29, 2016
@WST
Copy link
Member

WST commented Aug 29, 2016

Обновитесь (не забыв накатить миграции командой ./manage.py migrate) и проверьте, добавил проверку на None.

@WST
Copy link
Member

WST commented Aug 29, 2016

По поводу невалидности сертификата немного странно — у нас проблем с этим никогда не возникало ни на Роскомбоксе, ни на нашей проверялке, впрочем, мы лишь недавно перенесли заглушку с хоста, на котором был нормальный сертификат от удостоверяющего центра на хост, на котором стоит самоподписанный сертификат. Возможно, что проблема просто не успела проявиться. Попробую добавить к себе проверку. Весь патч пока накатывать не буду.

@dserov
Copy link
Author

dserov commented Aug 29, 2016

По сертификату. У нас спуфятся днс запросы к запрещенным доменам, возвращается ip сервера-заглушки. Там стоит самоподписанный сертификат. Понятно, при обращении по https на домен, к примеру, qqq.com, если сертификат не выдан на это имя - то браузер ругнется. Ругался и роскомбокс, сыпя в логи.

Как обновить не разобрался, переустановил по новой. Заметил, что емперор в лог ругается на процессы и сокеты (как тут).
Ругань на сокеты устранилась добавкой

max-fd = 120000
listen = 1024

в /etc/uwsgi-emperor/vassals/roskombox.ini
и sysctl.conf: net.core.somaxconn = 4096

После обновления заметил, что статус и результат появились в БД. А вот по проверке доступности - так же и отображаются localhost-ные сайты, как доступные.

@dserov
Copy link
Author

dserov commented Aug 29, 2016

Посмотрите, в какой ип у Вас разрешается http://activism.win/ ? 127.0.0.1? Тогда наверное, неверно показывать её как незаблокированную.

@WST
Copy link
Member

WST commented Aug 30, 2016

Да, он у нас резолвится в 127.0.0.1, но, несмотря на наличие локального сервера на 80 порту проблема не воспроизводится.

Requests у вас версии 2.11.1, я помню, а можете ещё посмотреть версию urllib3? Обычно она установлена из пакетов самого дистрибутива.

@dserov
Copy link
Author

dserov commented Aug 30, 2016

в каталоге виртуаленва: urllib3-1.9.1-py2.py3-none-any.whl
в системе: "python-urllib3-whl 1.9.1-3"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

2 participants