def send_ip(self, data, dst_ip, protocol=Packet.Protocol.Raw): dst_ip = IP(dst_ip) if not dst_ip: self.report('invalid dst_ip {}, ignored', dst_ip) return try: _, _, gateway, interface = self.routes.find(dst_ip) except KeyError: self.report('no gateway for destination {}, ignored', dst_ip) return if gateway: self.report('{} is non-local, beg {} to deliver', dst_ip, gateway) else: self.report('{} is local, send directly', dst_ip) packet = Packet( src_ip=interface.ip, dst_ip=dst_ip, protocol=protocol, payload=data, ) interface.send_packet( packet.raw, gateway if gateway else dst_ip, Frame.EtherType.IPv4, )
def on_ipv4(self, frame, **_): packet = Packet(frame.payload) if packet.protocol == Packet.Protocol.TCP: PDU = Segment elif packet.protocol == Packet.Protocol.UDP: PDU = Datagram else: self.report('unsupported transport layer protocol') return self.on_transport_pdu(packet, PDU)
def on_ipv4(self, frame, **kwargs): i_interface = kwargs.get('interface') packet = Packet(frame.payload) try: net, _, gateway, interface = self.routes.find(packet.dst_ip) except KeyError: self.report('do not know how to route packet for {}', packet.dst_ip) else: if interface != i_interface: interface.send_packet( data=packet.raw, dst_ip=gateway if gateway else packet.dst_ip, ethertype=frame.ethertype, ) else: self.report('packet dst to {} already on net {}, ignored', packet.dst_ip, net)
def sendto(self, data, addr): addr = canonicalized_addr(addr) dst_ip, dst_port = addr if not self.local_addr: local_ip = IP_Loopback if dst_ip == IP_Loopback else IP_All self.bind((local_ip, None)) datagram = Datagram( src_port=self.port, dst_port=dst_port, payload=data, ) packet = Packet( protocol=Packet.Protocol.UDP, src_ip=self.ip, dst_ip=dst_ip, payload=datagram.raw, ) self.host.send_packet(packet)
def send(self, data, ip, protocol=Packet.Protocol.Raw): dst_ip = IP(ip) _, _, gateway, interface = self.routes.find(dst_ip) if gateway: self.report('{} is non-local, beg {} to deliver', dst_ip, gateway) else: self.report('{} is local, send directly', dst_ip) packet = Packet( src_ip=interface.ip, dst_ip=dst_ip, protocol=protocol, payload=data, ) interface.send_packet( packet.raw, gateway if gateway else dst_ip, Frame.EtherType.IPv4, )
def on_ipv4(self, frame): packet = Packet(frame.payload) src_ip = packet.src_ip src_mac = frame.src_mac self.ip2mac[src_ip] = src_mac #mint.report('!!!') #print repr(packet.protocol), Packet.Protocol[packet.protocol] #print self.ip2mac if packet.protocol == Packet.Protocol.UDP: datagram = Datagram(packet.payload) try: sock_id = (self.libsocket.SOCK_DGRAM, packet.dst_ip, datagram.dst_port) sock = self.sockets[sock_id] remote_addr = (packet.src_ip, datagram.src_port) sock.feed_datagram(datagram.payload, remote_addr) except KeyError: pass else: mint.report('{}: unsupport protocol {}', self, Packet.Protocol[packet.protocol])
def on_ipv4(self, frame, **_): packet = Packet(frame.payload) self.send('wooo..', packet.src_ip)
def on_ipv4(self, frame, **_): packet = Packet(frame.payload) if packet.protocol == Packet.Protocol.UDP: self.on_udp(packet)