Use ss,ip when available instead of netstat,ifconfig

This commit is contained in:
Gerhard Rieger 2018-08-12 18:11:19 +02:00
parent 42864922e7
commit 181228cf53
2 changed files with 115 additions and 16 deletions

View file

@ -68,6 +68,11 @@ testing:
Failure of cipher aNULL is not a failure Failure of cipher aNULL is not a failure
Failure of methods SSL3 and SSL23 is desired Failure of methods SSL3 and SSL23 is desired
test.sh depended on ifconfig and netstat utilities which are no longer
availabie in some distributions. test.sh now checks for and prefers
ip and ss.
Thanks to Ruediger Meier for reporting this problem.
git: git:
Added missing Config/Makefile.DragonFly-2-8-2, Added missing Config/Makefile.DragonFly-2-8-2,
Config/config.DragonFly-2-8-2.h Config/config.DragonFly-2-8-2.h

126
test.sh
View file

@ -72,13 +72,18 @@ if type ip >/dev/null 2>&1; then
INTERFACE=$(ip r get 8.8.8.8 |grep ' dev ' |head -n 1 |sed "s/.*dev[[:space:]][[:space:]]*\([^[:space:]][^[:space:]]*\).*/\1/") INTERFACE=$(ip r get 8.8.8.8 |grep ' dev ' |head -n 1 |sed "s/.*dev[[:space:]][[:space:]]*\([^[:space:]][^[:space:]]*\).*/\1/")
else else
case "$UNAME" in case "$UNAME" in
Linux) INTERFACE="$(netstat -rn |grep -e "^default" -e "^0\.0\.0\.0" |awk '{print($8);}')" ;; Linux)
if [ "$IP" ]; then
INTERFACE="$($IP route get 8.8.8.8 |grep ' dev ' |sed -e 's/.* dev //' -e 's/ .*//')"
else
INTERFACE="$(netstat -rn |grep -e "^default" -e "^0\.0\.0\.0" |awk '{print($8);}')"
fi ;;
FreeBSD) INTERFACE="$(netstat -rn |grep -e "^default" -e "^0\.0\.0\.0" |awk '{print($4);}')" ;; FreeBSD) INTERFACE="$(netstat -rn |grep -e "^default" -e "^0\.0\.0\.0" |awk '{print($4);}')" ;;
*) INTERFACE="$(netstat -rn |grep -e "^default" -e "^0\.0\.0\.0" |awk '{print($4);}')" ;; *) INTERFACE="$(netstat -rn |grep -e "^default" -e "^0\.0\.0\.0" |awk '{print($4);}')" ;;
esac esac
fi fi
MCINTERFACE=lo # !!! Linux only - and not always
MCINTERFACE=$INTERFACE MCINTERFACE=$INTERFACE
[ -z "$MCINTERFACE" ] && MCINTERFACE=lo # !!! Linux only - and not always
#LOCALHOST=192.168.58.1 #LOCALHOST=192.168.58.1
LOCALHOST=localhost LOCALHOST=localhost
#LOCALHOST=127.0.0.1 #LOCALHOST=127.0.0.1
@ -201,6 +206,23 @@ else
SUBSTUSER="$(grep -v '^[^:]*:^[^:]*:0:' /etc/passwd |tail -n 1 |cut -d: -f1)" SUBSTUSER="$(grep -v '^[^:]*:^[^:]*:0:' /etc/passwd |tail -n 1 |cut -d: -f1)"
fi fi
if type ip; then
if ip -V |grep -q "^ip utility, iproute2-ss"; then
IP=$(which ip)
else
unset IP
fi
fi
if type ss; then
if ss -V |grep -q "^ss utility, iproute2-ss"; then
SS=$(which ss)
else
unset SS
fi
fi
if [ -z "$SS" ]; then
# non-root users might miss ifconfig in their path # non-root users might miss ifconfig in their path
case "$UNAME" in case "$UNAME" in
AIX) IFCONFIG=/usr/sbin/ifconfig ;; AIX) IFCONFIG=/usr/sbin/ifconfig ;;
@ -215,6 +237,7 @@ Darwin)IFCONFIG=/sbin/ifconfig ;;
DragonFly) IFCONFIG=/sbin/ifconfig ;; DragonFly) IFCONFIG=/sbin/ifconfig ;;
*) IFCONFIG=/sbin/ifconfig ;; *) IFCONFIG=/sbin/ifconfig ;;
esac esac
fi
# need output like "644" # need output like "644"
case "$UNAME" in case "$UNAME" in
@ -236,16 +259,37 @@ case "$UNAME" in
*) fileuser() { ls -l test.sh |awk '{print($3);}'; } ;; *) fileuser() { ls -l test.sh |awk '{print($3);}'; } ;;
esac esac
if2addr4() {
local IF="$1"
if [ "$IP" ]; then
$IP address show dev $IF |grep "inet " |sed -e "s/.*inet //" -e "s/ .*//"
else
$IFCONFIG $BROADCASTIF |grep 'inet ' |awk '{print($2);}' |cut -d: -f2
fi
}
if2bc4() {
local IF="$1"
if [ "$IP" ]; then
$IP address show dev $IF |grep ' inet .* brd ' |awk '{print($4);}'
else
$IFCONFIG $IF |grep 'broadcast ' |sed 's/.*broadcast/broadcast/' |awk '{print($2);}'
fi
}
# for some tests we need a second local IPv4 address # for some tests we need a second local IPv4 address
case "$UNAME" in case "$UNAME" in
Linux) Linux)
BROADCASTIF=$(ip r get 8.8.8.8 |grep ' dev ' |sed 's/.*\<dev[[:space:]][[:space:]]*\([a-z0-9][a-z0-9]*\).*/\1/') if [ "$IP" ]; then
BROADCASTIF=$($IP r get 8.8.8.8 |grep ' dev ' |sed 's/.*\<dev[[:space:]][[:space:]]*\([a-z0-9][a-z0-9]*\).*/\1/')
else
BROADCASTIF=$(route -n |grep '^0.0.0.0 ' |awk '{print($8);}')
fi
[ -z "$BROADCASTIF" ] && BROADCASTIF=eth0 [ -z "$BROADCASTIF" ] && BROADCASTIF=eth0
SECONDADDR=127.1.0.1 SECONDADDR=127.1.0.1
SECONDMASK=255.255.0.0 SECONDMASK=255.255.0.0
BCADDR=127.255.255.255 BCADDR=127.255.255.255
BCIFADDR=$($IFCONFIG $BROADCASTIF |grep 'inet ' |awk '{print($2);}' |cut -d: -f2) ;; BCIFADDR=$(if2addr4 $BROADCASTIF) ;;
FreeBSD|NetBSD|OpenBSD) FreeBSD|NetBSD|OpenBSD)
MAINIF=$($IFCONFIG -a |grep '^[a-z]' |grep -v '^lo0: ' |head -1 |cut -d: -f1) MAINIF=$($IFCONFIG -a |grep '^[a-z]' |grep -v '^lo0: ' |head -1 |cut -d: -f1)
BROADCASTIF="$MAINIF" BROADCASTIF="$MAINIF"
@ -286,6 +330,11 @@ fi
# for some tests we need a second local IPv6 address # for some tests we need a second local IPv6 address
case "$UNAME" in case "$UNAME" in
Linux) if [ "$IP" ]; then
SECONDIP6ADDR=$(expr "$($IP address |grep 'inet6 ' |fgrep -v ' ::1/128 '| head -n 1)" : '.*inet6 \([0-9a-f:][0-9a-f:]*\)/.*')
else
SECONDIP6ADDR=$(expr "$($IFCONFIG -a |grep 'inet6 ' |fgrep -v ' ::1/128 '| head -n 1)" : '.*inet \([0-9.]*\) .*')
fi ;;
*) *)
SECONDIP6ADDR=$(expr "$($IFCONFIG -a |grep 'inet6 ' |fgrep -v ' ::1/128 '| head -n 1)" : '.*inet \([0-9.]*\) .*') SECONDIP6ADDR=$(expr "$($IFCONFIG -a |grep 'inet6 ' |fgrep -v ' ::1/128 '| head -n 1)" : '.*inet \([0-9.]*\) .*')
;; ;;
@ -1793,7 +1842,11 @@ runsip4 () {
AIX) l=$($IFCONFIG lo0 |fgrep 'inet 127.0.0.1 ') ;; AIX) l=$($IFCONFIG lo0 |fgrep 'inet 127.0.0.1 ') ;;
FreeBSD) l=$($IFCONFIG lo0 |fgrep 'inet 127.0.0.1 ') ;; FreeBSD) l=$($IFCONFIG lo0 |fgrep 'inet 127.0.0.1 ') ;;
HP-UX) l=$($IFCONFIG lo0 |fgrep 'inet 127.0.0.1 ') ;; HP-UX) l=$($IFCONFIG lo0 |fgrep 'inet 127.0.0.1 ') ;;
Linux) l=$($IFCONFIG |egrep 'inet (addr:)?127\.0\.0\.1 ') ;; Linux) if [ "$IP" ]; then
l=$($IP address |egrep ' inet 127.0.0.1/')
else
l=$($IFCONFIG |egrep 'inet (addr:)?127\.0\.0\.1 ')
fi ;;
NetBSD)l=$($IFCONFIG -a |fgrep 'inet 127.0.0.1 ');; NetBSD)l=$($IFCONFIG -a |fgrep 'inet 127.0.0.1 ');;
OpenBSD)l=$($IFCONFIG -a |fgrep 'inet 127.0.0.1 ');; OpenBSD)l=$($IFCONFIG -a |fgrep 'inet 127.0.0.1 ');;
OSF1) l=$($IFCONFIG -a |grep ' inet ') ;; OSF1) l=$($IFCONFIG -a |grep ' inet ') ;;
@ -1822,7 +1875,11 @@ runsip6 () {
case "$UNAME" in case "$UNAME" in
AIX) l=$($IFCONFIG lo0 |grep 'inet6 ::1/0') ;; AIX) l=$($IFCONFIG lo0 |grep 'inet6 ::1/0') ;;
HP-UX) l=$($IFCONFIG lo0 |grep ' inet6 ') ;; HP-UX) l=$($IFCONFIG lo0 |grep ' inet6 ') ;;
Linux) l=$($IFCONFIG |egrep 'inet6 (addr: )?::1/?') ;; Linux) if [ "$IP" ]; then
l=$($IP address |egrep 'inet6 ::1/128')
else
l=$($IFCONFIG |egrep 'inet6 (addr: )?::1/?')
fi ;;
NetBSD)l=$($IFCONFIG -a |grep 'inet6 ::1 ');; NetBSD)l=$($IFCONFIG -a |grep 'inet6 ::1 ');;
OSF1) l=$($IFCONFIG -a |grep ' inet6 ') ;; OSF1) l=$($IFCONFIG -a |grep ' inet6 ') ;;
SunOS) l=$($IFCONFIG -a |grep 'inet6 ') ;; SunOS) l=$($IFCONFIG -a |grep 'inet6 ') ;;
@ -1893,7 +1950,11 @@ waitip4proto () {
[ "$timeout" ] || timeout=5 [ "$timeout" ] || timeout=5
while [ $timeout -gt 0 ]; do while [ $timeout -gt 0 ]; do
case "$UNAME" in case "$UNAME" in
Linux) l=$(netstat -n -w -l |grep '^raw .* .*[0-9*]:'$proto' [ ]*0\.0\.0\.0:\*') ;; Linux) if [ "$SS" ]; then
l=$($SS -n -w -l |grep '^raw .* .*[0-9*]:'$proto' [ ]*0\.0\.0\.0:\*')
else
l=$(netstat -n -w -l |grep '^raw .* .*[0-9*]:'$proto' [ ]*0\.0\.0\.0:\*')
fi ;;
# FreeBSD) l=$(netstat -an |egrep '^raw46? .*[0-9*]\.'$proto' .* \*\.\*') ;; # FreeBSD) l=$(netstat -an |egrep '^raw46? .*[0-9*]\.'$proto' .* \*\.\*') ;;
# NetBSD) l=$(netstat -an |grep '^raw .*[0-9*]\.'$proto' [ ]* \*\.\*') ;; # NetBSD) l=$(netstat -an |grep '^raw .*[0-9*]\.'$proto' [ ]* \*\.\*') ;;
# OpenBSD) l=$(netstat -an |grep '^raw .*[0-9*]\.'$proto' [ ]* \*\.\*') ;; # OpenBSD) l=$(netstat -an |grep '^raw .*[0-9*]\.'$proto' [ ]* \*\.\*') ;;
@ -1934,7 +1995,12 @@ waitip6proto () {
[ "$timeout" ] || timeout=5 [ "$timeout" ] || timeout=5
while [ $timeout -gt 0 ]; do while [ $timeout -gt 0 ]; do
case "$UNAME" in case "$UNAME" in
Linux) l=$(netstat -n -w -l |grep '^raw[6 ] .* .*:[0-9*]*:'$proto' [ ]*:::\*') ;; Linux)
if [ "$SS" ]; then
l=$($SS -n -w -l |grep '^raw .* .*[0-9*]:'$proto' [ ]*0\.0\.0\.0:\*')
else
l=$(netstat -n -w -l |grep '^raw[6 ] .* .*:[0-9*]*:'$proto' [ ]*:::\*')
fi ;;
# FreeBSD) l=$(netstat -an |egrep '^raw46? .*[0-9*]\.'$proto' .* \*\.\*') ;; # FreeBSD) l=$(netstat -an |egrep '^raw46? .*[0-9*]\.'$proto' .* \*\.\*') ;;
# NetBSD) l=$(netstat -an |grep '^raw .*[0-9*]\.'$proto' [ ]* \*\.\*') ;; # NetBSD) l=$(netstat -an |grep '^raw .*[0-9*]\.'$proto' [ ]* \*\.\*') ;;
# OpenBSD) l=$(netstat -an |grep '^raw .*[0-9*]\.'$proto' [ ]* \*\.\*') ;; # OpenBSD) l=$(netstat -an |grep '^raw .*[0-9*]\.'$proto' [ ]* \*\.\*') ;;
@ -1971,7 +2037,11 @@ checktcp4port () {
local port="$1" local port="$1"
local l local l
case "$UNAME" in case "$UNAME" in
Linux) l=$(netstat -a -n -t |grep '^tcp .* .*[0-9*]:'$port' .* LISTEN') ;; Linux) if [ "$SS" ]; then
l=$($SS -4 -l -n -t |grep "^LISTEN .*:$port\>")
else
l=$(netstat -a -n -t |grep '^tcp .* .*[0-9*]:'$port' .* LISTEN')
fi ;;
FreeBSD) l=$(netstat -an |grep '^tcp4.* .*[0-9*]\.'$port' .* \*\.\* .* LISTEN') ;; FreeBSD) l=$(netstat -an |grep '^tcp4.* .*[0-9*]\.'$port' .* \*\.\* .* LISTEN') ;;
NetBSD) l=$(netstat -an |grep '^tcp .* .*[0-9*]\.'$port' [ ]* \*\.\* [ ]* LISTEN.*') ;; NetBSD) l=$(netstat -an |grep '^tcp .* .*[0-9*]\.'$port' [ ]* \*\.\* [ ]* LISTEN.*') ;;
Darwin) case "$(uname -r)" in Darwin) case "$(uname -r)" in
@ -2001,7 +2071,11 @@ waittcp4port () {
[ "$timeout" ] || timeout=5 [ "$timeout" ] || timeout=5
while [ $timeout -gt 0 ]; do while [ $timeout -gt 0 ]; do
case "$UNAME" in case "$UNAME" in
Linux) l=$(netstat -a -n -t -l |grep '^tcp .* .*[0-9*]:'$port' .* LISTEN') ;; Linux) if [ "$SS" ]; then
l=$($SS -l -n -t |grep "^LISTEN .*:$port\>")
else
l=$(netstat -a -n -t |grep '^tcp .* .*[0-9*]:'$port' .* LISTEN')
fi ;;
FreeBSD) l=$(netstat -an |grep '^tcp4.* .*[0-9*]\.'$port' .* \*\.\* .* LISTEN') ;; FreeBSD) l=$(netstat -an |grep '^tcp4.* .*[0-9*]\.'$port' .* \*\.\* .* LISTEN') ;;
NetBSD) l=$(netstat -an |grep '^tcp .* .*[0-9*]\.'$port' [ ]* \*\.\* [ ]* LISTEN.*') ;; NetBSD) l=$(netstat -an |grep '^tcp .* .*[0-9*]\.'$port' [ ]* \*\.\* [ ]* LISTEN.*') ;;
Darwin) case "$(uname -r)" in Darwin) case "$(uname -r)" in
@ -2041,7 +2115,11 @@ waitudp4port () {
[ "$timeout" ] || timeout=5 [ "$timeout" ] || timeout=5
while [ $timeout -gt 0 ]; do while [ $timeout -gt 0 ]; do
case "$UNAME" in case "$UNAME" in
Linux) l=$(netstat -a -n -u -l |grep '^udp .* .*[0-9*]:'$port' [ ]*0\.0\.0\.0:\*') ;; Linux) if [ "$SS" ]; then
l=$($SS -4 -l -n -u |grep "^UNCONN .*:$port\>")
else
l=$(netstat -a -n -u -l |grep '^udp .* .*[0-9*]:'$port' [ ]*0\.0\.0\.0:\*')
fi ;;
FreeBSD) l=$(netstat -an |egrep '^udp46? .*[0-9*]\.'$port' .* \*\.\*') ;; FreeBSD) l=$(netstat -an |egrep '^udp46? .*[0-9*]\.'$port' .* \*\.\*') ;;
NetBSD) l=$(netstat -an |grep '^udp .*[0-9*]\.'$port' [ ]* \*\.\*') ;; NetBSD) l=$(netstat -an |grep '^udp .*[0-9*]\.'$port' [ ]* \*\.\*') ;;
OpenBSD) l=$(netstat -an |grep '^udp .*[0-9*]\.'$port' [ ]* \*\.\*') ;; OpenBSD) l=$(netstat -an |grep '^udp .*[0-9*]\.'$port' [ ]* \*\.\*') ;;
@ -2081,7 +2159,11 @@ waitsctp4port () {
[ "$timeout" ] || timeout=5 [ "$timeout" ] || timeout=5
while [ $timeout -gt 0 ]; do while [ $timeout -gt 0 ]; do
case "$UNAME" in case "$UNAME" in
Linux) l=$(netstat -n -a |grep '^sctp .* .*[0-9*]:'$port' .* LISTEN') ;; Linux) if [ "$SS" ]; then
l=$($SS -4 -n -A sctp 2>/dev/null |grep "^LISTEN .*:$port\>")
else
l=$(netstat -n -a |grep '^sctp .* .*[0-9*]:'$port' .* LISTEN')
fi ;;
# FreeBSD) l=$(netstat -an |grep '^tcp4.* .*[0-9*]\.'$port' .* \*\.\* .* LISTEN') ;; # FreeBSD) l=$(netstat -an |grep '^tcp4.* .*[0-9*]\.'$port' .* \*\.\* .* LISTEN') ;;
# NetBSD) l=$(netstat -an |grep '^tcp .* .*[0-9*]\.'$port' [ ]* \*\.\* [ ]* LISTEN.*') ;; # NetBSD) l=$(netstat -an |grep '^tcp .* .*[0-9*]\.'$port' [ ]* \*\.\* [ ]* LISTEN.*') ;;
# Darwin) case "$(uname -r)" in # Darwin) case "$(uname -r)" in
@ -2120,7 +2202,11 @@ waittcp6port () {
[ "$timeout" ] || timeout=5 [ "$timeout" ] || timeout=5
while [ $timeout -gt 0 ]; do while [ $timeout -gt 0 ]; do
case "$UNAME" in case "$UNAME" in
Linux) l=$(netstat -an |grep -E '^tcp6? .* [0-9a-f:%]*:'$port' .* LISTEN') ;; Linux) if [ "$SS" ]; then
l=$($SS -6 -n -t -l |grep "^LISTEN .*:$port\>")
else
l=$(netstat -an |grep -E '^tcp6? .* [0-9a-f:%]*:'$port' .* LISTEN')
fi ;;
FreeBSD) l=$(netstat -an |egrep -i 'tcp(6|46) .*[0-9*][:.]'$port' .* listen') ;; FreeBSD) l=$(netstat -an |egrep -i 'tcp(6|46) .*[0-9*][:.]'$port' .* listen') ;;
NetBSD) l=$(netstat -an |grep '^tcp6 .*[0-9*]\.'$port' [ ]* \*\.\*') ;; NetBSD) l=$(netstat -an |grep '^tcp6 .*[0-9*]\.'$port' [ ]* \*\.\*') ;;
OpenBSD) l=$(netstat -an |grep -i 'tcp6 .*[0-9*][:.]'$port' .* listen') ;; OpenBSD) l=$(netstat -an |grep -i 'tcp6 .*[0-9*][:.]'$port' .* listen') ;;
@ -2157,7 +2243,11 @@ waitudp6port () {
[ "$timeout" ] || timeout=5 [ "$timeout" ] || timeout=5
while [ $timeout -gt 0 ]; do while [ $timeout -gt 0 ]; do
case "$UNAME" in case "$UNAME" in
Linux) l=$(netstat -an |grep -E '^udp6? .* .*[0-9*:%]:'$port' [ ]*:::\*') ;; Linux) if [ "$SS" ]; then
l=$($SS -6 -u -l -n |grep "^UNCONN .*:$port\>")
else
l=$(netstat -an |grep -E '^udp6? .* .*[0-9*:%]:'$port' [ ]*:::\*')
fi ;;
FreeBSD) l=$(netstat -an |egrep '^udp(6|46) .*[0-9*]\.'$port' .* \*\.\*') ;; FreeBSD) l=$(netstat -an |egrep '^udp(6|46) .*[0-9*]\.'$port' .* \*\.\*') ;;
NetBSD) l=$(netstat -an |grep '^udp6 .* \*\.'$port' [ ]* \*\.\*') ;; NetBSD) l=$(netstat -an |grep '^udp6 .* \*\.'$port' [ ]* \*\.\*') ;;
OpenBSD) l=$(netstat -an |grep '^udp6 .*[0-9*]\.'$port' [ ]* \*\.\*') ;; OpenBSD) l=$(netstat -an |grep '^udp6 .*[0-9*]\.'$port' [ ]* \*\.\*') ;;
@ -2195,7 +2285,11 @@ waitsctp6port () {
[ "$timeout" ] || timeout=5 [ "$timeout" ] || timeout=5
while [ $timeout -gt 0 ]; do while [ $timeout -gt 0 ]; do
case "$UNAME" in case "$UNAME" in
Linux) l=$(netstat -an |grep '^sctp[6 ] .* [0-9a-f:]*:'$port' .* LISTEN') ;; Linux) if [ "$SS" ]; then
l=$($SS -6 -n -A sctp 2>/dev/null |grep "^LISTEN .*:$port\>")
else
l=$(netstat -an |grep '^sctp[6 ] .* [0-9a-f:]*:'$port' .* LISTEN')
fi ;;
# FreeBSD) l=$(netstat -an |grep -i 'tcp[46][6 ] .*[0-9*][:.]'$port' .* listen') ;; # FreeBSD) l=$(netstat -an |grep -i 'tcp[46][6 ] .*[0-9*][:.]'$port' .* listen') ;;
# NetBSD) l=$(netstat -an |grep '^tcp6 .*[0-9*]\.'$port' [ ]* \*\.\*') ;; # NetBSD) l=$(netstat -an |grep '^tcp6 .*[0-9*]\.'$port' [ ]* \*\.\*') ;;
# OpenBSD) l=$(netstat -an |grep -i 'tcp6 .*[0-9*][:.]'$port' .* listen') ;; # OpenBSD) l=$(netstat -an |grep -i 'tcp6 .*[0-9*][:.]'$port' .* listen') ;;
@ -12788,7 +12882,7 @@ tf="$td/test$N.stdout"
te="$td/test$N.stderr" te="$td/test$N.stderr"
tdiff="$td/test$N.diff" tdiff="$td/test$N.diff"
da="test$N $(date) $RANDOM" da="test$N $(date) $RANDOM"
CMD0="$TRACE $SOCAT $opts UDP6-RECV:$PORT,ipv6-join-group=[ff02::2]:$INTERFACE /dev/null" CMD0="$TRACE $SOCAT $opts UDP6-RECV:$PORT,ipv6-join-group=[ff02::2]:$MCINTERFACE /dev/null"
printf "test $F_n $TEST... " $N printf "test $F_n $TEST... " $N
$CMD0 >/dev/null 2>"${te}0" $CMD0 >/dev/null 2>"${te}0"
rc0=$? rc0=$?