def smtp_creds(pcap):
    strings = []
    output = []
    try:
        pkts = rdpcap(pcap)
        for p in pkts:
            if p.haslayer(TCP) and p.haslayer(Raw) and p.getlayer(TCP).dport == 25:
                load = p[Raw].load
                if load not in strings:
                    strings.append(load)
                else:
                    pass
            else:
                pass
    except Exception as e:
        error_logging(str(e), 'SMTP Creds')

    for s in strings:
        t = decode_base64(s)
        if t is not None:
            c = check_ascii(t)
            if c is not None and len(c) > 3:
                output.append(c)
            else:
                pass
        else:
            pass

    return output
def smtp_creds(pcap):
    strings = []
    output = []
    try:
        pkts = rdpcap(pcap)
        for p in pkts:
            if p.haslayer(TCP) and p.haslayer(Raw) and p.getlayer(
                    TCP).dport == 25:
                load = p[Raw].load
                if load not in strings:
                    strings.append(load)
                else:
                    pass
            else:
                pass
    except Exception as e:
        error_logging(str(e), 'SMTP Creds')

    for s in strings:
        t = decode_base64(s)
        if t is not None:
            c = check_ascii(t)
            if c is not None and len(c) > 3:
                output.append(c)
            else:
                pass
        else:
            pass

    return output
def find_layers(pkts, pcap, pcap_id, streamid):
    packet = OrderedDict()
    count = 1
    pcap_id = pcap_id.encode('utf-8')
    streamid = streamid.encode('utf-8')
    try:
        for p in pkts:
            header = {"Buffer": {"timestamp": datetime.datetime.fromtimestamp(p.time).strftime('%Y-%m-%d %H:%M:%S.%f'),
                                 "packetnumber": count, "PCAP ID": pcap_id, "pcapfile": pcap, "StreamID": streamid}}
            packet.update(header)
            counter = 0
            while True:
                layer = p.getlayer(counter)
                if layer != None:
                    i = int(counter)
                    x = p[0][i].fields
                    t = exclude_layers(x, layer.name)
                    s = rename_layer(t, layer.name)
                    v = '{"' + layer.name.replace('.', '_') + '[' + str(i) + ']' + '":' + str(s) + '}'
                    s = eval(v)
                    try:
                        del s['HTTP[3]']
                        del s['HTTP[5]']
                    except KeyError:
                        pass
                    packet.update(s)
                else:
                    break
                counter += 1
            count += 1
            yield packet
            packet.clear()
    except Exception as e:
        error_logging(str(e), 'PacketParser')
        pass