|
@ -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 *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))"; |
|
|
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); |
|
|
char *new_filter = malloc(new_filter_size); |
|
|
|
|
|
|
|
|
sprintf(new_filter, proto == IPPROTO_UDP ? udp : tcp, port, port); |
|
|
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; |
|
|
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); |
|
|
char *newstr = repl_str(filter_string, IPID_TEMPLATE, addfilter); |
|
|
free(filter_string); |
|
|
free(filter_string); |
|
@ -205,17 +208,20 @@ static void add_ip_id_str(int id) { |
|
|
filter_passive_string = newstr; |
|
|
filter_passive_string = newstr; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void add_maxpayloadsize_str(unsigned short maxpayload) { |
|
|
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)"; |
|
|
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); |
|
|
char *newstr = repl_str(filter_string, MAXPAYLOADSIZE_TEMPLATE, addfilter); |
|
|
free(filter_string); |
|
|
free(filter_string); |
|
|
filter_string = newstr; |
|
|
filter_string = newstr; |
|
|
|
|
|
free(addfilter); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void finalize_filter_strings() { |
|
|
static void finalize_filter_strings() { |
|
|
char *newstr = repl_str(filter_string, IPID_TEMPLATE, ""); |
|
|
char *newstr = repl_str(filter_string, IPID_TEMPLATE, ""); |
|
|
free(filter_string); |
|
|
free(filter_string); |
|
|