First commit - implementing single threaded CLI interface

This commit is contained in:
jwinterm
2014-07-20 23:12:47 -05:00
commit 069999a2d4
2 changed files with 110 additions and 0 deletions
View File
+110
View File
@@ -0,0 +1,110 @@
#!/usr/bin/env python
import argparse, os, sys, time
from subprocess import PIPE, Popen
from threading import Thread
from Queue import Queue, Empty
parser = argparse.ArgumentParser()
parser.add_argument("-m", "--match-anywhere", help="match anywhere in address", action="store_true")
parser.add_argument("wallet_name", help="file name for wallet binary")
parser.add_argument("wallet_pw", help="desired wallet password")
parser.add_argument("target", help="string to match in address")
args = parser.parse_args()
ON_POSIX = 'posix' in sys.builtin_module_names
def enqueue_output(out, queue):
for line in iter(out.readline, b''):
queue.put(line)
out.close()
def createWallet():
"""Method that will loop on itself in a single thread until match"""
p = Popen(["./simplewallet", "--set_log", "0", "--generate-new-wallet",
args.wallet_name, "--password", args.wallet_pw],
stdout=PIPE,
stdin=PIPE,
bufsize=1,
close_fds=ON_POSIX)
q = Queue()
t = Thread(target=enqueue_output, args=(p.stdout, q))
t.daemon = True # thread dies with the program
t.start()
t_start = time.time()
electrum = ''
electrum_coming = False
while time.time() - t_start < 10:
try:
line = q.get_nowait()
if "new wallet:" in line:
address = line.rstrip().split(': ')[1]
if "view key:" in line:
view_key = line.rstrip().split(': ')[1]
if electrum_coming:
electrum = line.rstrip()
if "PLEASE NOTE:" in line:
electrum_coming = line.rstrip()
except Empty:
pass
else:
pass
if len(electrum) > 2:
break
p.kill()
# print "Generated address: {0}".format(address)
if not args.match_anywhere:
print "Target: {0}, Address first chars: {1}".format(args.target, address[2:len(args.target)+2])
if args.target in address[2:len(args.target)+2]:
print "success1!"
with open('./{0}_info.txt'.format(args.wallet_name), 'w') as f:
f.write("Name:\n{0}\n\nAddress:\n{1}\n\nView key:\n{2}\n\nElectrum seed:\n{3}".format(
args.wallet_name, address, view_key, electrum))
return 0
else:
os.remove('./{0}'.format(args.wallet_name))
os.remove('./{0}.keys'.format(args.wallet_name))
os.remove('./{0}.address.txt'.format(args.wallet_name))
os.remove('./simplewallet.log')
return 1
elif args.match_anywhere:
print "Target: {0}, Address: {1}".format(args.target, address)
if args.target in address:
print "success2!"
with open('./{0}_info.txt'.format(args.wallet_name), 'w') as f:
f.write("Name:\n{0}\n\nAddress:\n{1}\n\nView key:\n{2}\n\nElectrum seed:\n{3}".format(
args.wallet_name, address, view_key, electrum))
return 0
else:
os.remove('./{0}'.format(args.wallet_name))
os.remove('./{0}.keys'.format(args.wallet_name))
os.remove('./{0}.address.txt'.format(args.wallet_name))
os.remove('./simplewallet.log')
return 1
if __name__ == "__main__":
if not args.match_anywhere:
print "You're target is {0} characters, expect to need {1} attempts to match at begininning of address".format(len(args.target), 62**len(args.target))
elif args.match_anywhere:
print "You're target is {0} characters, expect to need {1:.0f} attempts to match anywhere in the address".format(len(args.target), 1.0/((94.0-len(args.target))*(62.0**(94-len(args.target)))/(62.0**94)))
print 'starting'
time.sleep(1)
print '...'
time.sleep(1)
n = 1
t = time.time()
while True:
print "Attempt #{0}, total time = {1:.2f} seconds".format(n+1, time.time()-t)
out = createWallet()
if out == 0:
break
n += 1