一个用Python做端口转发的源码示例,python源码,如何用Python做重定
一个用Python做端口转发的源码示例,python源码,如何用Python做重定
如何用Python做重定向,一个用Python做端口转发的源码示例(Pyhton Port Forwarding)。需要用到socket、optparse及asyncore方法类库。
用Python做Port Forwarding,首先要理解端口转发的原理:端口转发是,转发一个网络端口从一个网络节点到另一个网络节点的行为;其使一个外部用户,从外部经过一个被激活的NAT路由器到达一个在私有内部IP地址上的某个端口。
一个用Python做端口转发的示例源码如下:(供参考)
import socket,asyncoreclass forwarder(asyncore.dispatcher): def __init__(self, ip, port, remoteip,remoteport,backlog=5): asyncore.dispatcher.__init__(self) self.remoteip=remoteip self.remoteport=remoteport self.create_socket(socket.AF_INET,socket.SOCK_STREAM) self.set_reuse_addr() self.bind((ip,port)) self.listen(backlog) def handle_accept(self): conn, addr = self.accept() # print '--- Connect --- ' sender(receiver(conn),self.remoteip,self.remoteport)class receiver(asyncore.dispatcher): def __init__(self,conn): asyncore.dispatcher.__init__(self,conn) self.from_remote_buffer='' self.to_remote_buffer='' self.sender=None def handle_connect(self): pass def handle_read(self): read = self.recv(4096) # print '%04i -->'%len(read) self.from_remote_buffer += read def writable(self): return (len(self.to_remote_buffer) > 0) def handle_write(self): sent = self.send(self.to_remote_buffer) # print '%04i <--'%sent self.to_remote_buffer = self.to_remote_buffer[sent:] def handle_close(self): self.close() if self.sender: self.sender.close()class sender(asyncore.dispatcher): def __init__(self, receiver, remoteaddr,remoteport): asyncore.dispatcher.__init__(self) self.receiver=receiver receiver.sender=self self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.connect((remoteaddr, remoteport)) def handle_connect(self): pass #www.iplaypy.com def handle_read(self): read = self.recv(4096) # print '<-- %04i'%len(read) self.receiver.to_remote_buffer += read def writable(self): return (len(self.receiver.from_remote_buffer) > 0) def handle_write(self): sent = self.send(self.receiver.from_remote_buffer) # print '--> %04i'%sent self.receiver.from_remote_buffer = self.receiver.from_remote_buffer[sent:] def handle_close(self): self.close() self.receiver.close()if __name__=='__main__': import optparse parser = optparse.OptionParser() parser.add_option( '-l','--local-ip', dest='local_ip',default='127.0.0.1', help='Local IP address to bind to') parser.add_option( '-p','--local-port', type='int',dest='local_port',default=80, help='Local port to bind to') parser.add_option( '-r','--remote-ip',dest='remote_ip', help='Local IP address to bind to') parser.add_option( '-P','--remote-port', type='int',dest='remote_port',default=80, help='Remote port to bind to') options, args = parser.parse_args() forwarder(options.local_ip,options.local_port,options.remote_ip,options.remote_port) asyncore.loop()
编橙之家文章,
相关内容
- SQL脚本直接导入数据库的Python方法,sql脚本导入python
- 最简单的用Python百度自动登陆,访问百度个人主页,
- python telnet远程登录端口交互执行命令,,编橙之家本篇
- Python WebSocket服务端编程代码完成gtalk机器人,websocket
- Python zip文件解压乱码的解决方法,pythonzip解压乱码,P
- Python写的比较2个文件不同的程序,python写程序,Python写
- python 删除过期文件的方法+源码,,python 删除过期文
- 分享Python获取文件及文件夹大小的方法源码,python源码
- 最简单Python删除目录下文件内容的方法代码,python代码
- Python文件合并与分割操作方法工具,python文件合并,编橙
评论关闭