Exemple #1
0
 def unpack(self, buf):
     dpkt.Packet.unpack(self, buf)
     if self.type > 1500:
         # Ethernet II
         self._unpack_data(self.data)
     elif self.dst.startswith('\x01\x00\x0c\x00\x00') or \
          self.dst.startswith('\x03\x00\x0c\x00\x00'):
         # Cisco ISL
         self.vlan = struct.unpack('>H', self.data[6:8])[0]
         self.unpack(self.data[12:])
     elif self.data.startswith('\xff\xff'):
         # Novell "raw" 802.3
         self.type = ETH_TYPE_IPX
         self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[2:])
     else:
         # 802.2 LLC
         self.dsap, self.ssap, self.ctl = struct.unpack(
             'BBB', self.data[:3])
         if self.data.startswith('\xaa\xaa'):
             # SNAP
             self.type = struct.unpack('>H', self.data[6:8])[0]
             self._unpack_data(self.data[8:])
         else:
             # non-SNAP
             dsap = ord(self.data[0])
             if dsap == 0x06:  # SAP_IP
                 self.data = self.ip = self._typesw[ETH_TYPE_IP](
                     self.data[3:])
             elif dsap == 0x10 or dsap == 0xe0:  # SAP_NETWARE{1,2}
                 self.data = self.ipx = self._typesw[ETH_TYPE_IPX](
                     self.data[3:])
             elif dsap == 0x42:  # SAP_STP
                 self.data = self.stp = stp.STP(self.data[3:])
Exemple #2
0
 def unpack(self, buf):
     self.data = buf
     if self.data.startswith('\xaa\xaa'):
         # SNAP
         self.type = struct.unpack('>H', self.data[6:8])[0]
         self._unpack_data(self.data[8:])
     else:
         # non-SNAP
         dsap = ord(self.data[0])
         if dsap == 0x06:  # SAP_IP
             self.data = self.ip = self._typesw[ethernet.ETH_TYPE_IP](self.data[3:])
         elif dsap == 0x10 or dsap == 0xe0:  # SAP_NETWARE{1,2}
             self.data = self.ipx = self._typesw[ethernet.ETH_TYPE_IPX](self.data[3:])
         elif dsap == 0x42:  # SAP_STP
             self.data = self.stp = stp.STP(self.data[3:])
Exemple #3
0
    def unpack(self, buf):
        from ethernet import Ethernet, ETH_TYPE_IP, ETH_TYPE_IPX

        dpkt.Packet.unpack(self, buf)
        if self.is_snap:
            self.oui, self.type = struct.unpack('>IH', '\x00' + self.data[:5])
            self.data = self.data[5:]
            try:
                self.data = Ethernet.get_type(self.type)(self.data)
                setattr(self, self.data.__class__.__name__.lower(), self.data)
            except (KeyError, dpkt.UnpackError):
                pass
        else:
            # non-SNAP
            if self.dsap == 0x06:  # SAP_IP
                self.data = self.ip = Ethernet.get_type(ETH_TYPE_IP)(self.data)
            elif self.dsap == 0x10 or self.dsap == 0xe0:  # SAP_NETWARE{1,2}
                self.data = self.ipx = Ethernet.get_type(ETH_TYPE_IPX)(
                    self.data)
            elif self.dsap == 0x42:  # SAP_STP
                self.data = self.stp = stp.STP(self.data)