Browse Source

Experimental #2

pull/319/head
SashaXser 2 years ago
committed by GitHub
parent
commit
2b7236fa1b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      src/goodbyedpi.c

20
src/goodbyedpi.c

@ -181,7 +181,11 @@ static void add_filter_str(int proto, int port) {
const char *udp = " or (udp and !impostor and !loopback and (udp.SrcPort == %d or udp.DstPort == %d))";
const char *tcp = " or (tcp and !impostor and !loopback " MAXPAYLOADSIZE_TEMPLATE " and (tcp.SrcPort == %d or tcp.DstPort == %d))";
size_t new_filter_size = strlen(filter_string) + (proto == IPPROTO_UDP ? strlen(udp) : strlen(tcp)) + 16;
const size_t udp_length = strlen(udp);
const size_t tcp_length = strlen(tcp);
const size_t filter_string_length = strlen(filter_string);
size_t new_filter_size = filter_string_length + (proto == IPPROTO_UDP ? udp_length : tcp_length) + 16;
char *new_filter = malloc(new_filter_size);
sprintf(new_filter, proto == IPPROTO_UDP ? udp : tcp, port, port);
@ -190,11 +194,10 @@ static void add_filter_str(int proto, int port) {
filter_string = new_filter;
}
static void add_ip_id_str(int id) {
const char *ipid = " or ip.Id == %d";
char *addfilter = malloc(strlen(ipid) + 16);
sprintf(addfilter, ipid, id);
static void add_ip_id_str(int id) {
char addfilter[32];
snprintf(addfilter, sizeof(addfilter), " or ip.Id == %d", id);
char *newstr = repl_str(filter_string, IPID_TEMPLATE, addfilter);
free(filter_string);
@ -205,17 +208,20 @@ static void add_ip_id_str(int id) {
filter_passive_string = newstr;
}
static void add_maxpayloadsize_str(unsigned short maxpayload) {
const char *maxpayloadsize_str = "and (tcp.PayloadLength ? tcp.PayloadLength < %hu or tcp.Payload32[0] == 0x47455420 or tcp.Payload32[0] == 0x504F5354 : true)";
char *addfilter = malloc(strlen(maxpayloadsize_str) + 16);
char *addfilter;
sprintf(addfilter, maxpayloadsize_str, maxpayload);
asprintf(&addfilter, maxpayloadsize_str, maxpayload);
char *newstr = repl_str(filter_string, MAXPAYLOADSIZE_TEMPLATE, addfilter);
free(filter_string);
filter_string = newstr;
free(addfilter);
}
static void finalize_filter_strings() {
char *newstr = repl_str(filter_string, IPID_TEMPLATE, "");
free(filter_string);

Loading…
Cancel
Save