2016-08-29 1 views
1

프로젝트에 대한 사전 공격 스크립트를 계속 작성합니다.Python 파일을 분리하기 위해 함수를 분리 한 후에 전역 변수가 정의되지 않았습니다.

내 스크립트는 SSH에 대한 실제 사전 공격을 수행하는 두 가지 기능을 요구합니다. 우선은 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)이다. 이 전 스크립트과 같이 실행 해 봅시다 다음 main.py 프로그램이 sshBruteforce() 함수를 실행하면, 그러나

python main.py -u root -w wordlist.txt -s ssh -p 22 -a 192.168.1.3 
이 변수 username 내의 문자열 "root"를 저장

, 등이 발생합니다

global name 'address' is not defined 

이 문제는 ssh_connect() 함수 내에서 행 ssh.connect(address, port=port, username=username, password=password)과 함께 발생합니다. 즉, 변수 address에는 아무 것도 저장되어 있지 않습니다. 나는 이것이 왜 발생하는지 모른다.

from __main__ import *을 포함하여 module1.py 안에 아무 것도 바뀌지 않습니다. 나는이 많은 질문을 보았지만 아무도 내 상황과 비슷하지 않다.

답변

-1

전역 정의의 개념은 함수 외부에서 정의해야한다는 것을 의미합니다. None을 사용하여 전역 외부를 초기화하거나 문제가 해결되었는지 확인하십시오.

관련 문제