Spamcheck für Telefonanrufe

Ich nutze seit einiger Zeit die Internetseite tellows.de um zuschauen ob ein Anruf in meiner Liste evtl. Telefonspam war.

Dafür habe ich mir grad ein Script geschrieben was die Wertung automatisch von der Seite holt:

<pre>
<?php
// Hier die Telefonnummer anpassen
$url="http://www.tellows.de/num/0180151580";
$data=array();


$cont=file_get_contents($url);
$dom= new DOMDocument();
@$dom->loadHTML($cont); 
$xpath = new DOMXpath($dom);

$elements = $xpath->query("//div[@itemprop='rating']/meta");
$ratings=array();
foreach($elements AS $rating){
	$ratings[$rating->getAttribute("itemprop")]=$rating->getAttribute("content");
}
$data['ratings']=$ratings;
// !!! Die Ratings sind umgekehrt zur Webseite: Skala reicht von 10 (sehr seriös) bis 0 (unseriös) 

$elements = $xpath->query("//div[@itemtype='http://data-vocabulary.org/Review-aggregate']/div[1]/p/span[@itemprop='count']");
$anzahlkommentare=(int)$elements->item(0)->nodeValue;
$data['kommentare']=$anzahlkommentare;

print_r($data);
?>
</pre>

Ich werde das Script zusammen mit meiner Rückwärtssuche nutzen. So kann man gleich entscheiden ob man den Anruf „wegdrückt“ :wink:

Man kann von folgendem ausgehen: Wenn die Anzahl der Kommentare > 3 ist und die Wertung („ratings“ „average“) < 4 dann handelt es sich fast zu 100% um Telefonspam.

Hallo sysrun,

danke für das Script zur Anrufererkennung! Deine Einstellung des Scripts zur Erkennung von Spamnummern (Rating + Anz. Kommentare) trifft sehr gut zu - Good Work :wink:

Wir haben bei tellows mittlerweile auch eine API (XML), die wir Privatnutzern kostenlos zur Verfügung stellen (Dokumentation: tellows API für eigene Programme – Schutz vor Telefonabzocke (z.B. mit Asterix) | Tellows Blog). Hier können die Infos zu Nummern sehr einfach und übersichtlicher verarbeitet werden. Ausserdem wird hier direkt der Score der Webseite dargestellt, was die Verarbeitung vereinfacht.

Hinweis zu den von dir verwendeten Ratings (invertierter tellows-Score): Diese sind invertiert und dienen zur Kommunikation mit Google. Die Ratings werden auf den Google-Suchergebnisseiten bereits als Vorschau angezeigt. Da es sich um eine Sternebewertung handelt muss kann diese nicht in unserem Standardformat erfolgen.

Viele Grüße
Stefan

Hallo Stefan,

vielen Dank für die API. Das macht es alles viel einfacher. Hier mal eine Lösung:

$telefonnummer = "0781968053101";
$xml = Sys_GetURLContent("http://www.tellows.de/basic/num/".$telefonnummer."?xml=1&partner=test&apikey=test123");
$tellows = new SimpleXMLElement($xml);
$Ort = $tellows->location;
$score = $tellows->score;
$scorecolor = $tellows->scoreColor;
.
.

Eine Frage hab ich noch. Gibt es für IPS User einen „Partnerlogin“ oder muß jeder einen Anfragen?.

Gruß
und Danke Attain

Diese Webseite hilft auch bei der Suche nach Telefon-Spam: WER RUFT AN? - Unbekannte Nummer?

Hi,
ich benutze Tellows und eine Vorwahlliste um bei mir in der VOIP-Instanz und im Anrufmonitor vom neuen Fritz-Box-Modul zu checken ob es Spam ist.

Die Vorwahlliste benutze ich weil die Spammer seit einiger Zeit ausgedachte Nummern benutzen und dann auch teilweise Vorwahlen verwenden die es gar nicht gibt.

Da ich die Telefonnummer meiner verstorbenen älteren Mutter (=vielversprechendes Opfer) geerbt hatte habe ich leider sehr viel Erfahrung mit Telefon-Spam.

Hier mal meine Lösung für eine VOIP-Instanz:

<?php
// 39859 ID der VOIP-Instanz
if (!isset($_IPS["CONNECTION"])) return;
$connection = VOIP_GetConnection(39859, $_IPS["CONNECTION"]);

// anrufen darf man auch Spammer:-)
if($connection["Direction"] == 1) return; 

$string = $connection["Number"];

// Nummer aus SIP-String extrahieren. Meine Anbindung liefert immer sip:<nummer>@fritz.box
$pos = strpos($string, "@", 4);
if ($pos < 8) return;
$nummer = substr($string, 4, $pos - 4);

// Die Datei tellows.csv muss im Script-Verzeichnis von IPS liegen
// Auf https://www.tellows.de/openapi/index.html ist ein Link wie man zu einer Testdatei kommt.
// Mit einem richtigen Api-Key bekommt man aktuell 14.000 statt der 9.000 Einträge.
$file = 'tellows.csv';

// Um zu testen eine Nummer vorspielen die Spam ist
//$nummer = '015214547081';
// Um zu testen eine Nummer vorspielen die keine gültige Vorwahl hat aber trotzdem benutzt wird
//$nummer = '0740605786';

$name = false;
$handle = @fopen($file, "r");

// Tellows Liste nicht vorhanden gleich beenden
if (!$handle) return;

while (($line = fgets($handle)) !== false) {
    $row = explode(';', $line);
    if ($row[0] == $nummer){
        $name = ' score:'. $row[1] . ' Name:' . $row[7] . ' Ort:' . $row[8] . ' Kommentar:' . $row[6];
// 40785 ist die ID einer Bool Variablen um Log-einträge einfache ein-/ausschalten zu können für die Fehlersuche
        if (GetValue(40785)) IPS_LogMessage("VOIP Spam 8407", $row[1] . ':' . $nummer.' '.$name);        
        break;
    }
}
fclose($handle);

//vorwahlen.csv gehört auch in das Script-Verzeichnis
if ($name == false){
    $file = 'vorwahlen.csv';
    $name = false;
    $handle = @fopen($file, "r");
    if ($handle) {
        while (($line = fgets($handle)) != false) {
            $row = explode(';', $line);
            if (!empty($row[1])){
                $pos = strpos($nummer, $row[1]);
                if ($pos === 0){
                    if (GetValue(40785)) IPS_LogMessage("Vorwahlen", $nummer.' '.$name);        
                    break;
                }
            }
        }
        fclose($handle);
        if ($name == false) $name = 'illegale Vorwahl';
    }
}

// Kein Spammer gefunden
if ($name == false) return;

// Bei Scrore ab 8 ist es zu 99% sicher das es Spam ist. Nur Score 8+9 mit Antwort beglücken.
if ($row[1] < 8) return;

// Spam Anruf anehmen
@VoIP_AcceptCall(39859, $connection["ID"]);

if($_IPS['SENDER'] == "VoIP") {
    //We only want to handle incoming messages

    switch($_IPS["EVENT"]) {
        case "Connect":
            if (GetValue(40785)) IPS_LogMessage("VOIP SPAM", "connect"); 
            IPS_Sleep(2000);
// hier muss die Wave-Datei angegeben werden die abgespielt werden soll.
            VOIP_PlayWave(39859, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/spam.wav");
            IPS_Sleep(2000);
            @VoIP_Disconnect(39859, $connection["ID"]);
            break;
    }
}
?> 

In diesem Beispiel spiele ich eine Wave ab aber man könnte auch einfach VoIP_RejectCall ausführen lassen.

So ähnlich habe ich auch das Script für die Rückwärtssuche aufgebaut.

Anbei noch die Vorwahlliste.

Ralf
vorwahlen.zip (44,6 KB)

@HarmonyFan
hört sich interessant an, werde ich mal mit rumspielen.
Leider hast du VariablenIDs im Skript verwendet und nicht $variablen definiert, um zu wissen, was ist das für eine V und wofür wird sie genutzt
VG

Hi,
hast recht. Fonzo hatte mir das mit den Variablen und Instanzen schon bei meinen Anfängen empfohlen:-)

Ich finde Tellows gut. Anfangs hatte ich die Telefonbücher von Tellows um die in FritzBox zum impßortieren aber 200 reichen bei weitem nicht mehr aus:-( Aktuell benutze ich Klingelsperre und verstehe das hier als Unterstützung.

Ralf