这是一个无限循环的问题,评论中的同事澄清了我的看法,如果你愿意,可以把它记下来
我在这里阅读了其他一些问题和答案,并尝试执行这些建议,但没有成功。因为我不是在写专有代码,所以我可以完整地发布它,不会太长,但我希望堆栈交换不介意。。。此外,您可以随意使用和/或修改。
#!/usr/bin/env python2.7
import sys, random, subprocess, signal
def main(argv=None):
if argv is None:
argv = sys.argv
def signal_handler(signal, frame):
fdHT.close()
fdWL.close()
print 'n'
return 1
signal.signal(signal.SIGINT, signal_handler)
pathToWL = str(sys.argv[1])
pathForHT = str(sys.argv[2])
mId = str(sys.argv[3])
SaltCharSet = str("a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9")
SaltCharSet = SaltCharSet.split(" ")
try:
fdWL = open(pathToWL, 'r')
except:
print "Could not open wordlist file."
return 2
try:
fdHT = open(pathForHT, 'a')
except:
print "Could not open file for hash table"
fdWL.close()
return 3
#We have our wordlist now step through the thing and start generating hashes.
toStop = False
#cursor = 0 #Use the cursor later once this program evolves
#print 'Entering while 1'
while(toStop == False):
try:
ln = str(fdWL.readline())
except:
fdHT.close()
fdWL.close()
return 4
if ln == '':
toStop = True #This should have been an ASSIGNMENT not a test, was ==
ln = ln.strip("n")
ln = ln.strip("r")
if len(ln) < 6:
continue
# create random salts
# send ln, id, and salts to hashpipe
salt = []
lenOfSalt = random.randint(6,16)
#print 'Entering while 2'
while(len(salt) < lenOfSalt + 1):
aORn = random.randint(0,1)
if aORn == 0:# Its a letter
uORl = random.randint(0,1)
if uORl == 0:
salt.append(SaltCharSet[(random.randint(0,25))].upper())
elif uORl == 1:
salt.append(SaltCharSet[(random.randint(0,25))].lower())
else:
print "Random Int 'uORl' out of bounds"
fdHT.close()
fdWL.close()
toStop = True
return 5 # I don't know what happened
elif aORn == 1:# Its a number
salt.append(SaltCharSet[(random.randint(26, 35))])
else:
print "Random Int 'aORn' out of bounds"
fdHT.close()
fdWL.close()
toStop = True
return 6 # I don't know what happened
#Generated Salt
salt = "".join(salt)
wholeArg2 = str("$"+mId+"$"+salt)
try:
mHash = str(subprocess.check_output([r"hashpipe", ln, wholeArg2]))
except:
print " error getting hash"
#Clean-up
fdHT.close()
fdWL.close()
toStop = True
return 7
#Generated hash, now write it to the fdHT file
print str(ln+"t"+mHash)
fdHT.write(str(ln+"t"+mHash))
#cursor = fdWL.tell()
print 'done with whiles'
fdHT.close()
fdWL.close()
return 0
if __name__ == "__main__":
sys.exit(main())
这个脚本调用了我编写的一个小C程序,用GNUscrypt_r()函数对字符串进行散列。。。它挂在最后,我必须用ctrl-c来保释。。。这是一些示例输出。。。
zurumba`tico $6$96u6sUy05rM69$1NLxLYXS9tAf05szgV0/GH6pvykOPsuEIlGxOkDOMNEixGiN8oeTG.xxIq/D19YpArMWtD1xJMG9sKWgA9xzK/
zurupeto $6$O2510Y900o02008$BO2OadT8Bvje78C2JhuZ6r/.iJHz.s9UfET8MU93iGy57bbe/qh9/Uj4jSkVSCyknegnkAB2JF7vRgWohkGVI0
zutana $6$Ur2i9m95$E2WqrEnld4aPa1bYAlCNnMEE0nmwxNlfB9ozVc3I6NCKXHqnSyspZrqIq2usqNf2JwlVF1myhqIn26a71Dm510
zutano $6$8x482Lar4qj$LupCZ9t2ImG.nRVH9xHPsyyx9emiImNTRaErxNrtsGyWjeO3XZLzj.F1D3eQOsiurQeQMWeQ3lF5ef.o3iesg.
zuzo`n $6$G9JP2GE$FAoZGGQNNycPfGCHq/Ra4MSQNknATMgHLzk8N9FHDefbZm/Hcx6JdV/sZdbkFHVVkoRjTnoUP9mw6CkE/.4fI.
^C
我哪里错了?
我认为您可以进行两项更改,以提高编写正确运行的代码的机会。
首先,使用with
语句来处理打开和关闭文件的操作。如果稍后代码中发生异常或return
语句,则使用with open("filename") as file_obj
将自动关闭文件。
其次,使用for
循环读取文件的行,而不是在while
循环的每个循环中调用readline
。for
循环将一直运行到找到文件的末尾,然后停止。如果您需要对文件结束的反应不同于对某些其他终止条件的反应,则可以对特殊终止情况使用break
,并在循环中放入else
子句(只有在for
循环完成而不中断时才会运行)。
可能有一个更好的答案,我很可能不是很"蟒蛇",我不是一个可以说的人,但这解决了问题,但也可能会提出另一个问题,我放弃了只包含"\r\n"或"\n\r"的空行。
更新:我将if语句移回了strips之前,它仍然适用于此文件,但可能无法正常工作。时间会告诉我的,我只需要这一点,它确实有效。
原始
if ln == '':
toStop == True #This should have been an ASSIGNMENT not a test, was ==
ln = ln.strip("n")
ln = ln.strip("r")
工作如果ln==":打印"在EOF"toStop=Trueln=ln.strip("\n")ln=ln.strip("\r")
输出
Entering while 2
zurupeto $6$w2206117WV1E1$JHkrmXu/RZirctvucEUT8eCNLOTpivn4LwoNRtmq6OfocHhf54bkoggjxVN/35k3j9WgJ5NaXWZY0nDML4qUf1
Entering while 2
zutana $6$wfIF8ry4934271Si$4U8oiMp9/RA1glWf8aVV/uWqMyYybR1VbpR4qbcgNyv3YCERkdzaSpcJMLXtD9uT9Wt0nb4D5oqiJjfMM.8w01
Entering while 2
zutano $6$3gi4C0V2hD49dSOU$y09sCx5aUnheWGKA0HnnRBnINojfZY6WY.CaKeMAej9Y9KdXfBE/aQVqcxxvFbBRuL.Q5Tzr2d1V9oznZPaFs/
Entering while 2
zuzo`n $6$mkZ810VB4Qft90ap$PbtYHX9e5PvnlzgtgODOYb/U3EmgA1AsCrf7tLRnE/DQ8hQ1Ltx3yuul5HEz9JAXnMzflcoN6Vwdfl38oIIOS0
at EOF
done with whiles