Как сравнить запрос request.get в операторе if else - PullRequest
0 голосов
/ 30 мая 2019

Я создаю новый сценарий, который будет принимать в качестве входного списка секретных ключей Ethereum, создавать соответствующие адреса с балансами и сохранять баланс в файле, если он найден вместе с закрытым ключом и адресом.

Теперь я почти уверен, что моя проблема находится в условной, но не могу ее решить.

Шаги сценария: 1. Принять файл закрытых ключей в качестве входных данных (-i флаг) 2. Преобразовать их впубличные адреса / их декодирование 3. Запустите вызов API для Etherscan для получения информации об адресе 4. Если json () ["result"]> 0 в вызове API, запишите его в выходной файл (флаг -o), иначе выведитеи спать в течение 1 секунды

enter image description here

Кто-нибудь может подсказать, где я делаю ошибку?

Мой код:

#!/usr/bin/python
import sys, os, argparse, requests, ethereum, binascii, time
from multiprocessing import Pool

def scanether(balance):
    try:
        # Convert private key to address and print the result
        eth_address = ethereum.utils.privtoaddr(INPUTFILE)
        eth_address_hex = binascii.hexlify(eth_address).decode("utf-8")
        eth_balance = requests.get("https://api.etherscan.io/api?module=account&action=balance&address=0x" + eth_address_hex + "&tag=latest&apikey=APIKEYHERE").json()["result"]

        # Check if the result is > 0
        if ('result' != 0) in r.eth_balance: 
            print("[*] Address with balance found: " + eth_address_hex + priv)
            # Write match to OUTPUTFILE
            fHandle = open(OUTPUTFILE,'a')
            fHandle.write(eth_address_hex + privkey + "\n")
            fHandle.close()
        else:
            print("balance: {} address: 0x{} privkey: {}".format(float(eth_balance)/100000000, eth_address_hex, priv))
            time.sleep(1)


    except Exception as e:
        return

if __name__ == '__main__':
    print("""
# Finding the Ethereum address with balance
        """)
    # Parse arguments
    parser = argparse.ArgumentParser()
    parser.add_argument('-i', '--inputfile', default='input.txt', help='input file')
    parser.add_argument('-o', '--outputfile', default='output.txt', help='output file')
    parser.add_argument('-t', '--threads', default=200, help='threads')
    args = parser.parse_args()

    INPUTFILE=args.inputfile
    OUTPUTFILE=args.outputfile
    MAXPROCESSES=int(args.threads)

    try:
        addresses = open(INPUTFILE, "r").readlines()
    except FileNotFoundError as e:
        print(e)
        exit(e.errno)

    print("Scan in progress...")
    pool = Pool(processes=MAXPROCESSES)
    pool.map(scanether, addresses)
    print("Scan finished.")

Вывод ниже: enter image description here

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Проблема в том, что вы используете некоторые переменные, которые не входят в область действия функции:

def scanether(balance):
    try:
        # Convert private key to address and print the result
        eth_address = ethereum.utils.privtoaddr(INPUTFILE)
        ...

        # Check if the result is > 0
        if ('result' != 0) in r.eth_balance: 
            print("[*] Address with balance found: " + eth_address_hex + priv)
            # Write match to OUTPUTFILE
            fHandle = open(OUTPUTFILE,'a')
            ...

    except Exception as e:
        return

Здесь INPUTFILE и OUTPUTFILE не находятся в области видимости, это вызовет исключение, которое захватывается, а затем функция просто возвращает ...

Вам нужно передать их в качестве аргументов:

def scanether(balance, INPUTFILE, OUTPUTFILE):
    ...


...

    print("Scan in progress...")
    pool = Pool(processes=MAXPROCESSES)
    def scanether_wrapper(address, ifile=INPUTFILE, ofile=OUTPUTFILE):
        return scanether(address, ifile, ofile)
    pool.map(scanether_wrapper, addresses)
    print("Scan finished.")
0 голосов
/ 30 мая 2019

Вы можете использовать приведенный ниже код для справки.Перед обработкой ответа вы должны убедиться в том, что ваши запросы выполнены успешно.

Обратитесь к приведенному ниже коду для дальнейшей справки.

import requests
url  = "https://******.com"
r = requests.get(url)
print(r.status_code)

Всегда проверяйте, равен ли код состояния 200 перед началом работыс ответом.

Спасибо!

...