#!/usr/bin/env python """ Converts netscreen snoop hex-dumps to a hex-dump that text2pcap can read. Copyright (c) 2004 by Gilbert Ramirez SPDX-License-Identifier: GPL-2.0-or-later """ import sys import re import os import stat import time class OutputFile: TIMER_MAX = 99999.9 def __init__(self, name, base_time): try: self.fh = open(name, "w") except IOError, err: sys.exit(err) self.base_time = base_time self.prev_timestamp = 0.0 def PrintPacket(self, timestamp, datalines): # What do to with the timestamp? I need more data about what # the netscreen timestamp is, then I can generate one for the text file. # print("TS:", timestamp.group("time")) try: timestamp = float(timestamp.group("time")) except ValueError: sys.exit("Unable to convert '%s' to floating point." % (timestamp,)) # Did we wrap around the timeer max? if timestamp < self.prev_timestamp: self.base_time += self.TIMER_MAX self.prev_timestamp = timestamp packet_timestamp = self.base_time + timestamp # Determine the time string to print gmtime = time.gmtime(packet_timestamp) subsecs = packet_timestamp - int(packet_timestamp) assert subsecs <= 0 subsecs = int(subsecs * 10) print >> self.fh, "%s.%d" % (time.strftime("%Y-%m-%d %H:%M:%S", gmtime), \ subsecs) # Print the packet data offset = 0 for lineno, hexgroup in datalines: hexline = hexgroup.group("hex") hexpairs = hexline.split() print >> self.fh, "%08x %s" % (offset, hexline) offset += len(hexpairs) # Blank line print >> self.fh # Find a timestamp line re_timestamp = re.compile(r"^(?P