根据情况很难解释。我会尽力而为。
我正在制作一个程序,让新用户更容易使用漂网。
首先输入网关IP,然后输入目标IP,即您的界面。在程序中,一旦你输入所有这些,它会打开一个新的终端窗口,然后启动第二个程序,它翻转IP的原始顺序。我可以让用户手动切换它,但我希望它只是自动切换它。为此,我必须使用global
来保存输入信息,因此它只会切换它。问题是,当我运行第二个程序时,它只是重新启动第一个程序。
#This it the first program
#"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 > ")
drift()
call(["gnome-terminal"])
os.system("arpspoof -i " + inter + " -t " + gateway + " " + target)
我运行它,输入所有内容,然后打开第二个终端,然后我运行第二个程序来切换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)
当我运行它时,它几乎只运行frist程序,从" Gateway IP>的问题开始。 "
我完全不知道自己做错了什么。
由于
答案 0 :(得分:1)
我不知道“Driftnet”是什么,我不确定你要做什么,但我可以解释你所看到的行为。
在Driftnet2.py中,您致电:
import Driftnet
导致评估Driftnet.py中的Python代码。这就是import
语句的作用。您的所有代码都是顶级代码(drift()
方法除外,它是从顶层调用的),因此导入它会运行它。
您只有一个方法,而且没有顶级变量,因此global
声明无效。 (看起来您认为global
关键字适用于IPC,但我不确定。)
要设计此程序,您需要先退后一步并回答一些基本问题。比如,如果您想在一个进程中将Driftnet.py中的信息传输到另一个进程中的Driftnet2.py,那么该传输将如何发生? (命令行标志?环境变量?Unix域套接字?)一旦你知道你希望你的程序做什么,我们就可以帮助你实现它。
答案 1 :(得分:0)
您是否尝试在导入后添加全局变量等...然后将var inside函数调用为全局变量?
import os
import time
from subprocess import call
gateway = ''
target = ''
inter = ''
答案 2 :(得分: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
。