2016-07-21 4 views
2

状況によって説明するのは難しいです。私はできる限りの努力をします。グローバルがうまく機能しない[Python]

私はドリフトネットを新しいユーザーに使いやすくするためのプログラムを作っています。 最初にゲートウェイIPを入力してからターゲットIPを入力します。プログラムでは、これらのすべてを入力すると、新しいターミナルウィンドウが開き、IPの元の順序を反転させる2番目のプログラムが開始されます。ユーザーが手動で切り替えることができますが、自動的に切り替えるだけです。これを行うには、入力情報を保持するためにglobalを使用する必要があります。問題は、最初のプログラムをもう一度やり直すという第2プログラムを実行するときです。

私はそれを実行し、すべてを入力してから2番目の端末を開き、2番目のプログラムを実行してIPを切り替えます。

#This is the second program 

#"Driftnet2.py" 

import os 
import time 
from subprocess import call 
import Driftnet 

os.system("arpspoof -i " + Driftnet.inter + " -t " + Driftnet.target + " " + Driftnet.gateway) 

私はそれはかなり単に「ゲートウェイIP>」の質問で始まる、延期プログラムを実行することを実行し

私は私が間違ってやっている全く見当もつかない。

おかげ

+0

2番目のプログラムで 'Driftnet.target'と' Driftnet.gateway'を印刷するとどうなりますか? – mitoRibo

答えて

0

あなたは、グローバルと関数の内部VARを呼び出す...など、インポート後にグローバル変数を追加しようとしたことがありますか?

import os 
import time 
from subprocess import call 
gateway = '' 
target = '' 
inter = '' 
+0

2番目または最初のプログラムでは? –

+0

最初に試してみてください。 –

+0

これは、「セグメンテーションフォールト」といい、arpspoofを使用して起動しませんが、新しい端末を開けません。 –

1

私は「流し網」であるかわからない、と私はあなたが何をしようとしている正確にわからないんだけど、私はあなたが見ている行動を説明することができます。

はDriftnet2.pyでは、呼び出し:Driftnet.pyでPythonコードを引き起こし

import Driftnet 

が評価されます。これは、importステートメントの機能です。すべてのコードはトップレベルです(drift()メソッドはトップレベルから呼び出されます)、インポートするとコードが実行されます。

メソッドは1つしかなく、トップレベルの変数がないため、global宣言は役に立たない。 (globalというキーワードがIPC用だと思われるようですが、わかりません)

このプログラムを設計するには、まず基本的な質問に戻って答えなければなりません。同様に、あるプロセスでDriftnet.pyから別のプロセスでDriftnet2.pyに情報を転送する場合、その転送はどのように行われますか? (コマンドラインフラグ?環境変数?Unixドメインソケット?)あなたのプログラムに何をしたいのか分かったら、それを実装するのを助けることができます。

+0

あなたはあなたがやっていることを知っているように聞こえますが、あまりにも悪いです。私は何をする必要があるのか​​正確には分かりませんが、Driftnet.pyのraw_input変数の情報をDriftnet2.pyに保存しておきます。私はこれを行うために使うべき方法を知らないが、何をお勧めしますか? –

+0

私が言ったように、私は「ドリフトネット」が何であるか、あるいはどのようにセットアップする必要があるのか​​分かりません。 2つのプログラムがお互いに話したがるようにするには、IPCについて学ぶ必要があります。これは、ここでのコメントに記述できる以上のものです。 –

0

これは、if __name__=='__main__':構成が存在するものです。これにDriftnet.pyのコードを変更します。

import os 
import time 
from subprocess import call 

def drift(): 
    global gateway 
    gateway = raw_input("Gateway IP > ") 
    time.sleep(0.5) 
    global target 
    target = raw_input("Target IP > ") 
    time.sleep(0.5) 
    global inter 
    inter = raw_input("Interface > ") 

if __name__=='__main__': 
    drift() 

    call(["gnome-terminal"]) 

    os.system("arpspoof -i " + inter + " -t " + gateway + " " + target) 

それはあなたにもDriftnet2.pyを少し変更している可能性があります。 import Driftnetを実行してグローバル変数にアクセスできるかどうかはわかりません。エラーが発生した場合は、代わりにimport __main__ as Driftnetをお試しください。

関連する問題