From 12bd09c140630766f03ddf9abaf6cd8cbf35f837 Mon Sep 17 00:00:00 2001 From: bol-van Date: Sat, 27 Apr 2024 09:35:58 +0300 Subject: [PATCH] winws: --wf-iface filter --- binaries/win64/winws.exe | Bin 164352 -> 164864 bytes binaries/win64/zapret-winws/winws.exe | Bin 164352 -> 164864 bytes docs/windows.eng.md | 5 + docs/windows.txt | 6 + nfq/nfqws.c | 235 ++++++++++++++------------ 5 files changed, 137 insertions(+), 109 deletions(-) diff --git a/binaries/win64/winws.exe b/binaries/win64/winws.exe index 1b3b2a1017eaff37581229a950a365261b2698d7..b7f96c3cc85b63f4348062cce8eee121b27d219d 100644 GIT binary patch delta 10844 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[:] ; numeric network interface and subinterface indexes --wf-l3=ipv4|ipv6 ; L3 protocol filter. multiple comma separated values allowed. --wf-tcp=[~]port1[-port2] ; TCP port filter. ~ means negation. multiple comma separated values allowed. --wf-udp=[~]port1[-port2] ; UDP port filter. ~ means negation. multiple comma separated values allowed. @@ -52,6 +53,10 @@ Task of `iptables` is done inside `winws` through `windivert` filters. `Windiver `--wf-l3`, `--wf-tcp`, `--wf-udp` can take multiple comma separated arguments. +Interface indexes can be discovered using this command : `netsh int ip show int` + +If you can't find index this way use `winws --debug` to see index there. Subinterface index is almost always 0 and you can omit it. + Multiple `winws` processes are allowed. However, it's discouraged to intersect their filters. Paths are passed in `cygwin` format. Windows drives are mapped to `/cygdrive/x`. For example : `/cygdrive/c/Users/vasya/zapret`. diff --git a/docs/windows.txt b/docs/windows.txt index 2094aa2..767cadc 100644 --- a/docs/windows.txt +++ b/docs/windows.txt @@ -48,6 +48,7 @@ secure boot могут быть проблемы из-за подписи дра Документация по фильтрам windivert : https://reqrypt.org/windivert-doc.html#filter_language Чтобы не писать сложные фильтры вручную, предусмотрены различные упрощенные варианты автоматического построения фильтров. + --wf-iface=[:] ; числовые индексы интерфейса и суб-интерфейса --wf-l3=ipv4|ipv6 ; фильтр L3 протоколов. по умолчанию включены ipv4 и ipv6. --wf-tcp=[~]port1[-port2] ; фильтр портов для tcp. ~ означает отрицание --wf-udp=[~]port1[-port2] ; фильтр портов для udp. ~ означает отрицание @@ -56,6 +57,10 @@ secure boot могут быть проблемы из-за подписи дра Параметры --wf-l3, --wf-tcp, --wf-udp могут брать несколько значений через запятую. +Номера интерфейсов можно узнать так : netsh int ip show int. +Некоторых типы соединений там не увидеть. В этом случае запускайте winws с параметром --debug и смотрите IfIdx там. +SubInterface используется windivert, но практически всегда 0, его можно не указывать. Вероятно он нужен в редких случаях. + Конструктор фильтров автоматически включает входящие tcp пакеты с tcp synack и tcp rst для корректной работы функций autottl и autohostlist. При включении autohostlist так же перенаправляются пакеты данных с http redirect с кодами 302 и 307. Всегда добавляется фильтр на исключение не-интернет адресов ipv4 и ipv6. @@ -81,6 +86,7 @@ setup-x86_64.exe --allow-unsupported-windows --no-verify --site http://ctm.crouc Следует выбрать установку curl. Для сборки из исходников требуется gcc-core,make,zlib-devel. +Собирать из директории nfq командой "make cygwin". winws требует cygwin1.dll, windivert.dll, windivert64.sys. Их можно взять из binaries/win64/zapret-winws. Версию для 32-битных x86 windows собрать можно, но такие системы уже уходят в прошлое, поэтому если надо - собирайте сами. 32-битный windivert можно взять с сайта разработчика. Требуется версия 2.2.2. diff --git a/nfq/nfqws.c b/nfq/nfqws.c index 2465354..d09ed72 100644 --- a/nfq/nfqws.c +++ b/nfq/nfqws.c @@ -489,95 +489,6 @@ static bool parse_ws_scale_factor(char *s, uint16_t *wsize, uint8_t *wscale) } -static void exithelp(void) -{ - printf( - " --debug=0|1\n" -#ifdef __linux__ - " --qnum=\n" -#elif defined(BSD) - " --port=\t\t\t\t\t; divert port\n" -#endif - " --daemon\t\t\t\t\t; daemonize\n" - " --pidfile=\t\t\t\t; write pid to file\n" -#ifndef __CYGWIN__ - " --user=\t\t\t\t; drop root privs\n" - " --uid=uid[:gid]\t\t\t\t; drop root privs\n" -#endif -#ifdef __linux__ - " --bind-fix4\t\t\t\t\t; apply outgoing interface selection fix for generated ipv4 packets\n" - " --bind-fix6\t\t\t\t\t; apply outgoing interface selection fix for generated ipv6 packets\n" -#endif - " --ctrack-timeouts=S:E:F[:U]\t\t\t; internal conntrack timeouts for TCP SYN, ESTABLISHED, FIN stages, UDP timeout. default %u:%u:%u:%u\n" -#ifdef __CYGWIN__ - "\nWINDIVERT FILTER:\n" - " --wf-l3=ipv4|ipv6\t\t\t\t; L3 protocol filter. multiple comma separated values allowed.\n" - " --wf-tcp=[~]port1[-port2]\t\t\t; TCP port filter. ~ means negation. multiple comma separated values allowed.\n" - " --wf-udp=[~]port1[-port2]\t\t\t; UDP port filter. ~ means negation. multiple comma separated values allowed.\n" - " --wf-raw=|@\t\t\t; raw windivert filter string or filename\n" - " --wf-save=\t\t\t\t; save windivert filter string to a file and exit\n" -#endif - "\nHOSTLIST FILTER:\n" - " --hostlist=\t\t\t\t; apply dpi desync only to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)\n" - " --hostlist-exclude=\t\t\t; do not apply dpi desync to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)\n" - " --hostlist-auto=\t\t\t; detect DPI blocks and build hostlist automatically\n" - " --hostlist-auto-fail-threshold=\t\t; how many failed attempts cause hostname to be added to auto hostlist (default : %d)\n" - " --hostlist-auto-fail-time=\t\t; all failed attemps must be within these seconds (default : %d)\n" - " --hostlist-auto-retrans-threshold=\t; how many request retransmissions cause attempt to fail (default : %d)\n" - " --hostlist-auto-debug=\t\t; debug auto hostlist positives\n" - "\nTAMPER:\n" - " --wsize=[:]\t\t; set window size. 0 = do not modify. OBSOLETE !\n" - " --wssize=[:]\t; set window size for server. 0 = do not modify. default scale_factor = 0.\n" - " --wssize-cutoff=[n|d|s]N\t\t\t; apply server wsize only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N\n" - " --hostcase\t\t\t\t\t; change Host: => host:\n" - " --hostspell\t\t\t\t\t; exact spelling of \"Host\" header. must be 4 chars. default is \"host\"\n" - " --hostnospace\t\t\t\t\t; remove space after Host: and add it to User-Agent: to preserve packet size\n" - " --domcase\t\t\t\t\t; mix domain case : Host: TeSt.cOm\n" - " --dpi-desync=[,][,]\t; try to desync dpi state. modes : synack syndata fake fakeknown rst rstack hopbyhop destopt ipfrag1 disorder disorder2 split split2 ipfrag2 udplen tamper\n" -#ifdef __linux__ - " --dpi-desync-fwmark=\t\t; override fwmark for desync packet. default = 0x%08X (%u)\n" -#elif defined(SO_USER_COOKIE) - " --dpi-desync-sockarg=\t\t; override sockarg (SO_USER_COOKIE) for desync packet. default = 0x%08X (%u)\n" -#endif - " --dpi-desync-ttl=\t\t\t\t; set ttl for desync packet\n" - " --dpi-desync-ttl6=\t\t\t; set ipv6 hop limit for desync packet. by default ttl value is used.\n" - " --dpi-desync-autottl=[[:[-]]]\t; auto ttl mode for both ipv4 and ipv6. default: %u:%u-%u\n" - " --dpi-desync-autottl6=[[:[-]]] ; overrides --dpi-desync-autottl for ipv6 only\n" - " --dpi-desync-fooling=[,]\t\t; can use multiple comma separated values. modes : none md5sig ts badseq badsum datanoack hopbyhop hopbyhop2\n" - " --dpi-desync-repeats=\t\t\t; send every desync packet N times\n" - " --dpi-desync-skip-nosni=0|1\t\t\t; 1(default)=do not act on ClientHello without SNI (ESNI ?)\n" - " --dpi-desync-split-pos=<1..%u>\t\t; data payload split position\n" - " --dpi-desync-ipfrag-pos-tcp=<8..%u>\t\t; ip frag position starting from the transport header. multiple of 8, default %u.\n" - " --dpi-desync-ipfrag-pos-udp=<8..%u>\t\t; ip frag position starting from the transport header. multiple of 8, default %u.\n" - " --dpi-desync-badseq-increment=\t; badseq fooling seq signed increment. default %d\n" - " --dpi-desync-badack-increment=\t; badseq fooling ackseq signed increment. default %d\n" - " --dpi-desync-any-protocol=0|1\t\t\t; 0(default)=desync only http and tls 1=desync any nonempty data packet\n" - " --dpi-desync-fake-http=|0xHEX\t; file containing fake http request\n" - " --dpi-desync-fake-tls=|0xHEX\t\t; file containing fake TLS ClientHello (for https)\n" - " --dpi-desync-fake-unknown=|0xHEX\t; file containing unknown protocol fake payload\n" - " --dpi-desync-fake-syndata=|0xHEX\t; file containing SYN data payload\n" - " --dpi-desync-fake-quic=|0xHEX\t; file containing fake QUIC Initial\n" - " --dpi-desync-fake-wireguard=|0xHEX\t; file containing fake wireguard handshake initiation\n" - " --dpi-desync-fake-dht=|0xHEX\t\t; file containing DHT protocol fake payload (d1...e)\n" - " --dpi-desync-fake-unknown-udp=|0xHEX\t; file containing unknown udp protocol fake payload\n" - " --dpi-desync-udplen-increment=\t\t; increase or decrease udp packet length by N bytes (default %u). negative values decrease length.\n" - " --dpi-desync-udplen-pattern=|0xHEX\t; udp tail fill pattern\n" - " --dpi-desync-start=[n|d|s]N\t\t\t; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) greater or equal than N\n" - " --dpi-desync-cutoff=[n|d|s]N\t\t\t; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N\n", - CTRACK_T_SYN, CTRACK_T_EST, CTRACK_T_FIN, CTRACK_T_UDP, - HOSTLIST_AUTO_FAIL_THRESHOLD_DEFAULT, HOSTLIST_AUTO_FAIL_TIME_DEFAULT, HOSTLIST_AUTO_RETRANS_THRESHOLD_DEFAULT, -#if defined(__linux__) || defined(SO_USER_COOKIE) - DPI_DESYNC_FWMARK_DEFAULT,DPI_DESYNC_FWMARK_DEFAULT, -#endif - AUTOTTL_DEFAULT_DELTA,AUTOTTL_DEFAULT_MIN,AUTOTTL_DEFAULT_MAX, - DPI_DESYNC_MAX_FAKE_LEN, - DPI_DESYNC_MAX_FAKE_LEN, IPFRAG_UDP_DEFAULT, - DPI_DESYNC_MAX_FAKE_LEN, IPFRAG_TCP_DEFAULT, - BADSEQ_INCREMENT_DEFAULT, BADSEQ_ACK_INCREMENT_DEFAULT, - UDPLEN_INCREMENT_DEFAULT - ); - exit(1); -} static void cleanup_params(void) { @@ -589,11 +500,6 @@ static void cleanup_params(void) StrPoolDestroy(¶ms.hostlist); HostFailPoolDestroy(¶ms.hostlist_auto_fail_counters); } -static void exithelp_clean(void) -{ - cleanup_params(); - exithelp(); -} static void exit_clean(int code) { cleanup_params(); @@ -755,7 +661,7 @@ static bool wf_make_l3(char *opt, bool *ipv4, bool *ipv6) #define DIVERT_NO_LOCALNETS_SRC "(" DIVERT_NO_LOCALNETSv4_SRC " or " DIVERT_NO_LOCALNETSv6_SRC ")" #define DIVERT_NO_LOCALNETS_DST "(" DIVERT_NO_LOCALNETSv4_DST " or " DIVERT_NO_LOCALNETSv6_DST ")" -#define DIVERT_TCP_INBOUNDS "tcp.Ack and tcp.Syn or tcp.Rst or tcp.Fin" +#define DIVERT_TCP_INBOUNDS "(tcp.Ack and tcp.Syn or tcp.Rst or tcp.Fin)" // HTTP/1.? 30(2|7) #define DIVERT_HTTP_REDIRECT "tcp.PayloadLength>=12 and tcp.Payload32[0]==0x48545450 and tcp.Payload16[2]==0x2F31 and tcp.Payload[6]==0x2E and tcp.Payload16[4]==0x2033 and tcp.Payload[10]==0x30 and (tcp.Payload[11]==0x32 or tcp.Payload[11]==0x37)" @@ -764,14 +670,17 @@ static bool wf_make_l3(char *opt, bool *ipv4, bool *ipv6) static bool wf_make_filter( char *wf, size_t len, + unsigned int IfIdx,unsigned int SubIfIdx, bool ipv4, bool ipv6, const char *pf_tcp_src, const char *pf_tcp_dst, const char *pf_udp_src, const char *pf_udp_dst) { - char pf_src_buf[512],pf_dst_buf[512]; + char pf_src_buf[512],pf_dst_buf[512],iface[64]; const char *pf_dst; const char *f_tcpin = *pf_tcp_src ? *params.hostlist_auto_filename ? "(" DIVERT_TCP_INBOUNDS " or (" DIVERT_HTTP_REDIRECT "))" : DIVERT_TCP_INBOUNDS : ""; + snprintf(iface,sizeof(iface)," ifIdx=%u and subIfIdx=%u and",IfIdx,SubIfIdx); + if (!*pf_tcp_src && !*pf_udp_src) return false; if (*pf_tcp_src && *pf_udp_src) { @@ -781,7 +690,8 @@ static bool wf_make_filter( else pf_dst = *pf_tcp_dst ? pf_tcp_dst : pf_udp_dst; snprintf(wf,len, - DIVERT_PROLOG " and%s\n ((outbound and %s%s)\n or\n (inbound and tcp%s%s%s%s%s%s%s))", + DIVERT_PROLOG " and%s%s\n ((outbound and %s%s)\n or\n (inbound and tcp%s%s%s%s%s%s%s))", + IfIdx ? iface : "", ipv4 ? ipv6 ? "" : " ip and" : " ipv6 and", pf_dst, ipv4 ? ipv6 ? " and " DIVERT_NO_LOCALNETS_DST : " and " DIVERT_NO_LOCALNETSv4_DST : " and " DIVERT_NO_LOCALNETSv6_DST, @@ -797,7 +707,105 @@ static bool wf_make_filter( return true; } -#endif +#endif + + +static void exithelp(void) +{ + printf( + " --debug=0|1\n" +#ifdef __linux__ + " --qnum=\n" +#elif defined(BSD) + " --port=\t\t\t\t\t; divert port\n" +#endif + " --daemon\t\t\t\t\t; daemonize\n" + " --pidfile=\t\t\t\t; write pid to file\n" +#ifndef __CYGWIN__ + " --user=\t\t\t\t; drop root privs\n" + " --uid=uid[:gid]\t\t\t\t; drop root privs\n" +#endif +#ifdef __linux__ + " --bind-fix4\t\t\t\t\t; apply outgoing interface selection fix for generated ipv4 packets\n" + " --bind-fix6\t\t\t\t\t; apply outgoing interface selection fix for generated ipv6 packets\n" +#endif + " --ctrack-timeouts=S:E:F[:U]\t\t\t; internal conntrack timeouts for TCP SYN, ESTABLISHED, FIN stages, UDP timeout. default %u:%u:%u:%u\n" +#ifdef __CYGWIN__ + "\nWINDIVERT FILTER:\n" + " --wf-iface=[:]\t\t\t; numeric network interface and subinterface indexes\n" + " --wf-l3=ipv4|ipv6\t\t\t\t; L3 protocol filter. multiple comma separated values allowed.\n" + " --wf-tcp=[~]port1[-port2]\t\t\t; TCP port filter. ~ means negation. multiple comma separated values allowed.\n" + " --wf-udp=[~]port1[-port2]\t\t\t; UDP port filter. ~ means negation. multiple comma separated values allowed.\n" + " --wf-raw=|@\t\t\t; raw windivert filter string or filename\n" + " --wf-save=\t\t\t\t; save windivert filter string to a file and exit\n" +#endif + "\nHOSTLIST FILTER:\n" + " --hostlist=\t\t\t\t; apply dpi desync only to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)\n" + " --hostlist-exclude=\t\t\t; do not apply dpi desync to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)\n" + " --hostlist-auto=\t\t\t; detect DPI blocks and build hostlist automatically\n" + " --hostlist-auto-fail-threshold=\t\t; how many failed attempts cause hostname to be added to auto hostlist (default : %d)\n" + " --hostlist-auto-fail-time=\t\t; all failed attemps must be within these seconds (default : %d)\n" + " --hostlist-auto-retrans-threshold=\t; how many request retransmissions cause attempt to fail (default : %d)\n" + " --hostlist-auto-debug=\t\t; debug auto hostlist positives\n" + "\nTAMPER:\n" + " --wsize=[:]\t\t; set window size. 0 = do not modify. OBSOLETE !\n" + " --wssize=[:]\t; set window size for server. 0 = do not modify. default scale_factor = 0.\n" + " --wssize-cutoff=[n|d|s]N\t\t\t; apply server wsize only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N\n" + " --hostcase\t\t\t\t\t; change Host: => host:\n" + " --hostspell\t\t\t\t\t; exact spelling of \"Host\" header. must be 4 chars. default is \"host\"\n" + " --hostnospace\t\t\t\t\t; remove space after Host: and add it to User-Agent: to preserve packet size\n" + " --domcase\t\t\t\t\t; mix domain case : Host: TeSt.cOm\n" + " --dpi-desync=[,][,]\t; try to desync dpi state. modes : synack syndata fake fakeknown rst rstack hopbyhop destopt ipfrag1 disorder disorder2 split split2 ipfrag2 udplen tamper\n" +#ifdef __linux__ + " --dpi-desync-fwmark=\t\t; override fwmark for desync packet. default = 0x%08X (%u)\n" +#elif defined(SO_USER_COOKIE) + " --dpi-desync-sockarg=\t\t; override sockarg (SO_USER_COOKIE) for desync packet. default = 0x%08X (%u)\n" +#endif + " --dpi-desync-ttl=\t\t\t\t; set ttl for desync packet\n" + " --dpi-desync-ttl6=\t\t\t; set ipv6 hop limit for desync packet. by default ttl value is used.\n" + " --dpi-desync-autottl=[[:[-]]]\t; auto ttl mode for both ipv4 and ipv6. default: %u:%u-%u\n" + " --dpi-desync-autottl6=[[:[-]]] ; overrides --dpi-desync-autottl for ipv6 only\n" + " --dpi-desync-fooling=[,]\t\t; can use multiple comma separated values. modes : none md5sig ts badseq badsum datanoack hopbyhop hopbyhop2\n" + " --dpi-desync-repeats=\t\t\t; send every desync packet N times\n" + " --dpi-desync-skip-nosni=0|1\t\t\t; 1(default)=do not act on ClientHello without SNI (ESNI ?)\n" + " --dpi-desync-split-pos=<1..%u>\t\t; data payload split position\n" + " --dpi-desync-ipfrag-pos-tcp=<8..%u>\t\t; ip frag position starting from the transport header. multiple of 8, default %u.\n" + " --dpi-desync-ipfrag-pos-udp=<8..%u>\t\t; ip frag position starting from the transport header. multiple of 8, default %u.\n" + " --dpi-desync-badseq-increment=\t; badseq fooling seq signed increment. default %d\n" + " --dpi-desync-badack-increment=\t; badseq fooling ackseq signed increment. default %d\n" + " --dpi-desync-any-protocol=0|1\t\t\t; 0(default)=desync only http and tls 1=desync any nonempty data packet\n" + " --dpi-desync-fake-http=|0xHEX\t; file containing fake http request\n" + " --dpi-desync-fake-tls=|0xHEX\t\t; file containing fake TLS ClientHello (for https)\n" + " --dpi-desync-fake-unknown=|0xHEX\t; file containing unknown protocol fake payload\n" + " --dpi-desync-fake-syndata=|0xHEX\t; file containing SYN data payload\n" + " --dpi-desync-fake-quic=|0xHEX\t; file containing fake QUIC Initial\n" + " --dpi-desync-fake-wireguard=|0xHEX\t; file containing fake wireguard handshake initiation\n" + " --dpi-desync-fake-dht=|0xHEX\t\t; file containing DHT protocol fake payload (d1...e)\n" + " --dpi-desync-fake-unknown-udp=|0xHEX\t; file containing unknown udp protocol fake payload\n" + " --dpi-desync-udplen-increment=\t\t; increase or decrease udp packet length by N bytes (default %u). negative values decrease length.\n" + " --dpi-desync-udplen-pattern=|0xHEX\t; udp tail fill pattern\n" + " --dpi-desync-start=[n|d|s]N\t\t\t; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) greater or equal than N\n" + " --dpi-desync-cutoff=[n|d|s]N\t\t\t; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N\n", + CTRACK_T_SYN, CTRACK_T_EST, CTRACK_T_FIN, CTRACK_T_UDP, + HOSTLIST_AUTO_FAIL_THRESHOLD_DEFAULT, HOSTLIST_AUTO_FAIL_TIME_DEFAULT, HOSTLIST_AUTO_RETRANS_THRESHOLD_DEFAULT, +#if defined(__linux__) || defined(SO_USER_COOKIE) + DPI_DESYNC_FWMARK_DEFAULT,DPI_DESYNC_FWMARK_DEFAULT, +#endif + AUTOTTL_DEFAULT_DELTA,AUTOTTL_DEFAULT_MIN,AUTOTTL_DEFAULT_MAX, + DPI_DESYNC_MAX_FAKE_LEN, + DPI_DESYNC_MAX_FAKE_LEN, IPFRAG_UDP_DEFAULT, + DPI_DESYNC_MAX_FAKE_LEN, IPFRAG_TCP_DEFAULT, + BADSEQ_INCREMENT_DEFAULT, BADSEQ_ACK_INCREMENT_DEFAULT, + UDPLEN_INCREMENT_DEFAULT + ); + exit(1); +} +static void exithelp_clean(void) +{ + cleanup_params(); + exithelp(); +} + int main(int argc, char **argv) { @@ -808,6 +816,7 @@ int main(int argc, char **argv) #ifdef __CYGWIN__ char windivert_filter[8192], wf_pf_tcp_src[256], wf_pf_tcp_dst[256], wf_pf_udp_src[256], wf_pf_udp_dst[256], wf_save_file[256]; bool wf_ipv4=true, wf_ipv6=true; + unsigned int IfIdx=0, SubIfIdx=0; *windivert_filter = *wf_pf_tcp_src = *wf_pf_tcp_dst = *wf_pf_udp_src = *wf_pf_udp_dst = *wf_save_file = 0; #endif @@ -933,11 +942,12 @@ int main(int argc, char **argv) {"bind-fix4",no_argument,0,0}, // optidx=48 {"bind-fix6",no_argument,0,0}, // optidx=49 #elif defined(__CYGWIN__) - {"wf-l3",required_argument,0,0}, // optidx=48 - {"wf-tcp",required_argument,0,0}, // optidx=49 - {"wf-udp",required_argument,0,0}, // optidx=50 - {"wf-raw",required_argument,0,0}, // optidx=51 - {"wf-save",required_argument,0,0}, // optidx=52 + {"wf-iface",required_argument,0,0}, // optidx=48 + {"wf-l3",required_argument,0,0}, // optidx=49 + {"wf-tcp",required_argument,0,0}, // optidx=50 + {"wf-udp",required_argument,0,0}, // optidx=51 + {"wf-raw",required_argument,0,0}, // optidx=52 + {"wf-save",required_argument,0,0}, // optidx=53 #endif {NULL,0,NULL,0} }; @@ -1374,14 +1384,21 @@ int main(int argc, char **argv) params.bind_fix6 = true; break; #elif defined(__CYGWIN__) - case 48: /* wf-l3 */ + case 48: /* wf-iface */ + if (!sscanf(optarg,"%u:%u",&IfIdx,&SubIfIdx)) + { + fprintf(stderr, "bad value for --wf-iface\n"); + exit_clean(1); + } + break; + case 49: /* wf-l3 */ if (!wf_make_l3(optarg,&wf_ipv4,&wf_ipv6)) { fprintf(stderr, "bad value for --wf-l3\n"); exit_clean(1); } break; - case 49: /* wf-tcp */ + case 50: /* wf-tcp */ if (!wf_make_pf(optarg,"tcp","SrcPort",wf_pf_tcp_src,sizeof(wf_pf_tcp_src)) || !wf_make_pf(optarg,"tcp","DstPort",wf_pf_tcp_dst,sizeof(wf_pf_tcp_dst))) { @@ -1389,7 +1406,7 @@ int main(int argc, char **argv) exit_clean(1); } break; - case 50: /* wf-udp */ + case 51: /* wf-udp */ if (!wf_make_pf(optarg,"udp","SrcPort",wf_pf_udp_src,sizeof(wf_pf_udp_src)) || !wf_make_pf(optarg,"udp","DstPort",wf_pf_udp_dst,sizeof(wf_pf_udp_dst))) { @@ -1397,7 +1414,7 @@ int main(int argc, char **argv) exit_clean(1); } break; - case 51: /* wf-raw */ + case 52: /* wf-raw */ if (optarg[0]=='@') { size_t sz = sizeof(windivert_filter)-1; @@ -1410,7 +1427,7 @@ int main(int argc, char **argv) windivert_filter[sizeof(windivert_filter) - 1] = '\0'; } break; - case 52: /* wf-save */ + case 53: /* wf-save */ strncpy(wf_save_file, optarg, sizeof(wf_save_file)); wf_save_file[sizeof(wf_save_file) - 1] = '\0'; break; @@ -1439,7 +1456,7 @@ int main(int argc, char **argv) fprintf(stderr, "windivert filter : must specify port filter\n"); exit_clean(1); } - if (!wf_make_filter(windivert_filter, sizeof(windivert_filter), wf_ipv4, wf_ipv6, wf_pf_tcp_src, wf_pf_tcp_dst, wf_pf_udp_src, wf_pf_udp_dst)) + if (!wf_make_filter(windivert_filter, sizeof(windivert_filter), IfIdx, SubIfIdx, wf_ipv4, wf_ipv6, wf_pf_tcp_src, wf_pf_tcp_dst, wf_pf_udp_src, wf_pf_udp_dst)) { fprintf(stderr, "windivert filter : could not make filter\n"); exit_clean(1);