first working
This commit is contained in:
61
airstream.py
Executable file
61
airstream.py
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
|
||||
from scapy.all import get_if_list
|
||||
|
||||
from frametypes import FRAME_TYPES
|
||||
from core.analyzer import PacketFlowAnalyzer
|
||||
|
||||
|
||||
def main():
|
||||
p = argparse.ArgumentParser(description="Airstream - Packet Flow Analyzer")
|
||||
p.add_argument('-p', '--pcap', help='PCAP file')
|
||||
p.add_argument('-i', '--interface', help='Network interface')
|
||||
p.add_argument('-c', '--count', type=int, default=100, help='Packet count (default: 100)')
|
||||
p.add_argument('-l', '--list-interfaces', action='store_true', help='List interfaces')
|
||||
p.add_argument('-o', '--output', help='CSV output file')
|
||||
p.add_argument('-s', '--stats', nargs='+', choices=list(FRAME_TYPES.keys()) + ['all'],
|
||||
default=['overview'], help='Statistics types to use (default: overview, use "all" for all types)')
|
||||
|
||||
args = p.parse_args()
|
||||
|
||||
if args.list_interfaces:
|
||||
print("Interfaces:", *get_if_list(), sep='\n ')
|
||||
return
|
||||
|
||||
if not (args.pcap or args.interface):
|
||||
p.error("Specify --pcap or --interface")
|
||||
|
||||
# Handle 'all' option
|
||||
if 'all' in args.stats:
|
||||
selected_stats = list(FRAME_TYPES.keys())
|
||||
stats_classes = list(FRAME_TYPES.values())
|
||||
else:
|
||||
selected_stats = args.stats
|
||||
stats_classes = [FRAME_TYPES[s] for s in args.stats]
|
||||
|
||||
print(f"Using stats: {', '.join(selected_stats)}")
|
||||
|
||||
analyzer = PacketFlowAnalyzer(stats_classes)
|
||||
|
||||
try:
|
||||
if args.pcap:
|
||||
analyzer.analyze_pcap(args.pcap)
|
||||
else:
|
||||
analyzer.analyze_live(args.interface, args.count)
|
||||
|
||||
analyzer.print_summary()
|
||||
|
||||
if args.output:
|
||||
analyzer.summary().to_csv(args.output, index=False)
|
||||
print(f"Saved: {args.output}")
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\nInterrupted")
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user