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)
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)