Socket代理转发小记
来源:互联网 发布:c 可视化编程 编辑:程序博客网 时间:2024/05/18 01:59
http://www.linuxso.com/architecture/13498.html
本地转发代码forward.py
#!/usr/bin/env pythonimport osimport socketimport selectimport SocketServerimport sysimport paramikodef verbose(s): print sclass ForwardServer (SocketServer.ThreadingTCPServer): daemon_threads = True allow_reuse_address = Trueclass Handler (SocketServer.BaseRequestHandler): def handle(self): try: chan = self.ssh_transport.open_channel('direct-tcpip', (self.chain_host, self.chain_port), self.request.getpeername()) except Exception, e: verbose('Incoming request to %s:%d failed: %s' % (self.chain_host, self.chain_port, repr(e))) return if chan is None: verbose('Incoming request to %s:%d was rejected by the SSH server.' % (self.chain_host, self.chain_port)) return verbose('Connected! Tunnel open %r -> %r -> %r' % (self.request.getpeername(), chan.getpeername(), (self.chain_host, self.chain_port))) try: while True: r, w, x = select.select([self.request, chan], [], []) if self.request in r: data = self.request.recv(1024) if len(data) == 0: break chan.send(data) if chan in r: data = chan.recv(1024) if len(data) == 0: break self.request.send(data) except Exception as e: verbose('Forward request to %s:%d was failed.' % (self.chain_host, self.chain_port)) verbose('Tunnel closed from %r' % (self.request.getpeername(),)) chan.close() self.request.close()forwardServer=None;def forward_tunnel(local_port, remote_host, remote_port, transport): class SubHander (Handler): chain_host = remote_host chain_port = remote_port ssh_transport = transport global forwardServer forwardServer=ForwardServer(('', local_port), SubHander); forwardServer.serve_forever();def stopForward(): if forwardServer: forwardServer.shutdown();def forward(local_port,ssh_host,ssh_port,username,password,remote_host,remote_port): client = paramiko.SSHClient() client.load_system_host_keys() client.set_missing_host_key_policy(paramiko.WarningPolicy()) try: client.connect(ssh_host, ssh_port, username,password) except Exception, e: print '*** Failed to connect to %s:%d: %r' % (ssh_host, ssh_port, e) sys.exit(1) verbose('Now forwarding port %d to %s:%d ...' % (local_port, remote_host, remote_port)) try: forward_tunnel(local_port, remote_host, remote_port, client.get_transport()) except KeyboardInterrupt: print 'C-c: Port forwarding stopped.' sys.exit(0)if __name__ == '__main__': forward(3306,"ssh.company.com",22,"admin","pwd","172.24.23.21",3306)
先启动转发服务。
通过代理连接数据库服务器 test.py:
conn=MySQLdb.connect(host="127.0.0.1", port=3306, user="user", passwd="pwd", db="db", connect_timeout=1000, charset="GBK")cur=conn.cursor()cur.execute("""select * from temp limit 5""");for c in cursor: print ccur.close();conn.close()
注意,这里是先向本地3306发送数据,本地转发服务接收到数据后会转发给SSHD服务,SSHD服务会帮我们将数据转发到目标服务器,得到响应后再原路返回。
- Socket代理转发小记
- Socket代理转发小记
- ssh socket转发代理
- ssh socket转发代理
- ssh socket转发代理
- C# socket nat 映射 网络 代理 转发
- 【SSH隧道】端口转发,socket代理
- SSH隧道技术----端口转发,socket代理
- SSH隧道技术----端口转发,socket代理
- SSH隧道技术(端口转发,socket代理)
- nginx 设置多个tcp IP代理 socket 转发
- Java Socket数据转发和http代理(使用公网ip服务器转发数据)
- Nginx转发代理配置
- udp数据转发代理
- Fiddler代理转发请求
- apache 代理转发 配置
- ssh代理小记
- Socket 转发工具
- 第五章 运算符与表达式
- 剑指Offer算法实现之六:重建二叉树
- D - Mysterious Present
- andriod 开发环境的搭建
- anyevent::socket+anyevent::client 测试客户端
- Socket代理转发小记
- E - Triangle
- C语言函数指针基础
- hdu 4619
- LA 3708 - Graveyard 墓地雕塑
- POJ 3348 Cows 凸包+求多边形面积
- SQL Server MySQL Oracle
- 懂点经济学
- F - President's Office