def make_reply(self, req): pk=IP(str(req.payload)) tcp=pk.payload if tcp.flags!=4 and tcp.flags!=2: return None d=str(tcp.payload) dp=int(tcp.dport) s=str(pk.src) if tcp.flags==4: if dp!=self._ports[-1] or not self._challenge.has_key(s): return None if d.replace('\0',' ').strip()=='': return None print ("** Got challenge answer=[%s]") % d.__repr__() c,cmd,arg=self._challenge[s] if c==d: print ("** accepted, executing cmd=[%s] arg=[%s]") % (cmd,arg) self._q.put((s, cmd, arg)) else: print ("rejected") del self._challenge[s] return None print ("dp=",dp,) #print "pk=", pk.__repr__() r=self._is_right_knock(s, dp) print ("** right order=", r) if not r: return None self._hist[s].append(d) if len(self._hist[s])==self._portsN: # send challenge img="".join(self._hist[s]) del self._hist[s]; in_file=StringIO.StringIO(img) try: d=Steganography.decode(in_file, red_bits=1, green_bits=1, blue_bits=1) except: return None try: email,cmd,arg=d.split(' ',2) except ValueError: return None print ("** last valid knock received, cmd=[%s] arg=[%s]") % (cmd, arg) print ("** sending challenge ...") dec_blob=randomblob(self._blobm,self._blobM) enc_blob=enc(self._gpg, dec_blob, email=email) print ("** expecting answer=[%s]") % dec_blob.__repr__() try: self._challenge[s]=(dec_blob, cmd, arg) except KeyError: return None return IP(dst=pk.src,src=pk.dst)/TCP(flags='SA',dport=tcp.sport, sport=tcp.dport, seq=tcp.seq)/enc_blob return None
def decodeImage(): data = json.loads(Steganography.decode()) newFile = open("image_encode/" + data["name"], "wb") newFile.write(binascii.unhexlify((data["data"])))