Beispiel #1
0
class Receiver(object):

                
    def __init__(self, server=("0.0.0.0", 0), client=False):
        sucky = socket(AF_INET, SOCK_DGRAM)
        logging.debug("Hostname: {0} ({1})".format(
                gethostname(), gethostbyname(gethostname())))
        sucky.bind(server)
        self.addr = sucky.getsockname()
        logging.debug("Socket bind: {0}".format(self.addr))
        self.sock = UDPSocket(sucky)
        self.server = server
        self.client = client

        self.last_chunk_no = 1
        self.bin_buffer = ''
        self.check_buffer = []


    def recv(self):
        packet, addr = yield self.sock.recv()
        logging.debug("Received packet {0} from {1}.".format(packet, addr))

        if self.client:  # if on client, don't execute shell command
                yield packet, addr
        else:
                if packet["type"] == "text":
                        resp = self.handle_text(packet)
                        yield resp, packet["recv_dest"]
                                                
            
    def handle_text(self, data):
        logging.debug("Handling text packet")

        if data["data"] == "CONNECT":
                return "ACK"

        try:
            proc = subprocess.Popen(data["data"],
                                    shell=True,
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.PIPE,
                                    stdin=subprocess.PIPE)
            resp = proc.stdout.read() + proc.stderr.read()
        except:
            logging.error("Subprocess Popen execution error")
            
        return resp
        

    def get_addr(self):
            return self.addr


    def get_ip(self):
            return self.addr[0]


    def get_port(self):
            return self.addr[1]
Beispiel #2
0
class Receiver(object):
    def __init__(self, server=("0.0.0.0", 0), client=False):
        sucky = socket(AF_INET, SOCK_DGRAM)
        logging.debug("Hostname: {0} ({1})".format(
            gethostname(), gethostbyname(gethostname())))
        sucky.bind(server)
        self.addr = sucky.getsockname()
        logging.debug("Socket bind: {0}".format(self.addr))
        self.sock = UDPSocket(sucky)
        self.server = server
        self.client = client

        self.last_chunk_no = 1
        self.bin_buffer = ''
        self.check_buffer = []

    def recv(self):
        packet, addr = yield self.sock.recv()
        logging.debug("Received packet {0} from {1}.".format(packet, addr))

        if self.client:  # if on client, don't execute shell command
            yield packet, addr
        else:
            if packet["type"] == "text":
                resp = self.handle_text(packet)
                yield resp, packet["recv_dest"]

    def handle_text(self, data):
        logging.debug("Handling text packet")

        if data["data"] == "CONNECT":
            return "ACK"

        try:
            proc = subprocess.Popen(data["data"],
                                    shell=True,
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.PIPE,
                                    stdin=subprocess.PIPE)
            resp = proc.stdout.read() + proc.stderr.read()
        except:
            logging.error("Subprocess Popen execution error")

        return resp

    def get_addr(self):
        return self.addr

    def get_ip(self):
        return self.addr[0]

    def get_port(self):
        return self.addr[1]