From eaaa1a326cd3139c8ad89afba62c9843a74a2c87 Mon Sep 17 00:00:00 2001 From: bol-van Date: Fri, 8 Mar 2024 11:09:14 +0300 Subject: [PATCH] freebsd dvtws respect freebsd14+ PF_DIVERT --- binaries/freebsd-x64/dvtws | Bin 103856 -> 104048 bytes nfq/darkmagic.c | 11 +++++++++-- nfq/darkmagic.h | 13 +++++++++++++ nfq/nfqws.c | 8 ++------ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/binaries/freebsd-x64/dvtws b/binaries/freebsd-x64/dvtws index e460b0876dc71983e00eedc1295462490a3c8976..43134317136197e8389350fb76b73906963730d4 100755 GIT binary patch delta 23292 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 diff --git a/nfq/darkmagic.c b/nfq/darkmagic.c index 72df4ad..6db6e14 100644 --- a/nfq/darkmagic.c +++ b/nfq/darkmagic.c @@ -903,7 +903,7 @@ static int *rawsend_family_sock(sa_family_t family) } #ifdef BSD -static int rawsend_socket_divert(sa_family_t family) +int rawsend_socket_divert(sa_family_t family) { // HACK HACK HACK HACK HACK HACK HACK HACK // FreeBSD doesnt allow IP_HDRINCL for IPV6 @@ -911,7 +911,14 @@ static int rawsend_socket_divert(sa_family_t family) // we either have to go to the link layer (its hard, possible problems arise, compat testing, ...) or use some HACKING // from my point of view disabling direct ability to send ip frames is not security. its SHIT - int fd = socket(family, SOCK_RAW, IPPROTO_DIVERT); + int fd,err; + + // freebsd14+ way + fd = socket(PF_DIVERT, SOCK_RAW, 0); + err=errno; + if (fd==-1 && (err==EPROTONOSUPPORT || err==EAFNOSUPPORT || err==EPFNOSUPPORT)) + // legacy way + fd = socket(family, SOCK_RAW, IPPROTO_DIVERT); if (fd!=-1 && !set_socket_buffers(fd,4096,RAW_SNDBUF)) { close(fd); diff --git a/nfq/darkmagic.h b/nfq/darkmagic.h index 06c9eaf..5b1ce3a 100644 --- a/nfq/darkmagic.h +++ b/nfq/darkmagic.h @@ -11,6 +11,17 @@ #include #include +#ifndef IPPROTO_DIVERT +#define IPPROTO_DIVERT 258 +#endif + +#ifndef AF_DIVERT +#define AF_DIVERT 44 /* divert(4) */ +#endif +#ifndef PF_DIVERT +#define PF_DIVERT AF_DIVERT +#endif + // returns netorder value uint32_t net32_add(uint32_t netorder_value, uint32_t cpuorder_increment); uint32_t net16_add(uint16_t netorder_value, uint16_t cpuorder_increment); @@ -128,6 +139,8 @@ bool rawsend_preinit(bool bind_fix4, bool bind_fix6); // cleans up socket autocreated by rawsend void rawsend_cleanup(void); +int rawsend_socket_divert(sa_family_t family); + const char *proto_name(uint8_t proto); uint16_t family_from_proto(uint8_t l3proto); void print_ip(const struct ip *ip); diff --git a/nfq/nfqws.c b/nfq/nfqws.c index 25ad80f..f1210ef 100644 --- a/nfq/nfqws.c +++ b/nfq/nfqws.c @@ -35,10 +35,6 @@ #define NF_ACCEPT 1 #endif -#ifndef IPPROTO_DIVERT -#define IPPROTO_DIVERT 258 -#endif - #define CTRACK_T_SYN 60 #define CTRACK_T_FIN 60 #define CTRACK_T_EST 300 @@ -357,7 +353,7 @@ static int dvt_main(void) bp4.sin_addr.s_addr = INADDR_ANY; printf("creating divert4 socket\n"); - fd[0] = socket(AF_INET, SOCK_RAW, IPPROTO_DIVERT); + fd[0] = rawsend_socket_divert(AF_INET); if (fd[0] == -1) { perror("socket (DIVERT4)"); goto exiterr; @@ -382,7 +378,7 @@ static int dvt_main(void) bp6.sin6_port = htons(params.port); printf("creating divert6 socket\n"); - fd[1] = socket(AF_INET6, SOCK_RAW, IPPROTO_DIVERT); + fd[1] = rawsend_socket_divert(AF_INET6); if (fd[1] == -1) { perror("socket (DIVERT6)"); goto exiterr;