Я бы хотел, чтобы мой скрипт открывал 3 терминала и выполнял разные команды в каждом, но все, что он делает, это запускает сканирование nmap в исходном терминале и открывает 3 пустых терминала.
import subprocess
TARGET_IP_ADDRESS = "IPHERE"
terminal_windows = []
for i in range(3):
terminal_windows.append(subprocess.Popen(["gnome-terminal"]))
subprocess.run(["nmap", "-T5", "-A", "-p-", "--min-rate=500", TARGET_IP_ADDRESS], check=True, stdin=terminal_windows[0].stdin)
subprocess.run(["whatweb", TARGET_IP_ADDRESS], check=True, stdin=terminal_windows[1].stdin)
subprocess.run(["gobuster", "dir", "http://" + TARGET_IP_ADDRESS + "/", "--wordlist", "/usr/share/dirb/wordlists/common.txt"], check=True, stdin=terminal_windows[2].stdin)
Запуск команд в отдельных окнах — обычное требование для начинающих, но на самом деле это не масштабируемо. Более универсальным решением является запуск фоновых команд с выводом в файл журнала, который вы затем можете просмотреть или tail -f и т. д. с любого терминала.






Если вы дождетесь завершения сканирования NMAP, запустится команда whatweb, а затем gobuster в том же терминале.
Что вы сделали, так это открыли 3 пустых терминала в цикле for, а затем последовательно выполнили команды терминала в текущем терминале.
Просто выполните 3 вызова подпроцесса.
import subprocess
TARGET_IP_ADDRESS = "IPHERE"
ls_cmd = []
ls_cmd[0] = f"""nmap -TS -A -p- --min-rate=500 {TARGET_IP_ADDRESS}; echo; read -p "Press enter to continue....";"""
ls_cmd[1] = f"""whatweb {TARGET_IP_ADDRESS}; echo; read -p "Press enter to continue....";"""
ls_cmd[2] = f"""gobuster dir http://{TARGET_IP_ADDRESS}/ --wordlist /usr/share/dirb/wordlists/common.txt; echo; read -p "Press enter to continue....";"""
_ = [subprocess.run(f"gnome-terminal -e '{cmd}'", shell=True) for cmd in ls_cmd]
Теперь он открывает 3 отдельных терминала, но они закрываются через 0,5 секунды после открытия.
хорошо. вы можете добавить паузу с помощью read -p "Press enter to continue...."; позвольте мне отредактировать мой ответ.
Вы можете указать команду для запуска в качестве аргумента
gnome-terminal; это упростит ваш код до тривиального.