バックグラウンド:
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'])
これが私が今抱えている問題の原因であるに違いありません。
助けていただければ幸いです。