2016-08-29 25 views
1

プロジェクトの辞書攻撃スクリプトを書き続けます。Pythonファイルを分離する関数を分離してグローバル変数が定義されていません

私のスクリプトは、SSHで実際に辞書攻撃を行う2つの機能を呼び出します。最初に私はmain()関数

def get_args(): 
    # stuff for parsing blah blah 


    global service, username, wordlist, address, port, delay 

    service = args.service 
    username = args.username 
    wordlist = args.password 
    address = args.address 
    port = args.port 
    delay = args.delay 

    return service, username, wordlist, address 


def main(): 

    service, username, wordlist, address = get_args() 

    # output and stuff 

    # SSH bruteforce 
    if service == 'ssh': 
     if address is None: 
      print R + "[!] You need to provide a SSH address for cracking! [!]" + W 
    else: 
     print C + "[*] Address: %s" % address + W 
     sleep(0.5) 
     global port 
     if port is None: 
      print O + "[?] Port not set. Automatically set to 22 for you [?]" + W 
      port = 22 

     print C + "[*] Port: %s " % port + W 
     sleep(1) 
     print P + "[*] Starting dictionary attack! [*]" + W 
     print "Using %s seconds of delay. Default is 1 second" % delay 
     sshBruteforce(address, username, wordlist) 

ラインでsshBruteforce(address, username, wordlist)参照私はインポート私はモジュールとして別々のファイルに含める機能を、以下、main.pyに機能)(私のget_argsに私のグローバル変数を宣言しましたmodule1.pyインサイド

from module1 import * 

:問題が発生した場所

# ssh_connect() 
def ssh_connect(password, code=0): 
    ssh = paramiko.SSHClient() 
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    paramiko.util.log_to_file("filename.log") 

    try: 
     ssh.connect(address, port=port, username=username, password=password) 


def sshBruteforce(address, username, wordlist): 
    wordlist = open(wordlist, 'r') 

    for i in wordlist.readlines(): 
     password = i.strip("\n") 
     try: 
      response = ssh_connect(password) 
      # actual bruteforcing here. The above line references the ssh_connect() 
      # function, which is where the problem actual occurs 

ライン、ssh.connect(address, port=port, username=username, password=password)です。しかし

python main.py -u root -w wordlist.txt -s ssh -p 22 -a 192.168.1.3 

これは、変数username内の文字列"root"を格納し、そしてなど、main.pyプログラムはsshBruteforce()関数を実行した後、これが発生します:のは、私はそうのようなスクリプトを実行するとしましょう

global name 'address' is not defined 

これは、ssh_connect()関数内で、ssh.connect(address, port=port, username=username, password=password)という行で、変数addressには何も格納されていないことを意味します。私はなぜこれが起こっているのか分かりません。

from __main__ import *を含めてmodule1.pyには何も変わりません。私はこれらの質問の多くを見てきましたが、私の状況に似ているものはありません。

答えて

-1

グローバル定義の概念は、関数の外で定義する必要があることを意味します.Nothingまたは何かでfuction以外のすべてのグローバルを初期化し、問題が解決されたかどうかを確認してください。

関連する問題