Beispiel #1
0
 def submit(self, pkt: Packet):
     if pkt.haslayer(ARP):
         eth_src = pkt.getlayer(Ether).src
         if eth_src == "ff:ff:ff:ff:ff:ff" or eth_src == "00:00:00:00:00:00" or pkt.hwsrc == "ff:ff:ff:ff:ff:ff" or pkt.hwsrc == "00:00:00:00:00:00":
             self.on_eth_broadcast(pkt)
             return
         if eth_src != pkt.hwsrc:  # source mac arp mismatch
             self.on_eth_mismatch(pkt)
         if pkt.psrc != '0.0.0.0' and pkt.psrc != '255.255.255.255':
             self.update(pkt.hwsrc, pkt.psrc, pkt.time)
             if pkt.op == 2 and pkt.hwdst != "ff:ff:ff:ff:ff:ff" and pkt.hwdst != "00:00:00:00:00:00":
                 self.update(pkt.hwdst, pkt.pdst, pkt.time)
     elif Ether in pkt and IP in pkt and pkt.getlayer(IP).src != '0.0.0.0' \
             and pkt.getlayer(IP).src != '255.255.255.255':
         self.update(
             pkt.getlayer(Ether).src,
             pkt.getlayer(IP).src, pkt.time)
Beispiel #2
0
 def getlayer(self, cls, nb=1, _track=None):
     layer = None
     if cls == RadiusAttribute:
         for attr_class in RadiusAttribute.registered_attributes.values():
             if isinstance(self, attr_class):
                 layer = self
                 break
     else:
         layer = Packet.getlayer(self, cls, nb, _track)
     return layer
Beispiel #3
0
 def getlayer(self, cls, nb=1, _track=None):
     layer = None
     if cls == EAP:
         for eap_class in EAP.registered_methods.values():
             if isinstance(self, eap_class):
                 layer = self
                 break
     else:
         layer = Packet.getlayer(self, cls, nb, _track)
     return layer
Beispiel #4
0
 def getlayer(self, cls, nb=1, _track=None):
     layer = None
     if cls == EAP:
         for eap_class in EAP.registered_methods.values():
             if isinstance(self, eap_class):
                 layer = self
                 break
     else:
         layer = Packet.getlayer(self, cls, nb, _track)
     return layer
Beispiel #5
0
def PacketParser(dut: cocotb.handle, packet: scapy_packet, scapy_to_VHDL):
    """setUp interface of dut with packet info
    If process header recursively, if not on dut raise error.
    This function is the expected output of a packet parser
    """
    if not isinstance(packet, scapy_packet):
        raise TypeError("expected scapy Packet type")
    dut._log.info("debut parsage")
    for i in scapy_to_VHDL:
        signal_en = "{}_valid".format(scapy_to_VHDL[i][0])
        if signal_en in dut._sub_handles:
            dut._sub_handles[signal_en].value = 0
        if packet.haslayer(i):
            signal = "{}_bus".format(scapy_to_VHDL[i][0])
            if not (signal in dut._sub_handles):
                raise ValueError("unvalid header : {}".format(signal))
            val = BinaryValue()
            signal_width = int(scapy_to_VHDL[i][1] / 8)
            val.binstr = BitArray(raw(packet.getlayer(i))[0:signal_width]).bin
            val.buff = val.buff[::-1]
            dut._sub_handles[signal].value = val
            dut._sub_handles[signal_en].value = 1
            dut._log.info("fin parser")
Beispiel #6
0
 def on_eth_mismatch(self, pkt: Packet):
     msg = "ETH_MISMATCH\nNAME = {}\n{}".format(
         self.get_alias(pkt.getlayer(Ether).src), pkt.show(dump=True))
     self.send_to_telegram(msg)