1

Python 2.6.5でスクリプトをコンパイルしました。このスクリプトは、nmapで最もよく使用する関数を自動化し、出力をデスクトップ上のtxtファイルに記録するためのものです。私はまだPythonを学んでいるだけなので、これをすべて自分で書いたわけではありません。バックトラックを更新するための更新スクリプトを見つけ、それをインデントとコマンドのテンプレートとして使用し、それを変更して、必要なものを提供するために自分のものをいくつか追加しました。

私が抱えている問題はこのブロックにあります

def nmap_target():


    try:    ip = raw_input(" [>] Enter ip to scan:  ")

except KeyboardInterrupt:
    print "\n [>] Exiting!\n"
            sleep(1)
    sys.exit()
    print " [>] Attempting targeted scan.\n"
    #print ip 
if subprocess.Popen("nmap ip >> //root/Desktop/Target.txt && tail /root/Desktop/Target.txt",shell=True).wait() == 0:
    print "\n"
    print " [>] Targeted scan completed successfully!\n"
            menu_main()

else:
    print "\n"
    print " [>] Nmap scan failed.\n"

その背後にある考え方は、ユーザーにipアドレスをraw_input()に入力してipと呼ぶように要求することです。次に、subprocess.Popen( "nmap ipを使用してnmapに渡そうとしています。問題は、上記のとおりです。 IPアドレスを出力してエラーを返すのではなく、nmap ipを書き込むだけです。ネットワークからスキャンアウトしようとします。テストするたびに、インターネットケーブルがルーターから抜かれていることを確認します。これにより、バグが発生します。ただし、インターネットテストなので、次のコードを実行しようとすると、インターネットがルーターから切断されている場合は、menu_main()セクションのinternet_check()オプションをハッシュ化する必要があります。

私はこれに4日間を費やし、それが私を怒らせました。最初は数値を浮動小数点に変換する必要があると思ったので、それを試しましたが、それでも同じように、さまざまなことを試し、インターネットをトロールするのに何時間も費やしました。無駄への答えを探しています。

私は今、それが原因であると私が試みているコマンドではないと確信しています。それはexitステートメントだと思います。「print」と書かれた行の直後に「printip」を入れてみました[>]ターゲットスキャンを試みています。\ n "と入力したIPアドレスが画面に表示されていることを確認します。これにより、raw_input()が機能していることがわかりました。失敗した場合は、次の場所に移動するとすぐに、次のいずれかである必要があります。 exitステートメントまたはおそらくインデントに問題がありますが、よくわかりません。キーボード割り込みと以下の数行をハッシュ化してみました。try:を移動してみました。代わりに、ifステートメントを試し、代わりに他のコマンドを試しました。しかし、それは動作しませんaaaarrrrrgggghhhhhh

ipがraw_input()に入力され、ipアドレスを保持するように作成されたファイルipが破棄されてから、subprocess.Popen("nmapip。

私が言ったように、私はこのスクリプトを最初から書いたわけではなく、これはこのような私の最初のプロジェクトなので、学ぶことがたくさんあります。私はPythonのマニュアルページをすべて読み、あらゆる種類のチュートリアルを調べましたが、これを理解していません。どんな助けでも大歓迎です

誰かが興味を持ったら、コードを正しく投稿する方法がわかり次第、完全なスクリプトを投稿します

4

2 に答える 2

1

文字列から変数を分離する必要があります!これを試してください:D

if subprocess.Popen('nmap '+ip+' >> //root/Desktop/Target.txt && tail /root/Desktop/Target.txt',shell=True).wait() == 0:

それが役に立てば幸い!

編集-何らかの理由でPythonが生の入力を整数として受け取る場合は、次のように文字列に変換します。

if subprocess.Popen('nmap '+str(ip)+' >> //root/Desktop/Target.txt && tail /root/Desktop/Target.txt',shell=True).wait() == 0:

Pythonはstr型とint型を連結するのが好きではないので、スクリプトが失敗したときに通知します。PIは、ip変数がstr型になると確信しているので、最初の例は機能するはずです。

乾杯!

于 2012-11-29T19:20:50.043 に答える
1

文字列を適切にフォーマットする必要があります。そうしないと、文字列ipはまったく解釈されません。つまり、実際のIPに置き換えられません。次のようなものを試してください:

cmd = "nmap ${0} >> [....] root/Desktop/Target.txt".format(ip)
if subprocess.Popen(cmd):

%演算子を使用することもできます。

cmd = "nmap %s >> [....] root/Desktop/Target.txt" % ip
于 2012-11-29T19:21:31.303 に答える