#!/bin/sh -e # # PIPAPO - PIle PAcket POlicies # # tests/gen.sh - Generate test sets and packets # # Author: Stefano Brivio # License: GPLv2 rand() { shuf -i ${1}-${2} -n 1 } port() { if [ "${size}" = "single" ]; then p1=$(rand 0 65535) p2=$((p1 / 2 + 1)) printf "dport key\na ${p1} 1\n" > port.single printf "1 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 %i %i\n" $((p1 / 256)) $((p1 % 256)) > port.single.packets printf "0 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 %i %i\n" $((p2 / 256)) $((p2 % 256)) >> port.single.packets return fi case ${size} in tiny) n=100 ;; small) n=1000 ;; mid) n=10000 ;; big) n=100000 ;; huge) n=200000 ;; esac :> port.${size}.packets printf "dport key\n" > port.${size} p=$(rand 0 10) mul=$(rand 1 2) inc=$(rand 1 50) nopkt=0 for i in $(seq 1 ${n}); do p=$((p * mul + inc)) if [ ${p} -ge 65536 ]; then nopkt=1 p=$((p % 65536)) fi if [ ${nopkt} -eq 0 ]; then printf "%i 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 %i %i\n" ${i} $((p / 256)) $((p % 256)) >> port.${size}.packets fi printf "a %i %i\n" ${p} ${i} >> port.${size} done } net_port() { if [ "${size}" = "single" ]; then p1=$(rand 0 65535) p2=$((p1 / 2 + 1)) printf "daddr dport key\na 10.$((p1 / 256)).$((p1 % 256)).5 ${p1} 1\n" > net_port.single printf "1 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 10 %i %i 5 0 0 %i %i\n" $((p1 / 256)) $((p1 % 256)) $((p1 / 256)) $((p1 % 256)) > net_port.single.packets printf "0 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 %i %i\n" $((p2 / 256)) $((p2 % 256)) >> net_port.single.packets return fi case ${size} in tiny) n=10 ;; small) n=100 ;; mid) n=316 ;; big) n=1000 ;; huge) n=10000 ;; esac :> net_port.${size}.packets printf "daddr dport key\n" > net_port.${size} a=$(rand 0 10) p=$(rand 0 10) inc=$(rand 1 50) nopkt=0 for i in $(seq 1 ${n}); do mul=$(rand 1 5) a=$((a + inc * mul)) if [ ${a} -lt 4294967296 ]; then a=$((a % 4294967296)) else nopkt=1 fi a1=$((a / 16777216)) a2=$(((a / 65536) % 256)) a3=$(((a / 256) % 256)) a4=$((a % 256)) p=$(((p * mul + inc) % 65536)) p1=$((p / 256)) p2=$((p % 256)) if [ ${nopkt} -eq 0 ]; then printf "%i 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 %i %i %i %i 0 0 %i %i\n" ${i} ${a1} ${a2} ${a3} ${a4} ${p1} ${p2} >> net_port.${size}.packets fi printf "a %i.%i.%i.%i %i %i\n" ${a1} ${a2} ${a3} ${a4} ${p} ${i} >> net_port.${size} done } net_port_ranged() { if [ "${size}" = "single" ]; then p1=$(rand 0 65535) p2=$((p1 / 2 + 1)) printf "daddr dport key\na 10.$((p1 / 256)).0.$((p1 % 256))-10.$((p1 / 256)).$((p1 / 256)).$((p1 / 256)) ${p1} 1\n" > net_port_ranged.single printf "1 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 10 %i 0 %i 0 0 %i %i\n" $((p1 / 256)) $((p1 % 256)) $((p1 / 256)) $((p1 % 256)) > net_port_ranged.single.packets printf "0 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 %i %i\n" $((p2 / 256)) $((p2 % 256)) >> net_port_ranged.single.packets return fi case ${size} in tiny) n=10 ;; small) n=100 ;; mid) n=316 ;; big) n=1000 ;; huge) n=10000 ;; esac :> net_port_ranged.${size}.packets printf "daddr dport key\n" > net_port_ranged.${size} a=$(rand 0 10) p=$(rand 0 10) inc=$(rand 1 50) nopkt=0 for i in $(seq 1 ${n}); do mul=$(rand 2 5) a=$((a + inc * mul)) if [ ${a} -lt 4094967296 ]; then a=$((a % 4094967296)) else nopkt=1 fi end=$((a + inc)) s1=$((a / 16777216)) s2=$(((a / 65536) % 256)) s3=$(((a / 256) % 256)) s4=$((a % 256)) e1=$((end / 16777216)) e2=$(((end / 65536) % 256)) e3=$(((end / 256) % 256)) e4=$((end % 256)) p=$(((p * mul + inc) % 60536)) p1=$((p / 256)) p2=$((p % 256)) if [ ${nopkt} -eq 0 ] && [ ${s4} -ne ${e4} ]; then printf "%i 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 %i %i %i %i 0 0 %i %i\n" ${i} ${s1} ${s2} ${s3} ${s4} ${p1} ${p2} >> net_port_ranged.${size}.packets printf "%i 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 %i %i %i %i 0 0 %i %i\n" ${i} ${e1} ${e2} ${e3} ${e4} ${p1} ${p2} >> net_port_ranged.${size}.packets fi printf "a %i.%i.%i.%i-%i.%i.%i.%i %i-%i %i\n" ${s1} ${s2} ${s3} ${s4} ${e1} ${e2} ${e3} ${e4} ${p} $((p + inc)) ${i} >> net_port_ranged.${size} done } mac_net6_ranged() { case ${size} in single) n=1 ;; tiny) n=3 ;; small) n=10 ;; mid) n=31 ;; big) n=100 ;; huge) n=316 ;; esac :> mac_net6_ranged.${size}.packets printf "dmac saddr6 key\n" > mac_net6_ranged.${size} m=$(rand 0 10) a=$(rand 0 10) inc=$(rand 1 50) nopkt=0 for i in $(seq 1 ${n}); do mul=$(rand 2 5) a=$((a + inc * mul)) end=$((a + inc)) sh=$((a / 65535)) sl=$((a % 65535)) eh=$((end / 65535)) el=$((end % 65535)) s1=$((sh / 256)) s2=$((sh % 256)) s3=$((sl / 256)) s4=$((sl % 256)) e1=$((eh / 256)) e2=$((eh % 256)) e3=$((el / 256)) e4=$((el % 256)) m=$(((m * mul + inc) % 60536)) m1=$((m / 256)) m2=$((m % 256)) printf "%i 0 0 0 0 %i %i 0 0 0 0 0 0 0x86 0xdd 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x20 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x%02x 0x%02x 0x%02x 0x%02x\n" ${i} ${m1} ${m2} ${s1} ${s2} ${s3} ${s4} >> mac_net6_ranged.${size}.packets printf "%i 0 0 0 0 %i %i 0 0 0 0 0 0 0x86 0xdd 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x20 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x%02x 0x%02x 0x%02x 0x%02x\n" ${i} ${m1} ${m2} ${e1} ${e2} ${e3} ${e4} >> mac_net6_ranged.${size}.packets printf "a 00:00:00:00:%02x:%02x-00:00:00:%02x:00:00 2001::%04x:%04x-2001::%04x:%04x %i\n" ${m1} ${m2} $((m1 + 1)) ${sh} ${sl} ${eh} ${el} ${i} >> mac_net6_ranged.${size} done } for type in port net_port net_port_ranged mac_net6_ranged; do for size in single tiny small mid big huge; do printf "Generating ${type}.${size} test set..." ${type} ${size} printf " done\n" done done