| #!/bin/bash |
| |
| set -e |
| |
| NETS="0.0.0.0/1 |
| 128.0.0.0/2 |
| 192.0.0.0/3 |
| 224.0.0.0/4 |
| 240.0.0.0/5 |
| 248.0.0.0/6 |
| 252.0.0.0/7 |
| 254.0.0.0/8 |
| 255.0.0.0/9 |
| 255.128.0.0/10 |
| 255.192.0.0/11 |
| 255.224.0.0/12 |
| 255.240.0.0/13 |
| 255.248.0.0/14 |
| 255.252.0.0/15 |
| 255.254.0.0/16 |
| 255.255.0.0/17 |
| 255.255.128.0/18 |
| 255.255.192.0/19 |
| 255.255.224.0/20 |
| 255.255.240.0/21 |
| 255.255.248.0/22 |
| 255.255.252.0/23 |
| 255.255.254.0/24 |
| 255.255.255.0/25 |
| 255.255.255.128/26 |
| 255.255.255.192/27 |
| 255.255.255.224/28 |
| 255.255.255.240/29 |
| 255.255.255.248/30 |
| 255.255.255.252/31 |
| 255.255.255.254/32" |
| |
| ipset="../src/ipset" |
| |
| case "$1" in |
| net) |
| $ipset n test hash:net |
| |
| while IFS= read x; do |
| $ipset add test $x |
| done <<<"$NETS" |
| |
| while IFS= read x; do |
| first=`netmask -r $x | cut -d - -f 1` |
| $ipset test test $first >/dev/null 2>&1 |
| last=`netmask -r $x | cut -d - -f 2 | cut -d ' ' -f 1` |
| $ipset test test $last >/dev/null 2>&1 |
| done <<<"$NETS" |
| |
| while IFS= read x; do |
| $ipset del test $x |
| done <<<"$NETS" |
| ;; |
| net,port) |
| $ipset n test hash:net,port |
| |
| n=1 |
| while IFS= read x; do |
| $ipset add test $x,$n |
| n=$((n+1)) |
| done <<<"$NETS" |
| |
| n=1 |
| while IFS= read x; do |
| first=`netmask -r $x | cut -d - -f 1` |
| $ipset test test $first,$n >/dev/null 2>&1 |
| last=`netmask -r $x | cut -d - -f 2 | cut -d ' ' -f 1` |
| $ipset test test $last,$n >/dev/null 2>&1 |
| n=$((n+1)) |
| done <<<"$NETS" |
| |
| n=1 |
| while IFS= read x; do |
| $ipset del test $x,$n |
| n=$((n+1)) |
| done <<<"$NETS" |
| ;; |
| net,iface) |
| $ipset n test hash:net,iface |
| |
| $ipset add test 0.0.0.0/0,eth0 |
| n=1 |
| while IFS= read x; do |
| $ipset add test $x,eth$n |
| n=$((n+1)) |
| done <<<"$NETS" |
| |
| $ipset test test 0.0.0.0/0,eth0 |
| n=1 |
| while IFS= read x; do |
| $ipset test test $x,eth$n >/dev/null 2>&1 |
| n=$((n+1)) |
| done <<<"$NETS" |
| |
| $ipset del test 0.0.0.0/0,eth0 |
| n=1 |
| while IFS= read x; do |
| $ipset del test $x,eth$n |
| n=$((n+1)) |
| done <<<"$NETS" |
| ;; |
| *) |
| echo "Usage: $0 net|net,port|net,iface" |
| exit 1 |
| ;; |
| esac |
| $ipset x test |