This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
netsec-djw2/final/capture.py
2024-06-12 23:43:48 -07:00

55 lines
1.6 KiB
Python

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]} <interface> <ip> <port>")
sys.exit(1)
interface = sys.argv[1]
ip = sys.argv[2]
port = int(sys.argv[3])
capture_traffic(interface, ip, port)