Loading nfq/desync.c +31 −29 Original line number Diff line number Diff line Loading @@ -1188,11 +1188,20 @@ static uint8_t dpi_desync_tcp_packet_play(bool replay, size_t reasm_offset, uint //ConntrackPoolDump(¶ms.conntrack); if (dp->wsize && tcp_synack_segment(dis->tcp)) if (tcp_synack_segment(dis->tcp)) { if (dp->wsize) { tcp_rewrite_winsize(dis->tcp, dp->wsize, dp->wscale); verdict=VERDICT_MODIFY; } if (dp->synack_split==SS_SYN) { DLOG("split SYNACK : clearing ACK bit\n"); dis->tcp->th_flags &= ~TH_ACK; verdict=VERDICT_MODIFY; } } if (bReverse) { Loading Loading @@ -1280,20 +1289,14 @@ static uint8_t dpi_desync_tcp_packet_play(bool replay, size_t reasm_offset, uint } } if (dp->synack_split!=SS_NONE && tcp_synack_segment(dis->tcp)) if ((dp->synack_split==SS_SYNACK || dp->synack_split==SS_ACKSYN) && tcp_synack_segment(dis->tcp)) { // reconstruct required dis->tcp->th_flags &= ~TH_ACK; tcp_fix_checksum(dis->tcp,dis->transport_len, dis->ip, dis->ip6); char ss[2],i,ct; if (dp->synack_split==SS_SYN) { ct=1; ss[0] = 'S'; } else { ct=2; char ss[2],i; if (dp->synack_split==SS_SYNACK) { ss[0] = 'S'; Loading @@ -1312,18 +1315,17 @@ static uint8_t dpi_desync_tcp_packet_play(bool replay, size_t reasm_offset, uint DLOG_ERR("cannot prepare split SYNACK ACK part\n"); goto send_orig; } } for (int i=0;i<ct;i++) for (int i=0;i<2;i++) { switch(ss[i]) { case 'S': DLOG("sending split SYNACK : SYN\n"); DLOG("split SYNACK : SYN\n"); if (!rawsend_rep(dp->desync_repeats,(struct sockaddr *)&dst, desync_fwmark, ifout , dis->data_pkt, dis->len_pkt)) goto send_orig; break; case 'A': DLOG("sending split SYNACK : ACK\n"); DLOG("split SYNACK : ACK\n"); if (!rawsend_rep(dp->desync_repeats,(struct sockaddr *)&dst, desync_fwmark, ifout , pkt1, pkt1_len)) goto send_orig; break; Loading nfq/nfqws.c +1 −7 Original line number Diff line number Diff line Loading @@ -527,13 +527,7 @@ static int win_main(const char *windivert_filter) WINDIVERT_ADDRESS wa; char ifname[IFNAMSIZ]; if (params.daemon) { // cygwin loses current dir char *cwd = get_current_dir_name(); daemonize(); chdir(cwd); } if (params.daemon) daemonize(); if (*params.pidfile && !writepid(params.pidfile)) { Loading nfq/sec.c +8 −0 Original line number Diff line number Diff line Loading @@ -343,9 +343,13 @@ void print_id(void) #endif void daemonize(void) { int pid; #ifdef __CYGWIN__ char *cwd = get_current_dir_name(); #endif pid = fork(); if (pid == -1) Loading @@ -356,6 +360,10 @@ void daemonize(void) else if (pid != 0) exit(0); #ifdef __CYGWIN__ chdir(get_current_dir_name()); #endif if (setsid() == -1) exit(2); if (chdir("/") == -1) Loading Loading
nfq/desync.c +31 −29 Original line number Diff line number Diff line Loading @@ -1188,11 +1188,20 @@ static uint8_t dpi_desync_tcp_packet_play(bool replay, size_t reasm_offset, uint //ConntrackPoolDump(¶ms.conntrack); if (dp->wsize && tcp_synack_segment(dis->tcp)) if (tcp_synack_segment(dis->tcp)) { if (dp->wsize) { tcp_rewrite_winsize(dis->tcp, dp->wsize, dp->wscale); verdict=VERDICT_MODIFY; } if (dp->synack_split==SS_SYN) { DLOG("split SYNACK : clearing ACK bit\n"); dis->tcp->th_flags &= ~TH_ACK; verdict=VERDICT_MODIFY; } } if (bReverse) { Loading Loading @@ -1280,20 +1289,14 @@ static uint8_t dpi_desync_tcp_packet_play(bool replay, size_t reasm_offset, uint } } if (dp->synack_split!=SS_NONE && tcp_synack_segment(dis->tcp)) if ((dp->synack_split==SS_SYNACK || dp->synack_split==SS_ACKSYN) && tcp_synack_segment(dis->tcp)) { // reconstruct required dis->tcp->th_flags &= ~TH_ACK; tcp_fix_checksum(dis->tcp,dis->transport_len, dis->ip, dis->ip6); char ss[2],i,ct; if (dp->synack_split==SS_SYN) { ct=1; ss[0] = 'S'; } else { ct=2; char ss[2],i; if (dp->synack_split==SS_SYNACK) { ss[0] = 'S'; Loading @@ -1312,18 +1315,17 @@ static uint8_t dpi_desync_tcp_packet_play(bool replay, size_t reasm_offset, uint DLOG_ERR("cannot prepare split SYNACK ACK part\n"); goto send_orig; } } for (int i=0;i<ct;i++) for (int i=0;i<2;i++) { switch(ss[i]) { case 'S': DLOG("sending split SYNACK : SYN\n"); DLOG("split SYNACK : SYN\n"); if (!rawsend_rep(dp->desync_repeats,(struct sockaddr *)&dst, desync_fwmark, ifout , dis->data_pkt, dis->len_pkt)) goto send_orig; break; case 'A': DLOG("sending split SYNACK : ACK\n"); DLOG("split SYNACK : ACK\n"); if (!rawsend_rep(dp->desync_repeats,(struct sockaddr *)&dst, desync_fwmark, ifout , pkt1, pkt1_len)) goto send_orig; break; Loading
nfq/nfqws.c +1 −7 Original line number Diff line number Diff line Loading @@ -527,13 +527,7 @@ static int win_main(const char *windivert_filter) WINDIVERT_ADDRESS wa; char ifname[IFNAMSIZ]; if (params.daemon) { // cygwin loses current dir char *cwd = get_current_dir_name(); daemonize(); chdir(cwd); } if (params.daemon) daemonize(); if (*params.pidfile && !writepid(params.pidfile)) { Loading
nfq/sec.c +8 −0 Original line number Diff line number Diff line Loading @@ -343,9 +343,13 @@ void print_id(void) #endif void daemonize(void) { int pid; #ifdef __CYGWIN__ char *cwd = get_current_dir_name(); #endif pid = fork(); if (pid == -1) Loading @@ -356,6 +360,10 @@ void daemonize(void) else if (pid != 0) exit(0); #ifdef __CYGWIN__ chdir(get_current_dir_name()); #endif if (setsid() == -1) exit(2); if (chdir("/") == -1) Loading