From ed7555994e35f22aa95f3db7d2d797ac9345fc05 Mon Sep 17 00:00:00 2001 From: pfg666 Date: Thu, 30 Apr 2026 14:51:04 +0200 Subject: [PATCH 1/9] Update CI. Add run script. --- .github/workflows/CI.yml | 21 ++++ config/basic.xml | 5 + config/{alphabet.xml => full_data.xml} | 0 config/learner_args | 10 +- diff_hyps.sh | 26 +++++ .../models/linux-6.17.0_basic/command.args | 17 +++ .../models/linux-6.17.0_basic/hyp1.dot | 11 ++ .../models/linux-6.17.0_basic/hyp2.dot | 23 ++++ .../models/linux-6.17.0_basic/hyp3.dot | 27 +++++ .../linux-6.17.0_basic/learnedModel.dot | 27 +++++ .../linux-6.17.0_basic/learnedModel.pdf | Bin 0 -> 10072 bytes .../models/linux-6.17.0_basic/statistics.txt | 100 ++++++++++++++++++ run.sh | 65 ++++++++++++ 13 files changed, 329 insertions(+), 3 deletions(-) create mode 100644 config/basic.xml rename config/{alphabet.xml => full_data.xml} (100%) create mode 100755 diff_hyps.sh create mode 100644 experiments/models/linux-6.17.0_basic/command.args create mode 100644 experiments/models/linux-6.17.0_basic/hyp1.dot create mode 100644 experiments/models/linux-6.17.0_basic/hyp2.dot create mode 100644 experiments/models/linux-6.17.0_basic/hyp3.dot create mode 100644 experiments/models/linux-6.17.0_basic/learnedModel.dot create mode 100644 experiments/models/linux-6.17.0_basic/learnedModel.pdf create mode 100644 experiments/models/linux-6.17.0_basic/statistics.txt create mode 100755 run.sh diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 17b2e72..e7b92d2 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -17,3 +17,24 @@ jobs: java-version: '21' - name: Install run: cd learner; ./install.sh + + +Linux_basic: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-24.04 + strategy: + fail-fast: true + steps: + - name: Checkout code + uses: actions/checkout@v6 + - name: Set up JDK 21 + uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: '21' + - name: Install TCP-Fuzzer + run: ./install.sh + - name: Test Ubuntu 24.04 + run: | + ./run.sh -alphabet config/basic.xml -output output/ubuntu + ./diff_hyps.sh experiments/models/linux-6.17.0_basic output/ubuntu 3 diff --git a/config/basic.xml b/config/basic.xml new file mode 100644 index 0000000..fff7855 --- /dev/null +++ b/config/basic.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/config/alphabet.xml b/config/full_data.xml similarity index 100% rename from config/alphabet.xml rename to config/full_data.xml diff --git a/config/learner_args b/config/learner_args index 7044e21..b57dfed 100644 --- a/config/learner_args +++ b/config/learner_args @@ -4,6 +4,10 @@ localhost:18200 -tcpMapperAddress localhost:18200 -alphabet -${fuzzer.dir}/config/alphabet.xml --memQueryRuns -3 +${fuzzer.dir}/config/full_data.xml +#-memQueryRuns +#3 +-command +python3 ${fuzzer.dir}/sutadapter/serverAdapter.py --port 9000 +-startWait +50 diff --git a/diff_hyps.sh b/diff_hyps.sh new file mode 100755 index 0000000..7b4b630 --- /dev/null +++ b/diff_hyps.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +dir1=$1 +dir2=$2 +num_rounds=$3 + +if [[ $# != 3 ]]; then + echo "Usage: ${0##*/} dir1 dir2 num_rounds" + echo "Diffs the first num_rounds hypotheses stored in two dirs" + exit 1 +fi + +if [[ ! -d ${dir1} ]]; then + echo "${dir1}"": No such directory" + exit 1 +fi +if [[ ! -d ${dir2} ]]; then + echo "${dir2}"": No such directory" + exit 1 +fi + +for ((i = 1 ; i <= num_rounds ; i++)); do + if ! diff --unified=0 "${dir1}"/hyp"${i}".dot "${dir2}"/hyp"${i}".dot; then + exit 1 + fi +done diff --git a/experiments/models/linux-6.17.0_basic/command.args b/experiments/models/linux-6.17.0_basic/command.args new file mode 100644 index 0000000..7649d81 --- /dev/null +++ b/experiments/models/linux-6.17.0_basic/command.args @@ -0,0 +1,17 @@ +state-fuzzer-server +-connect +localhost:18200 +-tcpMapperAddress +localhost:18200 +-alphabet +${fuzzer.dir}/config/alphabet.xml +#-memQueryRuns +#3 +-command +python3 ${fuzzer.dir}/sutadapter/serverAdapter.py --port 9000 +-startWait +50 +-alphabet +/home/pfg666/GitHub/tools/TCP-Fuzzer/config/basic.xml +-eqvQueries +100 diff --git a/experiments/models/linux-6.17.0_basic/hyp1.dot b/experiments/models/linux-6.17.0_basic/hyp1.dot new file mode 100644 index 0000000..9bc7844 --- /dev/null +++ b/experiments/models/linux-6.17.0_basic/hyp1.dot @@ -0,0 +1,11 @@ +digraph g { + + s0 [shape="circle" label="s0"]; + s0 -> s0 [label="S / SA"]; + s0 -> s0 [label="A / timeout"]; + s0 -> s0 [label="FA / timeout"]; + +__start0 [label="" shape="none" width="0" height="0"]; +__start0 -> s0; + +} diff --git a/experiments/models/linux-6.17.0_basic/hyp2.dot b/experiments/models/linux-6.17.0_basic/hyp2.dot new file mode 100644 index 0000000..777684b --- /dev/null +++ b/experiments/models/linux-6.17.0_basic/hyp2.dot @@ -0,0 +1,23 @@ +digraph g { + + s0 [shape="circle" label="s0"]; + s1 [shape="circle" label="s1"]; + s2 [shape="circle" label="s2"]; + s3 [shape="circle" label="s3"]; + s0 -> s1 [label="S / SA"]; + s0 -> s0 [label="A / timeout"]; + s0 -> s0 [label="FA / timeout"]; + s1 -> s0 [label="S / timeout"]; + s1 -> s3 [label="A / timeout"]; + s1 -> s2 [label="FA / FA"]; + s2 -> s2 [label="S / SOCKET_CLOSED"]; + s2 -> s2 [label="A / SOCKET_CLOSED"]; + s2 -> s2 [label="FA / SOCKET_CLOSED"]; + s3 -> s1 [label="S / A"]; + s3 -> s3 [label="A / timeout"]; + s3 -> s2 [label="FA / FA"]; + +__start0 [label="" shape="none" width="0" height="0"]; +__start0 -> s0; + +} diff --git a/experiments/models/linux-6.17.0_basic/hyp3.dot b/experiments/models/linux-6.17.0_basic/hyp3.dot new file mode 100644 index 0000000..7a97c32 --- /dev/null +++ b/experiments/models/linux-6.17.0_basic/hyp3.dot @@ -0,0 +1,27 @@ +digraph g { + + s0 [shape="circle" label="s0"]; + s1 [shape="circle" label="s1"]; + s2 [shape="circle" label="s2"]; + s3 [shape="circle" label="s3"]; + s4 [shape="circle" label="s4"]; + s0 -> s1 [label="S / SA"]; + s0 -> s0 [label="A / timeout"]; + s0 -> s0 [label="FA / timeout"]; + s1 -> s0 [label="S / timeout"]; + s1 -> s3 [label="A / timeout"]; + s1 -> s2 [label="FA / FA"]; + s2 -> s2 [label="S / SOCKET_CLOSED"]; + s2 -> s2 [label="A / SOCKET_CLOSED"]; + s2 -> s2 [label="FA / SOCKET_CLOSED"]; + s3 -> s4 [label="S / A"]; + s3 -> s3 [label="A / timeout"]; + s3 -> s2 [label="FA / FA"]; + s4 -> s3 [label="S / timeout"]; + s4 -> s3 [label="A / timeout"]; + s4 -> s2 [label="FA / FA"]; + +__start0 [label="" shape="none" width="0" height="0"]; +__start0 -> s0; + +} diff --git a/experiments/models/linux-6.17.0_basic/learnedModel.dot b/experiments/models/linux-6.17.0_basic/learnedModel.dot new file mode 100644 index 0000000..7a97c32 --- /dev/null +++ b/experiments/models/linux-6.17.0_basic/learnedModel.dot @@ -0,0 +1,27 @@ +digraph g { + + s0 [shape="circle" label="s0"]; + s1 [shape="circle" label="s1"]; + s2 [shape="circle" label="s2"]; + s3 [shape="circle" label="s3"]; + s4 [shape="circle" label="s4"]; + s0 -> s1 [label="S / SA"]; + s0 -> s0 [label="A / timeout"]; + s0 -> s0 [label="FA / timeout"]; + s1 -> s0 [label="S / timeout"]; + s1 -> s3 [label="A / timeout"]; + s1 -> s2 [label="FA / FA"]; + s2 -> s2 [label="S / SOCKET_CLOSED"]; + s2 -> s2 [label="A / SOCKET_CLOSED"]; + s2 -> s2 [label="FA / SOCKET_CLOSED"]; + s3 -> s4 [label="S / A"]; + s3 -> s3 [label="A / timeout"]; + s3 -> s2 [label="FA / FA"]; + s4 -> s3 [label="S / timeout"]; + s4 -> s3 [label="A / timeout"]; + s4 -> s2 [label="FA / FA"]; + +__start0 [label="" shape="none" width="0" height="0"]; +__start0 -> s0; + +} diff --git a/experiments/models/linux-6.17.0_basic/learnedModel.pdf b/experiments/models/linux-6.17.0_basic/learnedModel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3d080e5c56e63945fa459a41feb40862e9b28346 GIT binary patch literal 10072 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 literal 0 HcmV?d00001 diff --git a/experiments/models/linux-6.17.0_basic/statistics.txt b/experiments/models/linux-6.17.0_basic/statistics.txt new file mode 100644 index 0000000..93dc94a --- /dev/null +++ b/experiments/models/linux-6.17.0_basic/statistics.txt @@ -0,0 +1,100 @@ +=== RUN DESCRIPTION === +Alphabet: [S, A, FA] + +### StateFuzzerConfigStandard Parameters +# -help +# -debug +# -quiet +-output +output/o_2026-04-30_12-16-06 + +### LearnerConfigStandard Parameters +-alphabet +/home/pfg666/GitHub/tools/TCP-Fuzzer/config/basic.xml +-learningAlgorithm +TTT +-equivalenceAlgorithms +RANDOM_WP_METHOD +-depth +1 +-minLength +5 +-maxLength +15 +-randLength +5 +-eqvQueries +100 +-memQueryRuns +1 +-memQueryRetries +3 +# -logQueries +-probReset +0.0 +# -testFile +-seed +0 +# -cacheTests +# -ceSanitizationDisable +# -skipNonDetTests +-ceReruns +3 +# -probabilisticSanitizationDisable +# -timeLimit +# -testLimit +# -roundLimit +-eqvThreads +1 + +### SULConfigStandard Parameters +-responseWait +100 +# -inputResponseTimeout +-command +python3 /home/pfg666/GitHub/tools/TCP-Fuzzer/sutadapter/serverAdapter.py --port 9000 +# -terminateCommand +# -processDir +# -redirectOutputStreams +-processTrigger +NEW_TEST +-startWait +50 + +### SULServerConfigStandard Parameters +-connect +localhost:18200 + +### MapperConfigStandard Parameters +# -mapperConnectionConfig +# -repeatingOutputs +# -socketClosedAsTimeout +# -disabledAsTimeout +# -dontMergeRepeating + +### SULAdapterConfigStandard Parameters +# -adapterPort +-adapterAddress +localhost + +=== STATISTICS === +Learning finished: true +Size of the input alphabet: 3 +Number of states: 5 +Number of hypotheses: 3 +Number of inputs: 1120 +Number of tests: 109 +Number of learning inputs: 89 +Number of learning tests: 27 +Number of inputs up to last hypothesis: 239 +Number of tests up to last hypothesis: 41 +Time (ms) to learn model: 302925 +Counterexamples: +CE 1:Query[ε|A A FA FA FA S FA FA S A FA / timeout timeout timeout timeout timeout SA FA SOCKET_CLOSED SOCKET_CLOSED SOCKET_CLOSED SOCKET_CLOSED] +CE 2:Query[ε|S A A S S A A FA S FA S S / SA timeout timeout A timeout timeout timeout FA SOCKET_CLOSED SOCKET_CLOSED SOCKET_CLOSED SOCKET_CLOSED] +Number of inputs when hypothesis was generated: [3, 95, 239] +Number of tests when hypothesis was generated: [3, 23, 41] +Time (ms) when hypothesis was generated: [2799, 43975, 95216] +Number of inputs when counterexample was found: [47, 201] +Number of tests when counterexample was found: [7, 33] +Time (ms) when counterexample was found: [16834, 74894] diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..760517e --- /dev/null +++ b/run.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +set -euo pipefail + +learner_config=$SCRIPT_DIR/config/learner_args +mapper_config=$SCRIPT_DIR/config/mapperconfig.toml + +# These values have to be consistent with the arguments in config +#SERVER_PORT=9000 +HOST=127.0.0.1 +MAPPER_PORT=18200 + + +# Clean up background processes on exit +cleanup() { + echo "Cleaning up..." + kill "$MAPPER_PID" 2>/dev/null || true + sudo iptables --flush OUTPUT +} +trap cleanup EXIT + +start_mapper() { + # Start TCP Mapper + echo "Starting Mapper..." + ( + sudo iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP + source $SCRIPT_DIR/mapper/.venv/bin/activate + echo sudo $SCRIPT_DIR/mapper/.venv/bin/python $SCRIPT_DIR/mapper/main.py $mapper_config + sudo $SCRIPT_DIR/mapper/.venv/bin/python $SCRIPT_DIR/mapper/main.py $mapper_config + ) & + + MAPPER_PID=$! + # Wait for mapper to be ready + echo "Wait for mapper to be ready" + until ss -ltn sport = :$MAPPER_PORT | grep -q LISTEN; do + sleep 0.1 + done + echo "Mapper started (PID $MAPPER_PID)" + sleep 1 +} + +start_learner() { + # Start learner + echo "Starting Learner..." + echo java -jar $SCRIPT_DIR/learner/target/TCP-Learner.jar $learner_config $@ + java -jar $SCRIPT_DIR/learner/target/TCP-Learner.jar $learner_config $@ +} + +while [[ "$1" =~ ^- ]]; do case $1 in + -lc | --learner-config ) + shift; + learner_config=$1 + ;; + -mc | --mapper-config ) + shift; + mapper_config=$1 + ;; + * ) + break + ;; + esac; shift; done + +start_mapper +start_learner $@ \ No newline at end of file From f652d7e9d83b48d0916b0074a5adc9cde188041c Mon Sep 17 00:00:00 2001 From: pfg666 Date: Thu, 30 Apr 2026 14:56:56 +0200 Subject: [PATCH 2/9] Fix workflow --- .github/workflows/CI.yml | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index e7b92d2..6eba401 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -19,22 +19,22 @@ jobs: run: cd learner; ./install.sh -Linux_basic: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-24.04 - strategy: - fail-fast: true - steps: - - name: Checkout code - uses: actions/checkout@v6 - - name: Set up JDK 21 - uses: actions/setup-java@v5 - with: - distribution: 'temurin' - java-version: '21' - - name: Install TCP-Fuzzer - run: ./install.sh - - name: Test Ubuntu 24.04 - run: | - ./run.sh -alphabet config/basic.xml -output output/ubuntu - ./diff_hyps.sh experiments/models/linux-6.17.0_basic output/ubuntu 3 + Linux_basic: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-24.04 + strategy: + fail-fast: true + steps: + - name: Checkout code + uses: actions/checkout@v6 + - name: Set up JDK 21 + uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: '21' + - name: Install TCP-Fuzzer + run: ./install.sh + - name: Test Ubuntu 24.04 + run: | + ./run.sh -alphabet config/basic.xml -output output/ubuntu + ./diff_hyps.sh experiments/models/linux-6.17.0_basic output/ubuntu 3 From f5ece5c730c5057b8d758c01d9e651c0f2777757 Mon Sep 17 00:00:00 2001 From: pfg666 Date: Thu, 30 Apr 2026 15:55:46 +0200 Subject: [PATCH 3/9] Update install scripts. Add missing alphabet from Linux model. --- experiments/models/linux-6.17.0_basic/alphabet.xml | 5 +++++ install.sh | 12 ++++++------ mapper/{install_env.sh => install.sh} | 6 +++++- 3 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 experiments/models/linux-6.17.0_basic/alphabet.xml rename mapper/{install_env.sh => install.sh} (82%) diff --git a/experiments/models/linux-6.17.0_basic/alphabet.xml b/experiments/models/linux-6.17.0_basic/alphabet.xml new file mode 100644 index 0000000..fff7855 --- /dev/null +++ b/experiments/models/linux-6.17.0_basic/alphabet.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/install.sh b/install.sh index 103a4da..a36fc73 100755 --- a/install.sh +++ b/install.sh @@ -22,21 +22,21 @@ function install_learner() { fi } -function install_mapper_env() { - echo "Installing Mapper environment" +function install_mapper() { + echo "Installing Mapper" ( cd ${MAPPER_DIR}; - ./install_env.sh + ./install.sh ) if [[ $? -ne 0 ]]; then - echo "Failed to install Mapper environment" + echo "Failed to install Mapper" exit else - echo "Mapper environment installed successfully" + echo "Mapper installed successfully" fi } # Installing learner and mapper components install_learner -install_mapper_env +install_mapper diff --git a/mapper/install_env.sh b/mapper/install.sh similarity index 82% rename from mapper/install_env.sh rename to mapper/install.sh index 6e3aa15..b54761f 100755 --- a/mapper/install_env.sh +++ b/mapper/install.sh @@ -2,6 +2,10 @@ MAPPER_SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && p readonly MAPPER_SCRIPT_DIR readonly ENV_DIR=${MAPPER_SCRIPT_DIR}/.venv +# Installing dependencies +echo "Installing dependencies where necessary." +sudo apt-get install -y libcap-dev + if [[ -d ${ENV_DIR} ]] then echo "Detected Python virtual environment. Skipping Python environment creation." @@ -10,7 +14,7 @@ else python3 -m venv $ENV_DIR source $ENV_DIR/bin/activate echo "Installing required libraries" - pip install -r requirements.txt + pip install -r ${MAPPER_SCRIPT_DIR}/requirements.txt fi # If the script is being sourced, activate the environment From fd7adfa0c08025977c0015eba95a06da04ada6a2 Mon Sep 17 00:00:00 2001 From: pfg666 Date: Thu, 30 Apr 2026 16:05:14 +0200 Subject: [PATCH 4/9] Tweaked CI, add update --- .github/workflows/CI.yml | 5 +++-- mapper/install.sh | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 6eba401..65af74c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -15,9 +15,10 @@ jobs: with: distribution: 'temurin' java-version: '21' - - name: Install + - name: Install Learner run: cd learner; ./install.sh - + - name: Install Mapper + run: cd mapper; ./install.sh Linux_basic: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} diff --git a/mapper/install.sh b/mapper/install.sh index b54761f..ce3cd35 100755 --- a/mapper/install.sh +++ b/mapper/install.sh @@ -4,6 +4,7 @@ readonly ENV_DIR=${MAPPER_SCRIPT_DIR}/.venv # Installing dependencies echo "Installing dependencies where necessary." +sudo apt-get update sudo apt-get install -y libcap-dev if [[ -d ${ENV_DIR} ]] From 6cf6c5507a68077a238bf1ef8794efc3331e1919 Mon Sep 17 00:00:00 2001 From: pfg666 Date: Fri, 1 May 2026 14:53:37 +0200 Subject: [PATCH 5/9] Install more dependencies in scripts. --- .github/workflows/CI.yml | 8 ++++++++ mapper/install.sh | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 65af74c..87c180e 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -15,6 +15,10 @@ jobs: with: distribution: 'temurin' java-version: '21' + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' - name: Install Learner run: cd learner; ./install.sh - name: Install Mapper @@ -33,6 +37,10 @@ jobs: with: distribution: 'temurin' java-version: '21' + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' - name: Install TCP-Fuzzer run: ./install.sh - name: Test Ubuntu 24.04 diff --git a/mapper/install.sh b/mapper/install.sh index ce3cd35..b46cce7 100755 --- a/mapper/install.sh +++ b/mapper/install.sh @@ -5,7 +5,7 @@ readonly ENV_DIR=${MAPPER_SCRIPT_DIR}/.venv # Installing dependencies echo "Installing dependencies where necessary." sudo apt-get update -sudo apt-get install -y libcap-dev +sudo apt-get install -y libcap-dev tcpdump if [[ -d ${ENV_DIR} ]] then @@ -15,7 +15,9 @@ else python3 -m venv $ENV_DIR source $ENV_DIR/bin/activate echo "Installing required libraries" + pip install --upgrade pip pip install -r ${MAPPER_SCRIPT_DIR}/requirements.txt + python -c "import scapy.all" || echo "Failed to install Scapy"; exit 1 fi # If the script is being sourced, activate the environment From d4e70e420c245c3212cd4728ef5496bf78f8dac4 Mon Sep 17 00:00:00 2001 From: pfg666 Date: Fri, 1 May 2026 15:13:36 +0200 Subject: [PATCH 6/9] Add check for libcap-dev --- mapper/install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/mapper/install.sh b/mapper/install.sh index b46cce7..1b14be5 100755 --- a/mapper/install.sh +++ b/mapper/install.sh @@ -6,6 +6,7 @@ readonly ENV_DIR=${MAPPER_SCRIPT_DIR}/.venv echo "Installing dependencies where necessary." sudo apt-get update sudo apt-get install -y libcap-dev tcpdump +dpkg -s libcap-dev >/dev/null 2>&1 || echo "Failed to install libcap-dev"; exit 1 if [[ -d ${ENV_DIR} ]] then From a8944cb6fae768a465b5f59e09bdd80129cf6438 Mon Sep 17 00:00:00 2001 From: pfg666 Date: Fri, 1 May 2026 15:43:46 +0200 Subject: [PATCH 7/9] Make minor fixes --- install.sh | 4 ++-- mapper/install.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/install.sh b/install.sh index a36fc73..6dcdc56 100755 --- a/install.sh +++ b/install.sh @@ -16,7 +16,7 @@ function install_learner() { if [[ $? -ne 0 ]]; then echo "Failed to install Learner" - exit + exit 1 else echo "Learner installed successfully" fi @@ -30,7 +30,7 @@ function install_mapper() { ) if [[ $? -ne 0 ]]; then echo "Failed to install Mapper" - exit + exit 1 else echo "Mapper installed successfully" fi diff --git a/mapper/install.sh b/mapper/install.sh index 1b14be5..02ff7e0 100755 --- a/mapper/install.sh +++ b/mapper/install.sh @@ -6,7 +6,7 @@ readonly ENV_DIR=${MAPPER_SCRIPT_DIR}/.venv echo "Installing dependencies where necessary." sudo apt-get update sudo apt-get install -y libcap-dev tcpdump -dpkg -s libcap-dev >/dev/null 2>&1 || echo "Failed to install libcap-dev"; exit 1 +dpkg -s libcap-dev >/dev/null 2>&1 || (echo "Failed to install libcap-dev"; exit 1) if [[ -d ${ENV_DIR} ]] then @@ -18,7 +18,7 @@ else echo "Installing required libraries" pip install --upgrade pip pip install -r ${MAPPER_SCRIPT_DIR}/requirements.txt - python -c "import scapy.all" || echo "Failed to install Scapy"; exit 1 + python -c "import scapy.all" || (echo "Failed to install Scapy"; exit 1) fi # If the script is being sourced, activate the environment From 44e8aa3b2b93e8e876846014337548a44e13bbfe Mon Sep 17 00:00:00 2001 From: pfg666 Date: Fri, 1 May 2026 16:14:36 +0200 Subject: [PATCH 8/9] Replace libcap-dev with libpcap-dev and add additional checks! --- mapper/install.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mapper/install.sh b/mapper/install.sh index 02ff7e0..ac2dee1 100755 --- a/mapper/install.sh +++ b/mapper/install.sh @@ -5,8 +5,7 @@ readonly ENV_DIR=${MAPPER_SCRIPT_DIR}/.venv # Installing dependencies echo "Installing dependencies where necessary." sudo apt-get update -sudo apt-get install -y libcap-dev tcpdump -dpkg -s libcap-dev >/dev/null 2>&1 || (echo "Failed to install libcap-dev"; exit 1) +sudo apt-get install -y libpcap-dev tcpdump || (echo "Failed to install libraries"; exit 1) if [[ -d ${ENV_DIR} ]] then @@ -17,8 +16,7 @@ else source $ENV_DIR/bin/activate echo "Installing required libraries" pip install --upgrade pip - pip install -r ${MAPPER_SCRIPT_DIR}/requirements.txt - python -c "import scapy.all" || (echo "Failed to install Scapy"; exit 1) + pip install -r ${MAPPER_SCRIPT_DIR}/requirements.txt || (echo "Fail to install required Python packages"; exit 1) fi # If the script is being sourced, activate the environment From b65ed8e6a99b235700ab3b28b0b381de8925a182 Mon Sep 17 00:00:00 2001 From: pfg666 Date: Fri, 1 May 2026 17:05:02 +0200 Subject: [PATCH 9/9] Make minor adjustments to CI. --- .github/workflows/CI.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 87c180e..333602b 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -19,10 +19,8 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.12' - - name: Install Learner - run: cd learner; ./install.sh - - name: Install Mapper - run: cd mapper; ./install.sh + - name: Install TCP-Fuzzer + run: ./install.sh Linux_basic: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -45,5 +43,5 @@ jobs: run: ./install.sh - name: Test Ubuntu 24.04 run: | - ./run.sh -alphabet config/basic.xml -output output/ubuntu + ./run.sh -alphabet config/basic.xml -output output/ubuntu -eqvQueries 100 ./diff_hyps.sh experiments/models/linux-6.17.0_basic output/ubuntu 3