Netexpert FAQ 网络分析专家学习建议入口 @netexpert成员申请指南
网络分析时代 netexpert积分规则的说明 Netis招贤纳士(2007年12月2日更新)
发新话题
打印

datapipe.py

datapipe.py

#
# Author    : Samual M. Rushing <rushing@nightmare.com> [1999-04-30]
# Rewrite   : scz <scz@nsfocus.com> [2006-02-21 18:05]
# Usage     : datapipe.py <localPort> <remoteHost> <remotePort>
#

import asynchat
import asyncore
import socket
import string

class proxy_server ( asyncore.dispatcher ) :

    def __init__ ( self, localport, host, port ) :
        asyncore.dispatcher.__init__( self )
        self.create_socket( socket.AF_INET, socket.SOCK_STREAM )
        self.set_reuse_addr()
        self.remote = ( host, port )
        self.bind( ( '', localport ) )
        self.listen( 5 )

    def handle_accept ( self ) :
        proxy_receiver( self, self.accept() )

class proxy_receiver ( asynchat.async_chat ) :

    def __init__ ( self, server, ( client, addr ) ) :
        asynchat.async_chat.__init__( self, client )
        self.sender     = proxy_sender( self, server.remote )

    def handle_read ( self ) :
        self.sender.push( self.recv( 4096 ) )

    def handle_close ( self ) :
        self.sender.close()
        self.close()

class proxy_sender ( asynchat.async_chat ) :

    def __init__ ( self, receiver, address ) :
        asynchat.async_chat.__init__( self )
        self.receiver   = receiver
        self.create_socket( socket.AF_INET, socket.SOCK_STREAM )
        self.connect( address )

    def handle_connect ( self ) :
        pass

    def handle_read ( self ) :
        self.receiver.push( self.recv( 4096 ) )

    def handle_close ( self ) :
        self.receiver.close()
        self.close()

if '__main__' == __name__ :
    import sys
    import string
    if 4 != len( sys.argv ) :
        print 'Usage: %s <localPort> <remoteHost> <remotePort>' % sys.argv[0]
    else:
        ps  = proxy_server  \
        (
            string.atoi( sys.argv[1] ),
            sys.argv[2],
            string.atoi( sys.argv[3] )
        )
        try :
            asyncore.loop()
        except :
            sys.exit(1)
说了世上一无牵挂为何有悲喜
说了朋友相交如水为何重别离
说了少年笑看将来为何常回忆
说了青春一去无悔为何还哭泣

TOP

发新话题
版块跳转