Форум программистов, компьютерный форум, киберфорум
Python: Сети
Войти
Регистрация
Восстановить пароль
 
Wintreist
4 / 2 / 2
Регистрация: 23.09.2018
Сообщений: 41
1

Как использовать мощь Tor'a?

21.02.2020, 15:10. Просмотров 168. Ответов 3

Хочу написать парсер с использованием сети Тор. После парсинга странцицы, скрипт должен сменить цепочку ip адресов и снова парсить. Нашел на этом форуме код и чуть-чуть изменил его
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def send(s, string):
    print('>', string)
    s.send(bytes(string.encode('utf8')))
    s.send(b'\n')
    data = recv(s)
    if not data.startswith('250 '):
        raise Exception()
    print(data)
 
 
def recv(s):
    return s.recv(1024).decode('utf8')
 
def newIdentefy():
    raw_password = 'pass'
 
    with socket.socket() as s:
        s.connect(('127.0.0.1', 9050))
        send(s, 'authenticate "%s"' % raw_password)
        send(s, 'setevents signal')
        send(s, 'signal newnym')

Но код выдаёт ошибку
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
> authenticate "pass"
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-20-d87aea79b184> in <module>
----> 1 newIdentefy()
 
<ipython-input-18-d90124457bee> in newIdentefy()
     17     with socket.socket() as s:
     18         s.connect(('127.0.0.1', 9050))
---> 19         send(s, 'authenticate "%s"' % raw_password)
     20         send(s, 'setevents signal')
     21         send(s, 'signal newnym')
 
<ipython-input-18-d90124457bee> in send(s, string)
      5     data = recv(s)
      6     if not data.startswith('250 '):
----> 7         raise Exception()
      8     print(data)
      9 
 
Exception:

Ну собственно понятно, что ошибка из-за того, что ответ не начался с "250 ", так что если закомментировать строку с этой проверкой, то получаю такое
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
> authenticate "pass"
 
> setevents signal
---------------------------------------------------------------------------
ConnectionAbortedError                    Traceback (most recent call last)
<ipython-input-23-d87aea79b184> in <module>
----> 1 newIdentefy()
 
<ipython-input-21-38607d202267> in newIdentefy()
     18         s.connect(('127.0.0.1', 9050))
     19         send(s, 'authenticate "%s"' % raw_password)
---> 20         send(s, 'setevents signal')
     21         send(s, 'signal newnym')
 
<ipython-input-21-38607d202267> in send(s, string)
      2     print('>', string)
      3     s.send(bytes(string.encode('utf8')))
----> 4     s.send(b'\n')
      5     data = recv(s)
      6     #if not data.startswith('250 '):
 
ConnectionAbortedError: [WinError 10053] Программа на вашем хост-компьютере разорвала установленное подключение

Тут уже вообще только два варианта, либо что-то блокирует соединение, либо что-то с самим соединением.
На моём компьютере один антивирус, и после его отключения ошибка осталась, т.е. что-то с самим соединением. Однако мои знания сетевого программирования не позволяют мне установить в чём ошибка.
А так же из одного пособия другой код, который я пытался склеить с тем, что выше
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import socket
import socks
import requests
 
def send(s, string):
    print('>', string)
    s.send(bytes(string.encode('utf8')))
    s.send(b'\n')
    data = recv(s)
    #if not data.startswith('250 '):
    #    raise Exception()
    print(data)
 
 
def recv(s):
    return s.recv(1024).decode('utf8')
 
def newIdentefy():
    raw_password = 'Olga22'
 
    with socket.socket() as s:
        s.connect(('127.0.0.1', 9050))
        send(s, 'authenticate "%s"' % raw_password)
        send(s, 'setevents signal')
        send(s, 'signal newnym')
 
socks.set_default_proxy(socks.SOCKS5, 'localhost', 9050)
socket.socket = socks.socksocket
response = requests.get('http://icanhazip.com')
print(response.text)
newIdentefy()

Но в таком случае получается, что я отправляю на выходной узел сети Тор попытку подключиться к 127.0.0.1 из выходного шлюза, а не к моему 127.0.0.1
Там уже такая ошибка
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
---------------------------------------------------------------------------
SOCKS5Error                               Traceback (most recent call last)
D:\Anaconda\lib\site-packages\socks.py in connect(self, dest_pair, catch_errors)
    808                 negotiate = self._proxy_negotiators[proxy_type]
--> 809                 negotiate(self, dest_addr, dest_port)
    810             except socket.error as error:
 
D:\Anaconda\lib\site-packages\socks.py in _negotiate_SOCKS5(self, *dest_addr)
    443         self.proxy_peername, self.proxy_sockname = self._SOCKS5_request(
--> 444             self, CONNECT, dest_addr)
    445 
 
D:\Anaconda\lib\site-packages\socks.py in _SOCKS5_request(self, conn, cmd, dst)
    532                 error = SOCKS5_ERRORS.get(status, "Unknown error")
--> 533                 raise SOCKS5Error("{:#04x}: {}".format(status, error))
    534 
 
SOCKS5Error: 0x01: General SOCKS server failure
 
During handling of the above exception, another exception occurred:
 
GeneralProxyError                         Traceback (most recent call last)
<ipython-input-25-d87aea79b184> in <module>
----> 1 newIdentefy()
 
<ipython-input-21-38607d202267> in newIdentefy()
     16 
     17     with socket.socket() as s:
---> 18         s.connect(('127.0.0.1', 9050))
     19         send(s, 'authenticate "%s"' % raw_password)
     20         send(s, 'setevents signal')
 
D:\Anaconda\lib\site-packages\socks.py in wrapper(*args, **kwargs)
     45             if _is_blocking == 0:
     46                 self.setblocking(True)
---> 47             return function(*args, **kwargs)
     48         except Exception as e:
     49             raise
 
D:\Anaconda\lib\site-packages\socks.py in connect(self, dest_pair, catch_errors)
    812                     # Wrap socket errors
    813                     self.close()
--> 814                     raise GeneralProxyError("Socket error", error)
    815                 else:
    816                     raise error
 
GeneralProxyError: Socket error: 0x01: General SOCKS server failure

Тоже бы понять как это реализовать
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2020, 15:10
Ответы с готовыми решениями:

Как использовать всю мощь процессора на одно приложение?
есть приложение, которое запускается с правами администратора и которое проводит много вычислений...

Tora Package ошибка
есть пакет процедур, PK_PRT, который указал в свойстве PackageName компонента. Допустим в этом...

Кулер работает на полную мощь
Добрый день! C недавних пор при включении ноута (HP Elitebook 8460p) кулер работает на полную...

Geforce 9800 gt работает не в полную мощь
Привет, форум. Помогите пожалуйста решить проблему: Видеокарта geforce 9800 gt (512мб, 650/950,...

3
Garry Galler
2906 / 2216 / 781
Регистрация: 28.10.2013
Сообщений: 5,716
21.02.2020, 18:30 2
Демон тора (с настроенным конфигом) должнен быть запущен на компе. Иначе к кому ты собираешься подключаться - к Тору из Асгарда?
0
Wintreist
4 / 2 / 2
Регистрация: 23.09.2018
Сообщений: 41
21.02.2020, 22:52  [ТС] 3
Garry Galler, в принципе ~5 миллиардов джоулей не валяются на земле, но я говорю про Демона тора (Марвел, бери на заметку). Тор браузер запущен, и я полагаю он не сможет работать без демона, следовательно он запущен.
0
Рыжий Лис
Просто Лис
2830 / 1647 / 672
Регистрация: 17.05.2012
Сообщений: 5,351
Записей в блоге: 9
24.03.2020, 07:39 4
Перед тем как бездумно копировать мой код, нужно и вправду сгенерить хеш пароля и запустить демон тора.

Тот, который запускается с тор-браузером, имеет случайный пароль.

Добавлено через 3 минуты
Использование сети Tor
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2020, 07:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Amd 8320 Не работает на всю мощь
http://2.firepic.org/2/images/2015-08/05/ohqzbyesyk4a.jpg Посмотрите сами. Это еще повезло что...

Видеокарта работает далеко не на полную мощь!
Помогиnt. Играл сегодня в батлфилд 1 и мониторил. Загрузка гп было 99-100%. Потом все внезапно...

Сфокусировать всю мощь видеокарты в 1 процесс
Как можно сказать видеокарте чтобы она выделяла большую часть своей мощи вкладке из...

Мощь ноутбучных процов, миф или реальность?
Попалась на глаза таблица производительности процессоров, десктопных и стационарных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.