diff options
-rw-r--r-- | .github/workflows/build.yml | 34 | ||||
-rw-r--r-- | configure.ac | 11 | ||||
-rw-r--r-- | src/lib/ndpi_main.c | 6 | ||||
-rwxr-xr-x | tests/do.sh.in | 10 |
4 files changed, 53 insertions, 8 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 29e81e166..6688322bb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -169,7 +169,7 @@ jobs: git diff-index --quiet HEAD -- || true test: - name: ${{ matrix.os }} ${{ matrix.arch }} ${{ matrix.gcrypt }} ${{ matrix.compiler }} ${{ matrix.pcre }} ${{ matrix.maxminddb }} ${{ matrix.msan }} + name: ${{ matrix.os }} ${{ matrix.arch }} ${{ matrix.gcrypt }} ${{ matrix.compiler }} ${{ matrix.pcre }} ${{ matrix.maxminddb }} ${{ matrix.msan }} ${{ matrix.nBPF }} runs-on: ${{ matrix.os }} env: CC: ${{ matrix.compiler }} @@ -184,6 +184,7 @@ jobs: pcre: [""] maxminddb: [""] msan: [""] + nBPF: [""] include: - compiler: "gcc-7" os: ubuntu-latest @@ -192,6 +193,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "--with-sanitizer" + nBPF: "" - compiler: "gcc-11" os: ubuntu-latest arch: "x86_64" @@ -199,6 +201,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "--with-sanitizer" + nBPF: "" - compiler: "clang-7" os: ubuntu-latest arch: "x86_64" @@ -206,6 +209,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "--with-sanitizer" + nBPF: "" - compiler: "clang-14" os: ubuntu-22.04 arch: "x86_64" @@ -213,6 +217,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "--with-sanitizer" + nBPF: "" - compiler: "cc" os: ubuntu-latest arch: "x86_64" @@ -220,6 +225,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "--with-sanitizer" + nBPF: "" - compiler: "cc" os: ubuntu-latest arch: "x86_64" @@ -227,6 +233,15 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "--with-thread-sanitizer" + nBPF: "" + - compiler: "cc" + os: ubuntu-latest + arch: "x86_64" + gcrypt: "" + pcre: "--with-pcre" + maxminddb: "--with-maxminddb" + msan: "--with-sanitizer" + nBPF: "nBPF" - compiler: "clang-14" os: ubuntu-22.04 arch: "x86_64" @@ -234,6 +249,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "--with-memory-sanitizer" + nBPF: "" - compiler: "cc" os: ubuntu-latest arch: "x86_64" @@ -241,6 +257,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "--with-sanitizer" + nBPF: "" - compiler: "cc" os: macOS-latest arch: "x86_64" @@ -248,6 +265,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "" # Disable sanitizer on macos + nBPF: "" - compiler: "cc" os: macos-12 arch: "x86_64" @@ -255,6 +273,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "" # Disable sanitizer on macos + nBPF: "" - compiler: "cc" os: ubuntu-latest arch: "arm64" @@ -262,6 +281,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "" # Disable sanitizer on arm64 + nBPF: "" - compiler: "cc" os: ubuntu-latest arch: "armhf" @@ -269,6 +289,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "--with-sanitizer" + nBPF: "" - compiler: "cc" os: ubuntu-latest arch: "s390x" @@ -276,6 +297,7 @@ jobs: pcre: "--with-pcre" maxminddb: "--with-maxminddb" msan: "" + nBPF: "" steps: - name: Setup multiarch/qemu-user-static if: startsWith(matrix.os, 'ubuntu') && !startsWith(matrix.arch, 'x86_64') @@ -304,6 +326,14 @@ jobs: if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.arch, 'x86_64') && startsWith(matrix.maxminddb, '--with-maxminddb') run: | sudo apt-get install libmaxminddb-dev + - name: Install Ubuntu Prerequisites (nBPF) + if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.arch, 'x86_64') && startsWith(matrix.nBPF, 'nBPF') + run: | + git clone https://github.com/ntop/PF_RING.git ../PF_RING + cd ../PF_RING/userland/nbpf + ./configure + make + cd - - name: Setup Ubuntu specified compiler (gcc) if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.arch, 'x86_64') && startsWith(matrix.compiler, 'gcc') run: | @@ -428,7 +458,7 @@ jobs: make dist ./utils/verify_dist_tarball.sh - name: Build nDPI [Mingw-w64] (runs only on ubuntu jobs) - if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.arch, 'x86_64') + if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.arch, 'x86_64') && !startsWith(matrix.nBPF, 'nBPF') run: | make distclean ./autogen.sh --enable-option-checking=fatal --enable-debug-messages --enable-tls-sigs --host=x86_64-w64-mingw32 diff --git a/configure.ac b/configure.ac index 16fa37885..8c19a217a 100644 --- a/configure.ac +++ b/configure.ac @@ -13,6 +13,9 @@ AS_IF([test "${with_only_libndpi+set}" = set],[ EXTRA_TARGETS="" ]) +PWD=`pwd` + + AC_ARG_WITH(sanitizer, AS_HELP_STRING([--with-sanitizer], [Build with support for address, undefined and leak sanitizer])) AC_ARG_WITH(thread-sanitizer, AS_HELP_STRING([--with-thread-sanitizer], [Build with support for thread sanitizer])) AC_ARG_WITH(memory-sanitizer, AS_HELP_STRING([--with-memory-sanitizer], [Build with support for memory sanitizer])) @@ -22,6 +25,7 @@ AC_ARG_ENABLE(code-coverage, AS_HELP_STRING([--enable-code-coverage], [Generate AC_ARG_WITH(local-libgcrypt, AS_HELP_STRING([--with-local-libgcrypt], [Build with libgcrypt (if present) instead of the enclosed gcrypt light])) AC_ARG_ENABLE(tls-sigs, AS_HELP_STRING([--enable-tls-sigs], [Enable TLS Client signature algorithm dissection. Rarely used, but requires significantly more memory.])) AC_ARG_ENABLE(npcap, AS_HELP_STRING([--disable-npcap], [msys2 only: Disable linkage against the wpcap/npcap import library in windows/WpdPack/Lib.])) +AC_ARG_WITH(nbpf-path, AS_HELP_STRING([--with-nbpf-path], [nBPF library custom path; default: ${PWD}/../PF_RING/userland/nbpf]),[NBPF_HOME=$withval],[NBPF_HOME=${PWD}/../PF_RING/userland/nbpf]) AS_IF([test "x$enable_fuzztargets" = "xyes"], [BUILD_FUZZTARGETS=1], [BUILD_FUZZTARGETS=0]) AM_CONDITIONAL([BUILD_FUZZTARGETS], [test "x$enable_fuzztargets" = "xyes"]) @@ -72,7 +76,6 @@ LT_INIT LT_LIB_M PKG_PROG_PKG_CONFIG -PWD=`pwd` AC_PROG_CC SYSTEM=`uname -s` @@ -198,14 +201,15 @@ fi MACHINE=`uname -m` -AC_MSG_CHECKING([PF_RING nBPF]) -NBPF_HOME=${PWD}/../PF_RING/userland/nbpf +NBPF_ENABLED=0 +AC_MSG_CHECKING([PF_RING nBPF ($NBPF_HOME)]) LIBNBPF=${NBPF_HOME}/libnbpf.a if test -f ${LIBNBPF}; then : ADDITIONAL_LIBS="${ADDITIONAL_LIBS} ${LIBNBPF}" ADDITIONAL_INCS="${ADDITIONAL_INCS} -I${NBPF_HOME}" AC_DEFINE_UNQUOTED(HAVE_NBPF, "1", [PF_RING nBPF is present]) AC_MSG_RESULT(yes) + NBPF_ENABLED=1 else AC_MSG_RESULT(no) fi @@ -388,6 +392,7 @@ AC_SUBST(GPROF_LIBS) AC_SUBST(GPROF_ENABLED) AC_SUBST(USE_HOST_LIBGCRYPT) AC_SUBST(PCRE_ENABLED) +AC_SUBST(NBPF_ENABLED) AC_SUBST(HANDLE_TLS_SIGS) AC_SUBST(DISABLE_NPCAP) AC_SUBST(EXE_SUFFIX) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 9df6dfa6d..9dd098653 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -3627,7 +3627,7 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_str, char *rule, char *filter = &attr[5]; if(ndpi_str->num_nbpf_custom_proto >= MAX_NBPF_CUSTOM_PROTO) { - NDPI_LOG_ERR(ndpi_str, "nBPF: too many protocols"); + NDPI_LOG_ERR(ndpi_str, "nBPF: too many protocols\n"); return(-4); /* Too many protocols */ } @@ -3643,14 +3643,14 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_str, char *rule, if((ndpi_str->nbpf_custom_proto[ndpi_str->num_nbpf_custom_proto].tree = nbpf_parse(filter, NULL)) == NULL) { - NDPI_LOG_ERR(ndpi_str, "nBPF invalid filter: %s", filter) + NDPI_LOG_ERR(ndpi_str, "nBPF invalid filter: %s\n", filter) return(-5); /* Invalid filter */ } else ndpi_str->nbpf_custom_proto[ndpi_str->num_nbpf_custom_proto].l7_protocol = subprotocol_id; ndpi_str->num_nbpf_custom_proto++; #else - NDPI_LOG_ERR(ndpi_str, "nDPI compiled without nBPF support: skipping rule"); + NDPI_LOG_INFO(ndpi_str, "nDPI compiled without nBPF support: skipping rule\n"); return(-6); #endif } diff --git a/tests/do.sh.in b/tests/do.sh.in index b01de941b..9dca786da 100755 --- a/tests/do.sh.in +++ b/tests/do.sh.in @@ -23,6 +23,8 @@ EXE_SUFFIX=@EXE_SUFFIX@ GPROF_ENABLED=@GPROF_ENABLED@ PCRE_ENABLED=@PCRE_ENABLED@ PCRE_PCAPS="WebattackRCE.pcap" +NBPF_ENABLED=@NBPF_ENABLED@ +NBPF_PCAPS="h323-overflow.pcap" READER="${CMD_PREFIX} ../example/ndpiReader${EXE_SUFFIX} -A -p ../example/protos.txt -c ../example/categories.txt -r ../example/risky_domains.txt -j ../example/ja3_fingerprints.csv -S ../example/sha1_fingerprints.csv" RC=0 @@ -80,6 +82,14 @@ check_results() { fi done fi + if [ $NBPF_ENABLED -eq 0 ]; then + for p in $NBPF_PCAPS; do + if [ $f = $p ]; then + SKIP_PCAP=1 + break + fi + done + fi if [ $SKIP_PCAP -eq 1 ]; then printf "%-32s\tSKIPPED\n" "$f" continue |