Netstat en shellscript
Buenas! Hace un rato me meti a mi router(que corre dd-wrt), y me di cuenta de que no tenia el comando netstat. Por esto, y porque no tenia ganas de estudiar, me puse a hacer este script que muestra ip dest/src y port dest/src de cada conexion tcp que este establecida. Sin mas, el script en cuestion:
#!/bin/sh
parse_num()
{
x=$(echo $1 | sed -n 's/0*//p')
if [ $(echo $x | wc -c) -eq 1 ]
then
x=0
fi
echo $x
}
hex_to_ip()
{
index=7
output=''
while [ $index -gt 0 ]
do
end=$(expr $index + 1)
value=$(printf "%d" "0x$(parse_num $(echo $1 | cut -b $index-$end))")
output="$output.$value"
index=$(expr $index - 2)
done
echo $(echo $output | cut -b 2-)
}
printf " Src IP Src port Dst IP Dst portn"
cat /proc/net/tcp | while read line; do
srcip=$(hex_to_ip $(echo $line | sed -n 's/^[0-9]*: //p' | sed 's/:.*//p'))
srcport=$(printf "%d" 0x$(parse_num $(echo $line | sed -n 's/^ *[0-9]*: [0-9,A-F]*://p' | cut "-d " -f 1)))
dstip=$(hex_to_ip $(echo $line | sed -n 's/^[0-9]*: [0-9,A-F]*:[0-9,A-F]* //p' | sed -n 's/:.*//p'))
dstport=$(printf "%d" 0x$(parse_num $(echo $line | sed -n 's/^ *[0-9]*: [0-9,A-F]*:[0-9,A-F]* [0-9,A-F]*://p' | cut "-d " -f1)))
printf "%15s %9s %15s %9sn" $srcip $srcport $dstip $dstport
done
Aca una muestra de como funciona.
Lo empece haciendo para bash, pero como mi router no tenia ese interprete, termine pasandolo a sh para que sea mas portable .
Para descargarlo, click aca
Saludos!

