def cache_messages(streams): """ Reconstructs messages from TCP streams and caches them in Redis. """ redis_pipe = REDIS_CONN.pipeline() count = 0 serializer = Serializer() stream = Stream() for stream_id, stream.segments in streams.iteritems(): data = stream.data() _data = data.next() while True: try: (msg, _data) = serializer.deserialize_msg(_data) except (HeaderTooShortError, PayloadTooShortError) as err: logging.debug("{}: {}".format(stream_id, err)) try: _data += data.next() except StopIteration: break except ProtocolError as err: logging.debug("{}: {}".format(stream_id, err)) try: _data = data.next() except StopIteration: break else: node = (stream_id[0], stream_id[1]) count += cache_message(redis_pipe, node, stream.timestamp, msg) redis_pipe.execute() return count
def get_invs(filepath): """ Extracts inv messages from the specified pcap file. """ serializer = Serializer() pcap_file = open(filepath) pcap_reader = dpkt.pcap.Reader(pcap_file) for timestamp, buf in pcap_reader: frame = dpkt.ethernet.Ethernet(buf) ip_packet = frame.data if isinstance(ip_packet.data, dpkt.tcp.TCP): tcp_packet = ip_packet.data payload = tcp_packet.data if len(payload) > 0: try: (msg, _) = serializer.deserialize_msg(payload) except ProtocolError as err: pass else: if msg['command'] == "inv": if ip_packet.v == 6: address = socket.inet_ntop(socket.AF_INET6, ip_packet.src) else: address = socket.inet_ntop(socket.AF_INET, ip_packet.src) node = (address, tcp_packet.sport) save_invs(timestamp, node, msg['inventory']) pcap_file.close()
def __init__(self, pipe, token='', treefile='', serializer=None, debug=0): super(ClientWorker, self).__init__('Client') self.secure = pipe self.s = serializer or Serializer() self.token = token self.treefile = treefile self._debug = debug
def __init__(self, filepath): self.filepath = filepath self.redis_pipe = REDIS_CONN.pipeline() self.serializer = Serializer() self.streams = defaultdict(PriorityQueue) self.stream = Stream() self.count = 0 self.keys = set() # ping:ADDRESS-PORT:NONCE
def __init__(self, filepath): self.filepath = filepath self.redis_pipe = REDIS_CONN.pipeline() self.serializer = Serializer(magic_number=CONF['magic_number']) self.streams = defaultdict(PriorityQueue) self.stream = Stream() self.count = 0 self.ping_keys = set() # ping:ADDRESS-PORT:NONCE self.invs = defaultdict(list)
def __init__(self, controller, filemanager, serializer=None): super(ServerLogics, self).__init__('Backend') self.s = serializer or Serializer() self.filelogics = filemanager self.controller = controller self.resources = { 'users': self.users, 'files': self.files, }
def __init__(self, filepath): self.filepath = filepath self.serializer = Serializer(magic_number=unhexlify('daa5bef9')) self.streams = defaultdict(PriorityQueue) self.stream = Stream()