From 2d0fc4d9c66ec1cfe6657dc89099d9d5cc8e8cbb Mon Sep 17 00:00:00 2001 From: Tristan Smith Date: Fri, 20 Dec 2024 00:16:25 -0500 Subject: [PATCH] update? --- gtk.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 gtk.c diff --git a/gtk.c b/gtk.c new file mode 100644 index 0000000..abcbfb6 --- /dev/null +++ b/gtk.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SOURCE_PORT 14236 +#define DEST_PORT 14235 + +GtkWidget *text_view; +GtkTextBuffer *text_buffer; + +void update_text_view(const char *message) { + GtkTextIter end; + gtk_text_buffer_get_end_iter(text_buffer, &end); + gtk_text_buffer_insert(text_buffer, &end, message, -1); +} + +static void activate(GtkApplication *app, gpointer user_data) { + GtkWidget *window; + + // Create a new window for the application + window = gtk_application_window_new(app); + gtk_window_set_title(GTK_WINDOW(window), "IP Reporter"); + gtk_window_set_default_size(GTK_WINDOW(window), 400, 300); + + // Add any widgets here (e.g., labels, buttons) + GtkWidget *label = gtk_label_new("Listening..."); + gtk_window_set_child(GTK_WINDOW(window), label); + + // Show the window + gtk_window_present(GTK_WINDOW(window)); +} + +void packet_handler(unsigned char *user, const struct pcap_pkthdr *h, const unsigned char *bytes) { + struct ether_header *eth_header = (struct ether_header *)bytes; + struct ip *ip_header = (struct ip *)(bytes + sizeof(struct ether_header)); + struct udphdr *udp_header = (struct udphdr *)(bytes + sizeof(struct ether_header) + sizeof(struct ip)); + + if (ntohs(eth_header->ether_type) == ETHERTYPE_IP && ip_header->ip_p == IPPROTO_UDP) { + char source_ip[INET_ADDRSTRLEN]; + char dest_ip[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &(ip_header->ip_src), source_ip, INET_ADDRSTRLEN); + inet_ntop(AF_INET, &(ip_header->ip_dst), dest_ip, INET_ADDRSTRLEN); + + if (strcmp(dest_ip, "255.255.255.255") == 0 && + ntohs(udp_header->source) == SOURCE_PORT && + ntohs(udp_header->dest) == DEST_PORT) { + + char message[256]; + snprintf(message, sizeof(message), "Miner IP: %s\n", source_ip); + g_main_context_invoke(NULL, (GSourceFunc)update_text_view, strdup(message)); + } + } +} + +void start_packet_capture(const char *device) { + char errbuf[PCAP_ERRBUF_SIZE]; + pcap_t *handle = pcap_open_live(device, BUFSIZ, 1, 1000, errbuf); + if (handle == NULL) { + fprintf(stderr, "Error: %s\n", errbuf); + return; + } + + pcap_loop(handle, 0, packet_handler, NULL); + pcap_close(handle); +} + +void on_start_button_clicked(GtkButton *button, gpointer user_data) { + const char *device = user_data; + g_thread_new("pcap_thread", (GThreadFunc)start_packet_capture, (gpointer)device); +} + +int main(int argc, char **argv) { + GtkApplication *app; + int status; + + // Create a new GtkApplication + app = gtk_application_new("org.monotreme.antminer", G_APPLICATION_DEFAULT_FLAGS); + + // Connect the activate signal to the activate function + g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); + + // Run the application + status = g_application_run(G_APPLICATION(app), argc, argv); + + // Free the application object + g_object_unref(app); + + return status; +}