Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
2d0fc4d9c6 |
1 changed files with 95 additions and 0 deletions
95
gtk.c
Normal file
95
gtk.c
Normal file
|
@ -0,0 +1,95 @@
|
|||
#include <gtk/gtk.h>
|
||||
#include <pcap.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netinet/if_ether.h>
|
||||
#include <netinet/ip.h>
|
||||
#include <netinet/udp.h>
|
||||
|
||||
#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;
|
||||
}
|
Loading…
Reference in a new issue