示例#1
0
文件: pdus.py 项目: fans656/mint-dev
 def status(self):
     raw = self.getter()
     r = OrderedDict([('raw', repr(raw))])
     if raw:
         frame = Frame(raw)
         r['Frame'] = OrderedDict([
             ('Dst MAC', '{:02x}'.format(mac_from_bytes(frame.dst))),
             ('Src MAC', '{:02x}'.format(mac_from_bytes(frame.src))),
             ('EtherType', Frame.EtherType[frame.ethertype]),
         ])
         if frame.ethertype == Frame.EtherType.IPv4:
             packet = Packet(frame.payload)
             r['IPv4'] = OrderedDict([
                 ('Protocol', Packet.Protocol[packet.protocol]),
                 ('Src IP', ip_to_str(packet.src)),
                 ('Dst IP', ip_to_str(packet.dst)),
                 ('Payload', repr(packet.payload)),
             ])
         elif frame.ethertype == Frame.EtherType.ARP:
             arp = ARP(frame.payload)
             r['ARP'] = OrderedDict([
                 ('Oper', ARP.Oper[arp.oper]),
                 ('Src IP', ip_to_str(arp.src_ip)),
                 ('Src MAC', '{:02x}'.format(mac_from_bytes(arp.src_mac))),
                 ('Dst IP', ip_to_str(arp.dst_ip)),
                 ('Dst MAC', '{:02x}'.format(mac_from_bytes(arp.dst_mac))),
             ])
     return r
示例#2
0
 def on_arp(self, raw):
     arp = ARP(raw)
     if arp.oper == ARP.Oper.IAm:
         mint.report('{} got ARP annoucement from {}'.format(
             ip_to_str(self.ip),
             ip_to_str(arp.src_ip),
         ))
         self.arp_cache[arp.src_ip] = (arp.src_mac, mint.now())
         packets = self.pending_packets[arp.src_ip]
         for packet in packets:
             self.framer.send(packet.raw, arp.src_mac)
         del packets[:]
     elif arp.oper == ARP.Oper.WhoIs:
         if not arp.dst_ip == self.ip:
             mint.report('{} got irrelevant ARP packet'.format(
                 ip_to_str(self.ip)))
             return
         packet = ARP(
             oper=ARP.Oper.IAm,
             src_ip=self.ip,
             src_mac=self.framer.mac,
             dst_ip=arp.src_ip,
             dst_mac=arp.src_mac,
         ).raw
         self.framer.send(
             packet,
             to=arp.src_mac,
             ethertype=Frame.EtherType.ARP,
         )
示例#3
0
 def status(self):
     raw = self.getter()
     r = OrderedDict([('raw', repr(raw))])
     if raw:
         frame = Frame(raw)
         r['Frame'] = OrderedDict([
             ('Dst MAC', '{:02x}'.format(mac_from_bytes(frame.dst))),
             ('Src MAC', '{:02x}'.format(mac_from_bytes(frame.src))),
             ('EtherType', Frame.EtherType[frame.ethertype]),
         ])
         if frame.ethertype == Frame.EtherType.IPv4:
             packet = Packet(frame.payload)
             r['IPv4'] = OrderedDict([
                 ('Protocol', Packet.Protocol[packet.protocol]),
                 ('Src IP', ip_to_str(packet.src)),
                 ('Dst IP', ip_to_str(packet.dst)),
                 ('Payload', repr(packet.payload)),
             ])
         elif frame.ethertype == Frame.EtherType.ARP:
             arp = ARP(frame.payload)
             r['ARP'] = OrderedDict([
                 ('Oper', ARP.Oper[arp.oper]),
                 ('Src IP', ip_to_str(arp.src_ip)),
                 ('Src MAC', '{:02x}'.format(mac_from_bytes(arp.src_mac))),
                 ('Dst IP', ip_to_str(arp.dst_ip)),
                 ('Dst MAC', '{:02x}'.format(mac_from_bytes(arp.dst_mac))),
             ])
     return r
示例#4
0
 def on_ipv4(self, raw):
     packet = Packet(raw)
     mint.report('{} recved {}'.format(
         ip_to_str(self.ip),
         repr(packet.payload),
     ))
示例#5
0
 def ip(self):
     return ip_to_str(self.packeter.ip)