#!/bin/sh
# v14 analyzer
release="1.0.0 2015-07-25"
#
#
# -------- CONFIG BEGIN --------
# Folgende Variablen bitte anpassen
#
# hier den Pfad zu dem Log-File mit den geloggten EMMs angeben
myEMMLogfile="/media/usbstick/log/emm/Skyv14_unique_emm.log"
# hier die Datei mit der Interpretation der EMMs für Oscam Clienten verlinken; diese Datei IMMER aktuell halten
myEMMDataOSCAM="/media/usbstick/log/emm/emmoscam.dta"
# hier die Datei mit der Interpretation der EMMs für CCcam Clienten verlinken; diese Datei IMMER aktuell halten
myEMMDataCCAM="/media/usbstick/log/emm/emmccam.dta"
# anonymousmode="yes" oder anonymousmode="no"
# im anonymousmode werden alle in den EMMs vorhandenen BoxIDs und CardIDs durch xxxxx ersetzt.
anonymousmode="yes"
# Ladel des Readers, so wir es in der Datei oscam.server steht. Exakte Schreibweise ist wichtig!
# Angabe wichtig, damit der write-Link in der HTML Ausgabe zum schreiben der EMM auf die Karte funktioniert
myReader="Skyv14"
# htmlmode="yes", "no" oder "auto"
# ="yes", dann Ausgabe als HTML Tabelle, das ist nur als Ausgabe aus OSCAM WebIF sinnvoll
# ="no", dann Ausgabe als plain Text als Ausgabe aus dem OSCAM WebIF oder durch einen Shell Script Aufruf
# ="auto" erzeugt eine HTML Tabelle, wenn der Aufruf aus dem OSCAM WebIF kam, ansonsten eine plain text Ausgabe
htmlmode="auto"
# Parameter 'dezimalboxid'. Hier die CA Ser.Nr. von Ihrem Sky Receiver eintragen (dezimale Version)
# genau so angeben, wie auf dem Aufkleber auf dem Receiver aufgedruckt
dezimalboxid="xxxxxxxxxx"
# -------- CONFIG END --------
# falls eine Konfigurations-Datei vorhanden ist, überschreiben die Werte aus der Konfigurationsdatei
# alle Werte/Definitionen weiter oben in diesem Scritp
# Die Konfigurationsdatei muss den exakt gleichen Dateinamen haben, wie dieses Script, jedoch
# statt der Dateiendung '.sh' mit '.conf' enden und im gleichen Verzeichnis liegen, wie dieses Script.
# ab hier Finger weg
#
mySCRIPTNAME=$(basename "$0")
mySCRIPTDIR=$(dirname "$0")
myCONFNAME="$mySCRIPTDIR/${mySCRIPTNAME%.*}.conf"
if [ -f "$myCONFNAME" ] && [ -s "$myCONFNAME" ] ; then
. $myCONFNAME
fi
myparent=$(ps $PPID | grep -i oscam)
oscamparent=${#myparent}
if [ "$htmlmode" = "auto" ]; then
htmlmode="no"
if [ "$oscamparent" -gt "0" ] ; then
htmlmode="yes"
fi
fi
cat $myEMMDataOSCAM | grep "[A-F,0-9][A-F,0-9] hex / [0-9][0-9][0-9]:" > $myEMMDataOSCAM.tmp
sed -i 's/ hex \/ [01][0-9][0-9]/ /g' $myEMMDataOSCAM.tmp
IFS=';'
InfoWarnings="Pairing-Verdacht;Pairing Verdacht;Aktivierung: Smartcard Pairing;UNKNOWN;akute Paringgefahr;Paired die Karte;Paired z.Zt. 100%ig;Dieses EMM nicht schreiben;Aktivierung Smartcard Pairing"
while read line
do
infowarn=1
case "$line" in
*Verlängerung:*|*Verlängerer:*) infowarn=0
;;
esac
for warn in $InfoWarnings
do
#if [[ $line =~ $warn ]] ; then # no POSIX
#if echo $line | grep -q $warn ; then
if [ -z "${line##*$warn*}" ] ; then
infowarn=2
fi
done
echo "$infowarn$line" >> $myEMMDataOSCAM.tmp2
done < $myEMMDataOSCAM.tmp
mv $myEMMDataOSCAM.tmp2 $myEMMDataOSCAM.tmp
cat $myEMMDataCCAM | grep "[A-F,0-9][A-F,0-9] hex / [0-9][0-9][0-9]:" > $myEMMDataCCAM.tmp
sed -i 's/ hex \/ [01][0-9][0-9]/ /g' $myEMMDataCCAM.tmp
while read line
do
infowarn=1
case "$line" in
*Verlängerung:*|*Verlängerer:*) infowarn=0
;;
esac
for warn in $InfoWarnings
do
#if [[ $line =~ $warn ]] ; then # no POSIX
#if echo $line | grep -q $warn ; then
if [ -z "${line##*$warn*}" ] ; then
infowarn=2
fi
done
echo "$infowarn$line" >> $myEMMDataCCAM.tmp2
done < $myEMMDataCCAM.tmp
mv $myEMMDataCCAM.tmp2 $myEMMDataCCAM.tmp
if [ "$oscamparent" -gt "0" ] ; then
sed -i 's/\ä/\ä\;/g; s/\Ä/\Ä\;/g; s/\ö/\ö\;/g; s/\Ö/\Ö\;/g; s/\ü/\ü\;/g;
s/\Ü/\Ü\;/g; s/\ß/\ß\;/g; s/\"/\"\;/g' $myEMMDataOSCAM.tmp
sed -i 's/\ä/\ä\;/g; s/\Ä/\Ä\;/g; s/\ö/\ö\;/g; s/\Ö/\Ö\;/g; s/\ü/\ü\;/g;
s/\Ü/\Ü\;/g; s/\ß/\ß\;/g; s/\"/\"\;/g' $myEMMDataCCAM.tmp
fi
myboxid=$(printf "%X" "$dezimalboxid")
lmyboxid=${#myboxid}
releaseversion=$(echo "$release" | cut -d " " -f 1)
releasedate=$(echo "$release" | cut -d " " -f 2)
if [ "$htmlmode" = "yes" ]; then
echo "<style>td[title] { max-width:200px;overflow:hidden;}</style>"
echo "<table style=\"text-align:left\" id=\"emmData\">"
echo "<thead id=\"click on col-label to sort\"><tr><th>$releaseversion</th><th>hex-length : Info (mouseover)</th><th>First</th><th>Last</th><th>Count</th><th>Typ</th>"
if [ "$anonymousmode" != "yes" ]; then
echo "<th>CardID</th>"
fi
echo "<th>Client</th><th>EmmData</th></tr></thead><tbody>"
else
echo "Script $mySCRIPTNAME version $release"
fi
myInputData=$(awk '{print $4"\n"}' $myEMMLogfile | sort | uniq )
#IFS=$'\n'
#IFS=$(echo "\n\b") # did not work in bash
IFS=$(echo -en "\n\b")
for myemm in $myInputData
do
#myemmCardid=${myemm:8:8} # no POSIX
myemmCardid=$(echo "${myemm}" | awk '{print substr($0,9,8)}')
outputemm=$myemm
if [ "$anonymousmode" = "yes" ]; then
#outputemm=${myemm//$myemmCardid/xxxxxxxx}
#outputemm=$(echo "${myemm}" | sed "s/${myemmCardid}/xxxxxxxx/g") # works in 'donduck' bash, but not for 'rechner' busybox
outputemm=$(echo ${myemm} | awk -v awcid=$myemmCardid '{gsub(awcid,"xxxxxxxx");print}')
fi
#myemmClient=${myemm:0:4} # no POSIX
myemmClient=$(echo "${myemm}" | awk '{print substr($0,1,4)}')
#myemmLength=${myemm:4:2} # no POSIX
myemmLength=$(echo "${myemm}" | awk '{print substr($0,5,2)}')
#myemmType=${myemm:16:2} # no POSIX
myemmType=$(echo "${myemm}" | awk '{print substr($0,17,2)}')
if [ "$myemmClient" = "8270" ]; then
myemmClientName="OSCAM"
mytmp=$(grep "$myemmLength :" $myEMMDataOSCAM.tmp)
#myemmInfo=${mytmp:1} # no POSIX
myemmInfo=$(echo "${mytmp}" | awk '{print substr($0,2)}')
#infowarn=${mytmp:0:1} # no POSIX
infowarn=$(echo "${mytmp}" | awk '{print substr($0,1,1)}')
else
if [ "$myemmClient" = "8200" ]; then
myemmClientName="CCAM"
mytmp=$(grep "$myemmLength :" $myEMMDataCCAM.tmp)
#myemmInfo=${mytmp:1} # no POSIX
myemmInfo=$(echo "${mytmp}" | awk '{print substr($0,2)}')
#infowarn=${mytmp:0:1} # no POSIX
infowarn=$(echo "${mytmp}" | awk '{print substr($0,1,1)}')
else
myemmClientName="n/a"
myemmInfo="n/a"
infowarn=0
fi
fi
emmWarning=0
myTypWarning=""
if [ "$myemmType" = "07" ]; then
myTypWarning="ATTENTION!!"
if [ "$htmlmode" = "yes" ]; then
myTypWarning="<strong style=\"color:red\">ATTENTION!!</strong>"
fi
emmWarning=1
fi
myemmboxidWarning=""
#if echo $myemm | grep -q $myboxid ; then
if [ -z "${myemm##*$myboxid*}" ]; then
myemmboxidWarning="ATTENTION!! BoxID in EMM!!"
if [ "$htmlmode" = "yes" ]; then
myemmboxidWarning="<strong style=\"color:red\">ATTENTION!! BoxID in EMM!!</strong>"
fi
emmWarning=1
if [ "$anonymousmode" = "yes" ]; then
#anoboxid=${mytmp:0:${#myboxid}} # no POSIX
anoboxid=$(echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" | cut -c 1-"$lmyboxid")
#outputemm=${outputemm//$myboxid/$anoboxid} # not POSIX
#outputemm=$(echo "${outputemm}" | sed "s/${myboxid}/${anoboxid}/g")
outputemm=$(echo ${outputemm} | awk -v awboxid=$myboxid -v awanoid=$anoboxid '{gsub(awboxid,awanoid);print}')
fi
fi
myFirstEMM=$(grep -m1 "$myemm" $myEMMLogfile | awk '{print $1}')
myLastEMM=$(grep "$myemm" $myEMMLogfile | tail -n 1 | awk '{print $1" "$2}')
myCountEMM=$(grep "$myemm" $myEMMLogfile | wc -l)
if [ "$htmlmode" = "yes" ]; then
outputemmInfo=$myemmInfo
if [ "$infowarn" -gt "1" ]; then
outputemmInfo="<strong style=\"color:red\">$myemmInfo</strong>"
fi
echo "<tr>"
if [ "$emmWarning" = "0" ] && [ "$infowarn" = "0" ]; then
echo "<td><a href=\"emm_running.html?label=$myReader&ep=$myemm\" target=\"emmwrite\">write</a></td>"
else
echo "<td> </td>"
fi
#echo "<td title=\"$m2\">$myemmInfo</td>"
echo "<td title=\"$myemmInfo\">$outputemmInfo</td>"
echo "<td>$myFirstEMM</td>"
echo "<td>$myLastEMM</td>"
echo "<td>$(printf %05d $myCountEMM)</td>"
#echo "<td>$myCountEMM</td>"
echo "<td>$myemmType $myTypWarning</td>"
if [ "$anonymousmode" != "yes" ]; then
echo "<td>$myemmCardid</td>"
fi
echo "<td>$myemmClient ($myemmClientName)</td>"
echo "<td>$myemmboxidWarning $outputemm</td>"
echo "</tr>"
else
echo "-----------------------------------"
echo "$myemmboxidWarning EMM: $outputemm"
echo "Client: $myemmClient ($myemmClientName)"
echo "Length (hex) : Info: $myemmInfo"
if [ "$anonymousmode" != "yes" ]; then
echo "CardID: $myemmCardid"
fi
echo "Typ: $myemmType $myTypWarning"
echo "First: $myFirstEMM | Last: $myLastEMM | Count: $myCountEMM"
echo " "
fi
done
if [ "$htmlmode" = "yes" ]; then
echo "</tbody></table>"
echo "<script type=\"text/javascript\">"
echo "\$('#emmData thead').click(function(ev){"
echo "var cellIndex= ev.target.cellIndex,"
echo " tbody= this.parentNode.tBodies[0];"
echo "ev.target.curSort= !ev.target.curSort;"
echo "\$(tbody.rows).sort(ev.target.curSort ? function(a,b){return a.cells[cellIndex].innerHTML < b.cells[cellIndex].innerHTML ? -1 : 1;} : function(a,b){return a.cells[cellIndex].innerHTML > b.cells[cellIndex].innerHTML ? -1 : 1;}).appendTo(tbody);"
echo "}).find('th:eq(3)').click().click();"
echo "</script>"
fi
rm $myEMMDataOSCAM.tmp
rm $myEMMDataCCAM.tmp
cat $myEMMDataOSCAM | grep "[A-F,0-9][A-F,0-9] hex / [0-9][0-9][0-9]:" > $myEMMDataOSCAM.tmp
Wir verwenden Cookies und ähnliche Technologien für folgende Zwecke:
Akzeptieren Sie Cookies und diese Technologien?
Wir verwenden Cookies und ähnliche Technologien für folgende Zwecke:
Akzeptieren Sie Cookies und diese Technologien?