/** * Parse Interface Statistics Block. * @param string $raw Binary string * @param int $currentPosition Current position in file * @return array * @throws Exception */ public function parse($raw, &$currentPosition) { $blockStart = PcapngParser::bin2hexEndian(substr($raw, $currentPosition, 4)); if ($blockStart !== static::BYTE_TYPE) { throw new Exception('Unknown format of Interface Statistics Block'); } // Block Total Length $totalLength = PcapngParser::rawToDecimal(substr($raw, $currentPosition + 4, 4)); $block['length'] = $totalLength; $interfaceId = PcapngParser::rawToDecimal(substr($raw, $currentPosition + 8, 4)); $block['interface_id'] = $interfaceId; $timestampHigh = PcapngParser::rawToFloat(substr($raw, $currentPosition + 12, 4)); //todo wrong representation $block['timestamp_high'] = $timestampHigh; $timestampLow = PcapngParser::rawToFloat(substr($raw, $currentPosition + 16, 4)); //todo wrong representation $block['timestamp_low'] = $timestampLow; $currentPosition += 20; $this->parseOptions($raw, $currentPosition); $lengthEnd = PcapngParser::rawToDecimal(substr($raw, $currentPosition, 4)); if ($lengthEnd !== $totalLength) { throw new Exception('Unknown format'); } $currentPosition += 4; }