1

バックグラウンド:

NMAP、シェル スクリプト、および Python スクリプトを使用して、IP のリストでスキャンを実行しています。Python 部分は、nmap の XML 出力を解析して、2 つのリスト (稼働中のホストとダウンしているホストのリスト) を生成します。その後、Python はダウンしたホストのリストでシェル スクリプト (開始点) を再実行し、いずれかがアクティブになり、情報が xml に追加され、ホストの 2 つのリストが修正されるまで繰り返します。

問題: これは以前は機能していましたが、ダウンしているホストのリストでシェル スクリプトを実行すると、奇妙な動作 (構文エラー) が発生します。

Script:
# Grap Complete Info in XML file
sudo nmap -v -sS -oX full-scan.xml --append-output --no-stylesheet -iL $1

# Set permissions of xml for python script to write
sudo chmod a+rw full-scan.xml

# Clean NMAP XML Root Appends
sed '/<?xml/s/.*//' full-scan.xml > scan.tmp && mv scan.tmp full-scan.xml
sed 's/<\/nmaprun>//g' full-scan.xml > scan.tmp && mv scan.tmp full-scan.xml
sed '/<nmaprun/d' full-scan.xml > scan.tmp && mv scan.tmp full-scan.xml
echo "<nmaprun>" | cat - full-scan.xml > temp && echo "</nmaprun>" >> temp
mv temp full-scan.xml

# Run python parser here
./parseXMLnmap.py full-scan.xml

Error:
./scanIPlist.sh ip.list.down 

Starting Nmap 5.00 ( http://nmap.org ) at 2013-03-21 11:55 EDT
....
Nmap done: 8 IP addresses (0 hosts up) scanned in 0.59 seconds
       Raw packets sent: 16 (672B) | Rcvd: 0 (0B)
de????@????:~/workspace/nmap-script$   File "./scanIPlist.sh", line 6
sudo nmap -v -sS -oX full-scan.xml --append-output --no-stylesheet -iL $1
        ^
SyntaxError: invalid syntax

問題の場所を特定するのに混乱しています...次のコマンドを使用すると、「sudo nmap -v -sS -oX full-scan.xml --append-output --no-stylesheet -iL ip.list.down "

コマンドラインで..完全に正常に動作します。nmap がコマンドを実行しているのを見ることができます。スクリプトの残りの部分の続行を妨げているエラーはどこから来ているのでしょうか?

nmap コマンドの後にすべての行をコメントアウトすると機能するので、おそらく権限の問題だと思いましたが、sudo を使用して sed および mv コマンドを実行しようとしましたが、問題は解決しませんでした。

Permissions are as follows after the first run on the ORIGINAL IP list:
ls -l
total 32
-rw------- 1 user user 11469 2013-03-21 12:03 full-scan.xml
-rw------- 1 user user   110 2013-03-21 12:03 ip.list.down
-rw------- 1 user user   238 2013-03-20 14:44 ip.list.orig
-rw------- 1 user user   128 2013-03-21 12:03 ip.list.up
-rwx--x--x 1 user user  1528 2013-03-21 10:26 parseXMLnmap.py
-rwx--x--x 1 user user   676 2013-03-21 12:02 scanIPlist.sh

したがって、問題は、決して終わらないループが必要ですが、プロセスをどんどん作成し続けないことです。

ユーザー入力 開始 -> シェル スクリプト -> Python スクリプト -> シェル スクリプト -> .... というように、ユーザーによって中断されるまで続きます。

以前、私が使用していた私のpythonコードでは:

subprocess.call(['./scanIPList.sh', 'ip.list.down'])

プロセスが開いたままになり、コンピューターが最終的にクラッシュするまでプロセスが何度も作成され続けるため、これは良くありませんでした。子プロセスから切り離して、次のスクリプトを実行するときに終了する必要がありました。

私はこれを使ってみました:

subprocess.Popen([sys.executable, './scanIPlist.sh', 'ip.list.down'])

これが私が今抱えている問題の原因であるに違いありません。

助けていただければ幸いです。

4

2 に答える 2

0

SyntaxError: invalid syntaxpythonエラーです。Pythonプログラムでシェルコマンドを実行しようとしているようです。おそらく必要import subprocessです。

それとも#!/usr/bin/python、シェルスクリプトの先頭にありますか?

于 2013-03-21T16:47:32.363 に答える
0

あなたの問題は、このsubprocess.Popenへの呼び出しが実際に Python インタープリターを呼び出していることです ( sys.executableから):

subprocess.Popen([sys.executable, './scanIPlist.sh', 'ip.list.down'])

役立つコンテキストを次に示します。

>>> import sys
>>> print sys.executable
/usr/bin/python
>>> 

Popen への最初の引数は、渡されるexec(または同様の) 配列または文字列であると想定されているため、この場合の最初の引数は、そのシェルの場合、「/bin/sh」または「./scanIPlist.sh」のいずれかにする必要があります。スクリプトは実行可能です:

subprocess.Popen(['/bin/sh', './scanIPlist.sh', 'ip.list.down'])
# or
subprocess.Popen(['./scanIPlist.sh', 'ip.list.down'])
于 2013-03-21T20:21:14.643 に答える