由于我无法通过管道将修改后的版本的pcap-stream通过管道传输到网络分析工具以进行在线检查,因此我正在寻找一种解决方案,以将网络数据以其他方式传输到该工具。我的想法是,是否有可能从收集的pcap流创建一个伪网络接口。不幸的是,我不知道这是否可能;) 背景:
#!/bin/bash
# This is the address of the router
FRITZIP=http://fritz.box
# Lan Interface 2-1 1.Internet, 3-17 internet, (1-lan lan), 2-0 WAN
IFACE="3-17"
# Required: You must create & switch your Fritz!Box to usernamed-based login authentification!
FRITZUSER=$1
FRITZPWD=$2
SIDFILE="/tmp/fritz.sid"
if [ -z "$FRITZPWD" ] || [ -z "$FRITZUSER" ] ; then echo "Username/Password empty. Usage: $0 <username> <password>" ; exit 1; fi
echo "Trying to login into $FRITZIP as user $FRITZUSER"
if [ ! -f $SIDFILE ]; then
touch $SIDFILE
fi
SID=$(cat $SIDFILE)
# Request challenge token from Fritz!Box
CHALLENGE=$(curl -k -s $FRITZIP/login_sid.lua | grep -o "<Challenge>[a-z0-9]\{8\}" | cut -d'>' -f 2)
# Very proprieatry way of AVM: Create a authentication token by hashing challenge token with password
HASH=$(perl -MPOSIX -e '
use Digest::MD5 "md5_hex";
my $ch_Pw = "$ARGV[0]-$ARGV[1]";
$ch_Pw =~ s/(.)/$1 . chr(0)/eg;
my $md5 = lc(md5_hex($ch_Pw));
print $md5;
' -- "$CHALLENGE" "$FRITZPWD")
curl -k -s "$FRITZIP/login_sid.lua" -d "response=$CHALLENGE-$HASH" -d 'username='${FRITZUSER} | grep -o "<SID>[a-z0-9]\{16\}" | cut -d'>' -f 2 > $SIDFILE
#-d 'username='${FRITZUSER}
SID=$(cat $SIDFILE)
# Check for successfull authentification
if [[ $SID =~ ^0+$ ]] ; then echo "Login failed. Did you create & use explicit Fritz!Box users?" ; exit 1 ; fi
echo "Capturing traffic on Fritz!Box interface $IFACE ..." 1>&2
# In case you want to use tshark instead of ntopng
#wget --no-check-certificate -qO- $FRITZIP/cgi-bin/capture_notimeout?ifaceorminor=$IFACE\&snaplen=1600\&capture=Start\&sid=$SID | /usr/bin/tshark -r -
wget --no-check-certificate -qO- $FRITZIP/cgi-bin/capture_notimeout?ifaceorminor=$IFACE\&snaplen=1600\&capture=Start\&sid=$SID | ntopng -i -
也许还有另一种网络流量分析工具可以处理pcap的修改版本,因为管道输入会有所帮助-目前我还没有找到。
不幸的是,Fritzbox无法定向端口镜像。
我不确定这是否可能,但是由于我记得Linux可以做的事情有时比在第一眼中看到的要多,我希望有一些提示。希望我的想法不是完全垃圾;)