aboutsummaryrefslogtreecommitdiff
path: root/analyzer/analyzer.c
diff options
context:
space:
mode:
authorMosder <xmosder12@gmail.com>2026-06-17 22:55:55 +0200
committerMosder <xmosder12@gmail.com>2026-06-17 22:55:55 +0200
commitd62be280a151883866554e9ea00a5efed2fa593a (patch)
tree2ab15188499eb5c0d7f9c36d1b2c63c92c31a602 /analyzer/analyzer.c
parentc2568d72efca8fae3c610072cb055f9c8de3ca5f (diff)
feat: added simple reading of packets from file and printing the payloads. TODO: utilize TCP sequence number to make sure the stream is read in order and parse the packets without reassemblying the entire stream (which might be enormous), but keeping in mind that entire fight result might be accross multiple segments
Diffstat (limited to 'analyzer/analyzer.c')
-rw-r--r--analyzer/analyzer.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/analyzer/analyzer.c b/analyzer/analyzer.c
new file mode 100644
index 0000000..7790f41
--- /dev/null
+++ b/analyzer/analyzer.c
@@ -0,0 +1,36 @@
+#include "analyzer.h"
+
+#include <unistd.h>
+
+#include "utils/pcap.h"
+
+void analyze_file(char *path) {
+ // open the file
+ char errbuf[PCAP_ERRBUF_SIZE];
+ pcap_t *handle = pcap_open_offline(path, errbuf);
+
+ // handle errors
+ if (handle == NULL) {
+ printf("Couldn't open the specified file:\n%s\n", errbuf);
+ return;
+ }
+
+ struct pcap_pkthdr *packet_data;
+ const unsigned char *packet;
+ const unsigned char *payload;
+
+ // read packets from the file
+ while (pcap_next_ex(handle, &packet_data, &packet) == 1) {
+ int payload_len;
+ payload = get_payload_from_packet(packet, packet_data, &payload_len);
+ if (payload_len > 0) {
+ printf("\n----------------\n");
+ printf("Payload length: %d\n", payload_len);
+ printf("Payload:\n");
+ fflush(stdout);
+ write(STDOUT_FILENO, payload, payload_len);
+ }
+ }
+
+ pcap_close(handle);
+}