import os import signal import sys import time import socket from scapy.all import sniff, wrpcap from datetime import datetime from threading import Event def signal_handler(sig, frame): global stop_event stop_event.set() def capture_traffic(interface, ip, port): global stop_event stop_event = Event() signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGTERM, signal_handler) def create_filename(interface): now = datetime.now() return f"{now.strftime('%Y%m%d_%H%M')}_{interface}_{int(time.time())}.pcap" def save_packets(packets, filename): wrpcap(filename, packets) print(f"Saved {len(packets)} packets to {filename}") send_file(filename, ip, port) #on the netcat server, run `nc -l -p 5000 > received_file.pcap` def send_file(filename, ip, port): with open(filename, 'rb') as f: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, port)) data = f.read(1024) while data: s.send(data) data = f.read(1024) s.close() print(f"Sent {filename} to {ip}:{port}") while not stop_event.is_set(): filename = create_filename(interface) packets = sniff(iface=interface, timeout=5*60, stop_filter=lambda x: stop_event.is_set()) save_packets(packets, filename) if __name__ == "__main__": if len(sys.argv) != 4: print(f"Usage: {sys.argv[0]} ") sys.exit(1) interface = sys.argv[1] ip = sys.argv[2] port = int(sys.argv[3]) capture_traffic(interface, ip, port)