netfilter.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Wrapper script for ipset listing
@ 2013-01-05 16:05 Born Without
  2013-01-05 16:16 ` Born Without
  2013-01-05 17:10 ` Jan Engelhardt
  0 siblings, 2 replies; 18+ messages in thread
From: Born Without @ 2013-01-05 16:05 UTC (permalink / raw)
  To: netfilter@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 358 bytes --]

Hello list!

As I was missing those features in the ipset set listing capabilities:

- show sum of set members
- suppress listing of headers
- choose a delimiter character for separating member entries

I wrote a little wrapper script (for the bash shell) to support them.
For those who like, you'll find it attached.

Comments etc. welcome...

Best regards

[-- Attachment #2: ipset_list.bash --]
[-- Type: text/plain, Size: 2089 bytes --]

#!/bin/bash

# -----------------------------------------------------------------
ipset="/sbin/ipset"
delim=" "
TMOUT=30
# -----------------------------------------------------------------

set -f
shopt -s extglob

show_count=0 show_members=0 headers_only=0 names_only=0 i=0

[[ -x $ipset ]] || {
	printf "ipset binary \`%s' does not exist, or is not executable" "$ipset"
	exit 1
}
while (($#)); do
	case "$1" in
		-h) printf "%s [-{c|h|m|n|r|s|t}] [...] [-d char] [set-name] [...]\n" "${0//*\//}"
			exit 0
		;;
		-c) show_count=1
			shift
		;;
		-m) show_members=1
			shift
		;;
		-n) names_only=1
			shift
		;;
		-t) headers_only=1
			shift
		;;
		-d) if [[ -z $2 ]]; then
				printf "delim character is missing\n" >&2
				exit 2
			else
				if ((${#2} > 1)); then
					printf "only one character is allowed as delim\n" >&2
					exit 2
				fi
				delim="$2"
				shift 2
			fi
		;;
		-s|-r) arr_par[i++]="$1"
			shift
		;;
		-o) if [[ $2 != plain ]]; then
				printf "only plain output is supported\n" >&2
				exit 2
			else
				shift 2
			fi
		;;
		-\!|-f) shift
		;;
		*) break
	esac
done
if ((names_only)); then
	if ((show_count || show_members)); then
		printf "options -n and -c|-m are mutually exclusive\n" >&2
		exit 2
	fi
	"$ipset" l -n
	exit $?
fi
if ((headers_only)); then
	if ((show_count || show_members)); then
		printf "options -t and -c|-m are mutually exclusive\n" >&2
		exit 2
	fi
	"$ipset" l -t
	exit $?
fi

i=0
if [[ $1 ]]; then
	arr_opts=("$@")
else
	while IFS=$'\n' read -r; do
		arr_opts[i++]="$REPLY"
	done < <("$ipset" l -n)
	i=0
fi

for x in "${!arr_opts[@]}"; do
	while read -r; do
		if [[ $REPLY = Name:* ]]; then i=0
			printf "\n%s\n" "$REPLY"
			continue
		elif [[ $REPLY = @(Type|Revision|Header|Size in memory|References|Members):* ]]; then
			continue
		elif [[ -z $REPLY ]]; then
			continue
		else
			if ((show_members)); then
				printf "%s$delim" "$REPLY"
			fi
			let i+=1
		fi
	done < <("$ipset" l "${arr_opts[x]}" "${arr_par[@]}")
	if ((show_members)); then
		printf "\n"
	fi
	if ((show_count && i)); then
		printf "Member count: %d\n" $i
	fi
done

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2013-01-21  8:55 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-05 16:05 Wrapper script for ipset listing Born Without
2013-01-05 16:16 ` Born Without
2013-01-06  4:54   ` Born Without
2013-01-05 17:10 ` Jan Engelhardt
2013-01-06  3:50   ` Born Without
2013-01-06 20:06     ` Jan Engelhardt
2013-01-07  7:59       ` Jozsef Kadlecsik
2013-01-09  6:52         ` Born Without
2013-01-09 11:52           ` Pablo Neira Ayuso
2013-01-10 12:53             ` Born Without
2013-01-10 15:01               ` Eliezer Croitoru
2013-01-10 21:18                 ` Born Without
2013-01-10 15:19               ` Jozsef Kadlecsik
2013-01-10 21:15                 ` Born Without
2013-01-10 21:37                   ` Born Without
2013-01-11  8:19             ` Born Without
2013-01-21  8:31             ` Born Without
2013-01-21  8:55               ` Jozsef Kadlecsik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).