from scapy.all import *

import sys

def run_dump_packets(args):
    pkts = get_packets_from_pcap_file(args.file)

    for pkt in pkts:
        print("Source IP: " + pkt[IP].src)
        print("Destination IP: " + pkt[IP].dst)
        print("Source port: " + str(pkt[TCP].sport))
        print("Destinations port: " + str(pkt[TCP].dport))
        print("Packet Payload: " + str(pkt[TCP].payload))

def get_packets_from_pcap_file(pcap_file):
    pcap = rdpcap(pcap_file)
    return [pkt for pkt in pcap if TCP in pkt]

def valid_path(path):
    if not os.path.exists(path):
        msg = "%r does not exist" % path
        raise argparse.ArgumentTypeError(msg)
    return path

def run_find_ips(args):
    pkts = get_packets_from_pcap_file(args.file)

    ips = set()
    #  *******************
    #  * A VOUS DE JOUER *
    #  *******************

    print(list(ips))

def run_dump_emails(args):
    pkts = get_packets_from_pcap_file(args.file)
    target_ip = args.ip

    #  *******************
    #  * A VOUS DE JOUER *
    #  *******************

def run_list_gets(args):
    pkts = get_packets_from_pcap_file(args.file)
    target_ip = args.ip

    #  *******************
    #  * A VOUS DE JOUER *
    #  *******************

if __name__ == "__main__":
    import argparse
    parser = argparse.ArgumentParser(description='Pcap analyzer')
    subparsers = parser.add_subparsers(help='sub-commands')

    parser_dump_packets = subparsers.add_parser('dump-packets', help='Dump packets', description='dump-packets')
    parser_dump_packets.add_argument('file', help='The PCAP file to work on', type=valid_path)
    parser_dump_packets.set_defaults(func=run_dump_packets)

    parser_list_ips = subparsers.add_parser('list-ips', help='List IPs', description='list-ips')
    parser_list_ips.add_argument('file', help='The PCAP file to work on', type=valid_path)
    parser_list_ips.set_defaults(func=run_find_ips)

    parser_dumpmails = subparsers.add_parser('dump-emails', help='Dump emails', description='dump-emails')
    parser_dumpmails.add_argument('file', help='The PCAP file to work on', type=valid_path)
    parser_dumpmails.add_argument('ip', help='The IP address we are targeting')
    parser_dumpmails.set_defaults(func=run_dump_emails)

    parser_list_gets = subparsers.add_parser('list-gets', help='List gets', description='list-gets')
    parser_list_gets.add_argument('file', help='The PCAP file to work on', type=valid_path)
    parser_list_gets.add_argument('ip', help='The IP address we are targeting')
    parser_list_gets.set_defaults(func=run_list_gets)

    if len(sys.argv) > 1:
        args = parser.parse_args()
        args.func(args)
    else:
        parser.print_usage()
