Beste Tweakers,
Ik heb denk ik te lang naar mijn eigen code zitten staren, maar ik zie echt het probleem niet. Waarschijnlijk is het iets doms en heb ik na de eerste comment een "ja, natuurlijk dat is het"-moment, maar nu zie ik het even niet.
Ik heb 3 python bestanden. 1 main bestand, 1 test bestand voor pytest, en 1 bestand waar een simpele functie in staat.
Het testbestand en het functiebestand werken goed samen. Bovenin het testbestand heb ik from functie import countTcpSyn staan, de tests komen eruit zoals verwacht.
Nu wil ik in het main bestand deze functie op dezelfde wijze importeren, maar wat ik ook doe, het wil niet werken.
Hoe zorg ik ervoor dat mijn functie uit functie.py wordt geimporteerd in mijn main bestand, en deze uitvoert op de plek waar nu de code zelf nog staat, maar dan uiteraard met het gekozen JSON bestand?
Main bestand
Test bestand
Functie
Ik heb denk ik te lang naar mijn eigen code zitten staren, maar ik zie echt het probleem niet. Waarschijnlijk is het iets doms en heb ik na de eerste comment een "ja, natuurlijk dat is het"-moment, maar nu zie ik het even niet.
Ik heb 3 python bestanden. 1 main bestand, 1 test bestand voor pytest, en 1 bestand waar een simpele functie in staat.
Het testbestand en het functiebestand werken goed samen. Bovenin het testbestand heb ik from functie import countTcpSyn staan, de tests komen eruit zoals verwacht.
Nu wil ik in het main bestand deze functie op dezelfde wijze importeren, maar wat ik ook doe, het wil niet werken.
Hoe zorg ik ervoor dat mijn functie uit functie.py wordt geimporteerd in mijn main bestand, en deze uitvoert op de plek waar nu de code zelf nog staat, maar dan uiteraard met het gekozen JSON bestand?
Main bestand
code:
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
85
| import json import heapq import argparse # Create an argument parser parser = argparse.ArgumentParser(description='Update dataset.json with a new file.') # Add the file argument parser.add_argument('file_path', type=str, nargs='?', default='dataset.json', help='Path to the file to update dataset.json with.') parser.add_argument('-p', '--protocol', action='store_true', help='display protocols used in JSON file' ) parser.add_argument('-pc', '--packetcount', action='store_true', help='display packetcount in JSON file' ) parser.add_argument('-tcp', '--tcpflags', action='store_true', help='''display top 3 IP's with SYN bits on 1 ''' ) # Parse the command-line arguments args = parser.parse_args() # Load the JSON data from the provided file with open(args.file_path) as file: data = json.load(file) class JSONAnalyzer: def __init__(self, file_path='dataset.json'): self.file_path = file_path self.data = None def load_data(self): with open(self.file_path) as file: self.data = json.load(file) def display_protocols(self): protocols = self.data[0]['_source']['layers']['frame']['frame.protocols'] protocol_list = protocols.split(':') print("These protocols are being used:", protocol_list) def display_packet_counts(self): packet_counts = {} for packet in self.data: timestamp = packet["_source"]["layers"]["frame"]["frame.time"] minute = timestamp.split(':')[1] packet_counts[minute] = packet_counts.get(minute, 0) + 1 for minute, count in packet_counts.items(): print(f"Minute {minute}: {count} packets") def display_top_tcp_flags(self): def count_tcp_syn(data): ip_src_syn_count = {} for packet in data: layers = packet["_source"]["layers"] ip_src = layers["ip"]["ip.src"] tcp_flags_syn = layers["tcp"]["tcp.flags_tree"]["tcp.flags.syn"] if ip_src in ip_src_syn_count: ip_src_syn_count[ip_src] += int(tcp_flags_syn) else: ip_src_syn_count[ip_src] = int(tcp_flags_syn) return ip_src_syn_count ip_src_syn_count = count_tcp_syn(self.data) top_counts = heapq.nlargest(3, ip_src_syn_count.values()) print("Top 3 IP source and tcp.flags.syn counts (descending order):") for syn_count in top_counts: for ip_src, count in ip_src_syn_count.items(): if count == syn_count: print("IP source:", ip_src) print("Number of TCP connection requests by tcp.flags.syn = 1:", count) print() # Create an instance of JSONAnalyzer analyzer = JSONAnalyzer() # Load the JSON data from the file analyzer.load_data() # Use the methods to analyze and display information if args.protocol == True: analyzer.display_protocols() if args.packetcount == True: analyzer.display_packet_counts() if args.tcpflags == True: analyzer.display_top_tcp_flags() |
Test bestand
code:
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
| from functie import countTcpSyn def test_countTcpSyn(): # Define a sample data input for the function data = [ { "_source": { "layers": { "ip": {"ip.src": "192.168.0.1"}, "tcp": {"tcp.flags_tree": {"tcp.flags.syn": "1"}} } } }, { "_source": { "layers": { "ip": {"ip.src": "192.168.1.9"}, "tcp": {"tcp.flags_tree": {"tcp.flags.syn": "1"}} } } }, { "_source": { "layers": { "ip": {"ip.src": "192.168.0.1"}, "tcp": {"tcp.flags_tree": {"tcp.flags.syn": "1"}} } } } ] # Call the function to get the result result = countTcpSyn(data) # Assert the expected output based on the sample data expected_result = {"192.168.0.1": 2, "192.168.1.9": 1,} assert result == expected_result |
Functie
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| def countTcpSyn(data): ipSrcSynCount = {} # For loop that counts the tcp.flags.syn bit per IP source adres for packet in data: layers = packet["_source"]["layers"] ipSrc = layers["ip"]["ip.src"] tcpFlagsSyn = layers["tcp"]["tcp.flags_tree"]["tcp.flags.syn"] if ipSrc in ipSrcSynCount: ipSrcSynCount[ipSrc] += int(tcpFlagsSyn) else: ipSrcSynCount[ipSrc] = int(tcpFlagsSyn) return ipSrcSynCount |