2017-08-21 10 views
1

を停止します。サブプロセスの実行は、最初のパイプまでのコマンドを私は自分自身でこのコマンドを実行する場合は、

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をスキップするようです。以下のPython:

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 

私は 'command'と 'command1'のようにコメントした 'command'に気付くでしょう。よりむしろ(nmapの-PN -p 22 - - ないパイプAWKは(10.15.86.0/24 nmapの-PN -p 22 --open -OG)が存在しないかのようにそれが出力

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... 

:の戻り出力の両方-open -oG - 10.15.86.0/24 | awk '$ NF〜/ ssh/{print $ 2}'> sshopen.txt)。 スクリプト内でawkが適用されないのはなぜですか?

おかげ

+0

あなたは1 'popenの()'の呼び出しに二つの別々のコマンド( 'nmap'と' awk')を詰め込むしようとしている、それはですどのように動作していない。以下の@デルタの答えをご覧ください。 –

+0

ああ、大丈夫です。私はあなたがPopen()を1つの巨大な1つのライナーとして扱うことができると思っていました。意味をなさないありがとう! – cootermelon

答えて

0

これは、Pythonの公式subprocess docからである

p1 = Popen(["nmap", "-PN", "-p", "22", "--open", "-oG", "-", subnet], stdout=PIPE) 
p2 = Popen(["awk", "$NF~/ssh/{print$2}"], stdin=p1.stdout, stdout=PIPE) 
p1.stdout.close() 
output = p2.communicate()[0] 

または

check_output(command, shell=True) 

を試してみてください。

security considerationsにはshell=Trueがありますが、

他のpopen関数とは異なり、この実装は暗黙的にシステムシェルを呼び出すことはありません。つまり、シェルのメタキャラクタを含むすべての文字を子プロセスに安全に渡すことができます。シェルが明示的に呼び出された場合、shell = Trueを使用して、シェルインジェクションの脆弱性を回避するためにすべての空白とメタキャラクタが適切に引用されるようにするのはアプリケーションの責任です。


  1. https://docs.python.org/3/library/subprocess.html#replacing-shell-pipeline
  2. https://docs.python.org/3/library/subprocess.html#security-considerations
+0

これはうまくいきました、ありがとうございます。 – cootermelon

関連する問題