Если я запускаю эту команду самостоятельно:
nmap -PN -p 22 --open -oG - 10.15.86.0/24 | awk '$NF~/ssh/{print$2}' > sshopen.txt
Я получаю желаемый результат:
10.15.86.4
10.15.86.5
10.15.86.9
10.15.86.11
etc...
Все хосты в моей сети с открытым портом ssh. Однако, когда я пытаюсь запустить ту же команду в подпроцессе Python, кажется, что она пропускает awk. Питон ниже:
import subprocess
subnet = raw_input("Enter subnet to scan: ")
command1 = "nmap -PN -p 22 --open -oG - 10.15.86.0/24 | awk '$NF~/ssh /{print$2}' > sshopen.txt".split()
#command = ["nmap", "-PN", "-p", "22", "--open", "-oG", "-", subnet, "|", "awk", "'$NF~/ssh/{print $2}'", ">", "sshopen.txt"]
nmap = subprocess.Popen(command1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
nmap_info, out = nmap.communicate()
print nmap_info
Вы заметите закомментированную «команду», так как я пробовал как «команда» и «команда1». Оба возвращают вывод:
Host: 10.15.86.4 () Status: Up
Host: 10.15.86.4 () Ports: 22/open/tcp//ssh///
Host: 10.15.86.5 () Status: Up
Host: 10.15.86.5 () Ports: 22/open/tcp//ssh///
etc...
Он выводит так, как будто канала awk нет (nmap -PN -p 22 --open -oG - 10.15.86.0/24), а не (nmap -PN -p 22 --open -oG - 10.15.86.0/24 | awk '$NF~/ssh/{print$2}' > sshopen.txt). Почему он не применяет awk в скрипте?
Спасибо
nmap
иawk
) в один вызовPopen()
, а это работает не так. Смотрите ответ @delta ниже. - person John Gordon   schedule 22.08.2017