コード例 #1
0
ファイル: VNS.py プロジェクト: alexanderkatovsky/bir
class Host(Node):
    def __init__(self, name, interfaces):
        Node.__init__(self, name, interfaces)
        self.conn = None
        if len(interfaces) > 1:
            raise Exception("Host.__init__: too many interfaces")
        self.__intf = interfaces[0]
        self.__httphandler = HTTPHandler(self.__send)

    def __send(self, packet):
        self.send_packet(self.__intf, packet)

    def connect(self, _):
        print "Rejecting connection to %s - may not control a Host node" % self.name
        return False

    def handle_packet(self, intf, packet):
        """Replies to echo requests, arp requests, also TCP handshake, and simple HTTP Server"""
        self.__httphandler.process_packet(intf.ip, intf.mac, packet)
コード例 #2
0
class Client:
    def __init__(self):
        self.__interface = None
        self.__mac = None
        self.__ip = None
        self.__mask = None
        self.__http = HTTPHandler(self.send)

    def send(self, what):
        print "send " + repr(what)
        self.__prot.send(VNSPacket(self.__interface, what))

    def callback(self, prot, msg):
        self.__prot = prot
        if self.__interface is None:
            for m in msg:
                for i in range(0, len(m)):
                    # print dict(zip(m[::2],m[1::2]))
                    if m[i] == VNSInterface.HWINTERFACE:
                        self.__interface = m[i + 1]
                        print "interface: " + self.__interface
                        i += 1
                    elif m[i] == VNSInterface.HWSPEED:
                        i += 2
                    elif m[i] == VNSInterface.HWETHER:
                        self.__mac = m[i + 1][0:6]
                        print "MAC      : " + VNS.MACToString(self.__mac)
                        i += 1
                    elif m[i] == VNSInterface.HWETHIP:
                        self.__ip = m[i + 1]
                        print "ip       : " + VNS.SubnetToString(self.__ip)
                        i += 2
                    elif m[i] == VNSInterface.HWSUBNET:
                        i += 2
                    elif m[i] == VNSInterface.HWMASK:
                        self.__mask = m[i + 1]
                        print "mask     : " + VNS.SubnetToString(self.__mask)
        else:
            print msg
            self.__http.process_packet(self.__ip, self.__mac, msg.ethernet_frame)