Моя основная идея - искать в полезной нагрузке определенное слово, там или нет.Я написал этот код для поиска ключевого слова (search_for_string
) в unsigned char
(foo
).
Проблема в том, что foo
является указателем на unsigned char
.Как сохранить значение указателя foo
в новой строковой переменной и использовать его в strstr
?
Для iptables я настроил это правило через терминал:
sudo iptables -t filter -I OUTPUT --proto tcp -j NFQUEUE --queue-num 1
Это мой тестовый nping перед запуском кода:
sudo nping -c 10 --tcp -p 80,433 --data-string helloWorld 185.60.216.35
Для компиляции файла я дополнительно использую:
gcc -o output input.c -lnetfilter_queue -lnfnetlink
Файл кода
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <string.h>
#include <libnetfilter_queue/libnetfilter_queue.h>
#include <linux/netfilter.h>
#include <sys/stat.h>
#include <sys/types.h>
static int cb(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
struct nfq_data *nfa, void *data) {
size_t payloadLen = 0;
unsigned char *foo;
payloadLen = nfq_get_payload(nfa, &foo);
struct iphdr *ip_header;
ip_header = (struct iphdr *)foo;
struct nfqnl_msg_packet_hdr *ph;
ph = nfq_get_msg_packet_hdr(nfa);
char search_for_string[] = "helloWorld";
if (strstr((char *)foo, search_for_string)) {
printf("\nThe Payload contains the keyword.");
} else {
printf("\nPayload does not contain the keyword.");
}