#!/usr/bin/python




import paramiko
import sys
import select
from socket import *

#Handler for port forwarding
#I don't need most of these parameters atm, since I'm only doing simple forwarding
#OTOH, they'll come in very handy later on
def ForwardHandler(channel, (origin_addr, origin_port), (server_addr, server_port)):
	print "Handler called"
	
	
	#Create a socket to localhost on the wanted port
	local = socket(AF_INET,SOCK_STREAM)
	#Connecto to localhost, port 22
	local.connect(('127.0.0.1',22))

	while True:
		print "Into while loop"			
		r,w,x = select.select([local,channel],[],[local,channel])
		print "Got something"
		if local in r:
			print 'Local:'
			print "Recieving data"
			data = local.recv(1024)
			print "Recieved data: %d" % len(data)
			if (len(data)==0):
				break
			print data
			print "Sending Recieved data"
			channel.send(data)
			print "Sent Recieved data"			
			
		if channel in r:
			print 'Channel:'
			print "Recieving data"
			data = channel.recv(1024)
			print "Recieved data: %d" % len(data)
			if (len(data)==0):
				break	
			print "Sending Recieved data"
			local.send(data)
			print "Sent Recieved data"	
			
		print "Checking for errors"
		if x!=[]:
			print "Error, quiting"
			break
				
		print "Looping"			
	
	local.close()
	channel.close()
		
	
	return True
	
paramiko.util.log_to_file('reverse_ssh.log')

#Create the transport
t = paramiko.Transport(('127.0.0.1',22))
t.connect(None,'david','enki',None)
#Create a tunnel
#I'm going to need a handler here, which sorts out the forwarding
t.request_port_forward('127.0.0.1',2222,ForwardHandler)
#Wait for keypress
sys.stdin.readline()
#close transport
t.close()


