Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 6, 2022 04:27:12

amwww
Зарегистрирован: 2022-12-06
Сообщения: 12
Репутация: +  -1  -
Профиль   Отправить e-mail  

цикл else

Напишите как после else начать выполнение строки ‘for x in range(10):’?

 import random
import subprocess
pas = ''
for x in range(10): #Количество символов (10)
    pas = pas + random.choice(list('1234567890abcdefghigklmnopqrstuvyxwzABCDEFGHIGKLMNOPQRSTUVYXWZ'))
cmd = f'run --pass {pas}'
PIPE = subprocess.PIPE
p = subprocess.Popen(cmd, shell = True)
if 'world' in p: # если в выводе консоли есть слово "world" 
    fp = open('/home/test.txt', 'w') #    записать вывод в файл
    fp.write(p)
    fp.close()
else: #иначе начать выполнение строки 4

Офлайн

#2 Дек. 6, 2022 08:58:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9847
Репутация: +  853  -
Профиль   Отправить e-mail  

цикл else

  
import random
import subprocess
 
pas = ''
while True:
    for x in range(10): #Количество символов (10)
        pas = pas + random.choice(
            '1234567890'
            'abcdefghigklmnopqrstuvyxwz'
            'ABCDEFGHIGKLMNOPQRSTUVYXWZ'
        )
    cmd = f'run --pass {pas}'
    PIPE = subprocess.PIPE
    p = subprocess.Popen(cmd, shell=True)
    if 'world' in p: # если в выводе консоли есть слово "world"
        fp = open('/home/test.txt', 'w') #    записать вывод в файл
        fp.write(p)
        fp.close()
        break



Отредактировано py.user.next (Дек. 6, 2022 08:58:53)

Офлайн

#3 Дек. 6, 2022 10:23:14

amwww
Зарегистрирован: 2022-12-06
Сообщения: 12
Репутация: +  -1  -
Профиль   Отправить e-mail  

цикл else

 if 'world' in p: # если в выводе консоли есть слово "world"
Демонстрирует ошибку
 Exception has occurred: TypeError
argument of type 'Popen' is not iterable
  File "/home/script.py", line 14, in <module>
    if 'world' in p: # если в выводе консоли есть слово "world"

Отредактировано amwww (Дек. 6, 2022 10:23:38)

Офлайн

#4 Дек. 6, 2022 10:32:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9847
Репутация: +  853  -
Профиль   Отправить e-mail  

цикл else

  
>>> import subprocess
>>> 
>>> p = subprocess.Popen('cat /etc/passwd'.split(), stdout=subprocess.PIPE)
>>> 'bin' in p.stdout.read().decode('utf-8')
True
>>>



Офлайн

#5 Дек. 6, 2022 16:14:30

amwww
Зарегистрирован: 2022-12-06
Сообщения: 12
Репутация: +  -1  -
Профиль   Отправить e-mail  

цикл else

Вот такой код:

 import random
import subprocess
pas = ''
while True:
    for x in range(4): #Количество символов (4)
        pas = pas + random.choice(list('1234567890')) #Символы, из которых будет составлен пароль
    print('your password is: ', pas)
    cmd = f'torsocks --P {pas}'
    stdout=subprocess.PIPE
    p = subprocess.Popen(cmd, shell = True)
    print ('consol:', p.stdout)
    if '3333' in p.stdout.read().decode('utf-8'): # если в выводе консоли есть порт "3333" 
        fp = open('/tmp/test.txt', 'w') #    записать вывод в файл
        fp.write(p)
        fp.close()
    break
В консоли пишет:
 your password is:  2269
                       consol: None
                                   Traceback (most recent call last):
                                                                       File "/home/script.py", line 12, in <module>
                                                                                                                          if '3333' in p.stdout.read().decode('utf-8'): # если в выводе консоли есть порт "3333" 
                             AttributeError: 'NoneType' object has no attribute 'read'
                                                                                                                                                                                                                                                                          
Please provide an application to torify.
/tmp/test.txt - пуст

Офлайн

#6 Дек. 6, 2022 16:31:59

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

цикл else

 p = subprocess.Popen(cmd, stdout=subprocess.PIPE)

Офлайн

#7 Дек. 6, 2022 17:12:13

amwww
Зарегистрирован: 2022-12-06
Сообщения: 12
Репутация: +  -1  -
Профиль   Отправить e-mail  

цикл else

xam1816
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
Так хуже:
 your password is:  9950
                       Traceback (most recent call last):
                                                           File "/home/script.py", line 10, in <module>
                                                                                                              p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
                                                                                                                                                                 File "/usr/lib/python3.10/subprocess.py", line 969, in __init__
                                                self._execute_child(args, executable, preexec_fn, close_fds,
                                                                                                              File "/usr/lib/python3.10/subprocess.py", line 1845, in _execute_child
                                                                                                                                                                                       raise child_exception_type(errno_num, err_msg, err_filename)
                                                               FileNotFoundError: [Errno 2] No such file or directory: 'torsocks -P 9950'

Офлайн

#8 Дек. 6, 2022 22:54:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9847
Репутация: +  853  -
Профиль   Отправить e-mail  

цикл else

amwww
Вот такой код:
  
import random
import subprocess
pas = ''
while True:
    for x in range(4): #Количество символов (4)
        pas = pas + random.choice(list('1234567890')) #Символы, из которых будет составлен пароль
    print('your password is: ', pas)
    cmd = f'torsocks --P {pas}'
    stdout=subprocess.PIPE
    p = subprocess.Popen(cmd, shell = True)
    print ('consol:', p.stdout)
    if '3333' in p.stdout.read().decode('utf-8'): # если в выводе консоли есть порт "3333" 
        fp = open('/tmp/test.txt', 'w') #    записать вывод в файл
        fp.write(p)
        fp.close()
    break
Судя по этому коду, ты даже не понимаешь, что ты делаешь.

Например fp.write(p), по твоему замыслу, что должно давать в результате? В переменной p находится индентификатор процесса вообще-то, а не вывод процесса. Вывод процесса находится в переменной stdout, которая вложена в объект p.

Когда ты пишешь команду с torsocks, с чего ты взял, что через --P подаётся пароль туда?

Также ты читаешь как-то странно. Видимо, ты даже не можешь читать внимательно код.
Например, я писал тебе пример и с subprocess.PIPE, и из random.choice() убрал list, который там не нужен, потому что random.choice() нужна любая перебираемая последовательность, а строки в питоне уже перебираемые, их не нужно в список превращать. Но ты ни subprocess.PIPE не написал, ни этот list не убрал.

Так что советую тебе разделить задачу на составляющие и решать эти части по отдельности. Принцип программирования - “разделяй и властвуй”.
1. Сначала создай правильный код, который работает без torsocks и просто что-то запускает и пишет вывод этой программы в файл. Убедись, что скрипт и запускает программу, и пишет её вывод в файл.
2. Потом запусти torsocks с правильными опциями и убедись, что он запускается и эти указанные опции тоже работают именно в этом виде.
3. Соедини работающий скрипт из пункта 1. с работающим со всеми опциями правильно torsocks из пункта 2.



Отредактировано py.user.next (Дек. 6, 2022 22:57:20)

Офлайн

#9 Дек. 7, 2022 09:19:09

amwww
Зарегистрирован: 2022-12-06
Сообщения: 12
Репутация: +  -1  -
Профиль   Отправить e-mail  

цикл else

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

Отредактировано amwww (Дек. 7, 2022 09:43:35)

Офлайн

#10 Дек. 7, 2022 11:03:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9847
Репутация: +  853  -
Профиль   Отправить e-mail  

цикл else

amwww
Не понятно как прочесть вывод консоли subprocess
Для этого сначала надо найти программу консольную, которую ты запускаешь и она выводит на консоль что-то. В консоли есть два канала вывода - stdout и stderr.

Если Popen() запускаешь просто с командой, то вывод этой команды пойдёт на экран. Если же ты передаёшь в Popen() аргумент stdout со значением subprocess.PIPE, то вывод команды по каналу stdout прикрепится к атрибуту stdout внутри объекта Popen(). Если же ты передаёшь в Popen() аргумент stderr со значением subprocess.PIPE, то вывод команды по каналу stderr прикрепится к атрибуту stderr внутри объекта Popen().

После выполнения команды вывод с консоли либо будет на экране, либо будет прикреплён к этим атрибутам внутри объекта, возвращённого из Popen(). Дело в том, что программа может писать как в stdout, так и в stderr в пределах одного выполнения. Поэтому и там и там могут быть записи.

Пример
  
>>> import subprocess
>>> 
>>> p = subprocess.Popen(
...     ['cat', '/etc/passwd', 'nothing'],
...     stdout=subprocess.PIPE,
...     stderr=subprocess.PIPE
... )
>>> 
>>> text_from_stdout = p.stdout.read().decode('utf-8')
>>> text_from_stderr = p.stderr.read().decode('utf-8')
>>> 
>>> print(text_from_stdout[:20])
root:x:0:0:root:/roo
>>> 
>>> print('root' in text_from_stdout)
True
>>> print('take' in text_from_stdout)
False
>>> 
>>> print(text_from_stderr[:20])
cat: nothing: No suc
>>> print('such' in text_from_stderr)
True
>>> print('ball' in text_from_stderr)
False
>>>
>>> p
<subprocess.Popen object at 0x7f2140652710>
>>>
>>> subprocess.PIPE
-1
>>>
Здесь файл /etc/passwd существует и программа cat его читает и выводит на свой stdout. Так как в Popen() передан аргумент stdout со значением subprocess.PIPE (которое просто является числовой константой), stdout программы cat присоединяется к атрибуту в объекте p (иначе всё выводилось бы на экран).
Здесь файл nothing не существует и программа cat его не может найти и выводит на свой stderr сообщение об отсутствии файла nothing. Так как в Popen() передан аргумент stderr со значением subprocess.PIPE (которое просто является числовой константой), stderr программы cat присоединяется к атрибуту в объекте p (иначе всё выводилось бы на экран).
И потом мы просто эти байтовые строки превращаем в символьные строки через декодирование в кодировку utf-8.
И после этого мы можем в этих символьных строках искать другие символьные строки.
Строка root есть в выводе программы cat, поэтому root находится в выводе программы cat, сохранённом в переменную.
Строки take нет в выводе программы cat, поэтому take не находится в выводе программы cat, сохранённом в переменную.
Строка such есть в выводе ошибок программы cat, поэтому such находится в выводе программы cat, сохранённом в переменную.
Строки ball нет в выводе ошибок программы cat, поэтому ball не находится в выводе программы cat, сохранённом в переменную.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version