-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmain.py
84 lines (74 loc) · 3.09 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
'''
Note:
Requires python 3
Requires linux (can use WSL)
Doesn't work with pcapng suffix files, only pcap suffixes
work around is just rename the suffix from pcapng to pcap.
Using Scapy library as a complement for NFStream such as parsing DNS packets
'''
from plugins.asn_info import ASNInfo
from sessions_processor import SessionsProcessor
from plugins.n_pkts_byte_freq import NPacketsByteFrequency
from plugins.first_packet_payload import FirstPacketPayloadLen
from plugins.most_freq_payload_len_ratio import MostFreqPayloadLenRatio
from plugins.dns_counter import DNSCounter
from plugins.small_pkt_payload_ratio import SmallPacketPayloadRatio
from plugins.pkt_rel_time import PacketRelativeTime
from plugins.res_req_diff_time import ResReqDiffTime
from plugins.byte_freq import ByteFrequency
from plugins.graypic import GrayPic1
from flows_processor import FlowsProcessor
from nfstream import NFStreamer # https://www.nfstream.org/docs/api
# possible files:
# './pcaps/tls.pcap'
# "./pcaps/DoH-Firefox84-NextDNS-1.pcap"
# "./pcaps/merged.pcap"
# "./tests/pcaps/dns_1.pcap"
# "./pcaps/DoH-Firefox84-first-100-sec.pcap"
pcap_filepath = "./pcaps/DoH-Firefox84-NextDNS-1.pcap"
bpf_filter_string = None
plugins = [ASNInfo(),
DNSCounter(),
FirstPacketPayloadLen(),
MostFreqPayloadLenRatio(),
NPacketsByteFrequency(n_first_packets=6),
PacketRelativeTime(),
SmallPacketPayloadRatio(),
ResReqDiffTime()]
my_streamer = NFStreamer(source=pcap_filepath,
decode_tunnels=True,
bpf_filter=bpf_filter_string,
promiscuous_mode=True,
snapshot_length=1536,
idle_timeout=1,
active_timeout=1,
accounting_mode=3,
udps=plugins,
n_dissections=20,
statistical_analysis=True,
splt_analysis=0,
n_meters=0,
performance_report=0)
my_streamer.to_csv('out-timed-flows.csv', columns_to_anonymize=[])
session_streamer = NFStreamer(source=pcap_filepath,
decode_tunnels=True,
bpf_filter=bpf_filter_string,
promiscuous_mode=True,
snapshot_length=1536,
idle_timeout=99999999,
active_timeout=99999999,
accounting_mode=3,
udps=plugins,
n_dissections=20,
statistical_analysis=True,
splt_analysis=0,
n_meters=0,
performance_report=0)
session_streamer.to_csv('out-sessions.csv', columns_to_anonymize=[])
'''
df = my_streamer.to_pandas(columns_to_anonymize=[])
sp = SessionsProcessor()
sp.process(df)
fp = FlowsProcessor(my_streamer)
fp.process()
'''