.titleBar { margin-bottom: 5px!important; }

Anrufer per Software ermitteln ?

Dieses Thema im Forum "sipgate" wurde erstellt von ManiaC, 12 Nov. 2004.

  1. ManiaC

    ManiaC Neuer User

    Registriert seit:
    5 Nov. 2004
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo Leute.

    Ich würde gerne auf meinem Rechner anzeigen lassen wer mich gerade anruft, wenn denn jemand anruft. Dabei will ich kein Softphone benutzen, sondern verwende den ATA 486 mit Analog - Telefon dran. Noch weiß ich nicht, ob ich den ATA als Router oder als Client laufen lassen werde.

    Gibt es eine Möglichkeit irgendwie herrauszubekommen, ob mich gerade jemand anruft und wer das ist ? Ich bin selbst Programmierer und suche hier jetzt nur nach Tipps und Tricks, wo ich anfangen könnte, um sowas hinzukriegen.

    Sieht man irgendwo auf der Sipgate-Seite, dass ich gerade angerufen werde ? Weil dann könnte ich ja diese Seite parsen. Oder kann ich den Netzwerktraffic mitsniffen und dann entsprechende Packete rausfiltern und an die Infos kommen ? Oder bietet der ATA 486 irgendwelche Möglichkeiten per Webinterface ? Also sieht man da vielleicht etwas ? Mein ATA ist leider noch mit DHL unterwegs und so kann ich das grad nicht ausprobieren.

    Ich würde mich über einige Ideen und Hinweise freuen.

    GreetZ ManiaC
     
  2. Blackvel

    Blackvel Mitglied

    Registriert seit:
    4 Mai 2004
    Beiträge:
    624
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    selbständig als IT-Consultant (VoIP, Asterisk, J2E
    Ort:
    Nürnberg, Einsatzorte Schwerpunkt D6-D9 (MCH, STG,
    ATA supported sowas nicht.
    Schaff Dir halt ein CLIP fähiges Analog-TEL an, dann siehst auch die Nummer vom Anrufer :)
    Ansonsten kann ich Dir zu Asterisk raten, da kann man dann die Daten auch zum Computer schicken (mit Scripts als Popup-Fenster; obs unter Windows geht muss man mal sehen).
     
  3. Malte.

    Malte. Mitglied

    Registriert seit:
    4 Juni 2004
    Beiträge:
    656
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Das SIP-RFC lesen und dann Pakete mitzusniffen, um aus den passenden Headern die CallerID zu lesen, könnte schon gehen. Ist IMHO aber hinreichend aufwendig.

    Die Sipura ATAs zeigen im Webinterface auch den letzten Anruf (also dessen CallerID) an. Da könntest Du natürlich parsen und wenn beim Telefon-Status "Ringing" steht, die Nummer aus dem anderen Feld anzeigen lassen. Erscheint mir aber auch etwas kompliziert.

    Bei Sipgate einloggen kannst Du getrost vergessen, so ein Vorgang kann schon mal 30 Sekunden und länger dauern, wenn Du dann weist, wer Dich gerade anruft, hat derjenige wahrscheinlich schon aufgelegt - falls Sipgate überhaupt live anzeigt, dass es klingelt oder Du im Gespräch mit jemand bist...
     
  4. ManiaC

    ManiaC Neuer User

    Registriert seit:
    5 Nov. 2004
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi.

    Es ging mir auch nicht darum, irgend eine supportete Funktion zu benutzen (Wenn es sowas gäbe, dann umso besser), sondern eher darum genau das was anscheinend nicht so leicht möglich ist, doch noch hinkriegen :)

    Mein Telefon ist ein CLIPfähiges Telefon. Im Display werde ich auch die Nummer sehen. Es ging mir nur darum, dass ich gleichzeitig auch auf einem normalen Computer mitbekomme, wer gerade anruft, um weiterführende Infos wie letzte Gespräche, Foto oder andere von mir gesamelte Daten anzuzeigen.

    Als gegeben ist halt, dass ich ein Hardware Telefon zusammen mit dem ATA benutzen muss. Meine Freundin ist nicht so technikversiert und sie würde es unter Garantie nicht hinkriegen ein Softphone zu benutzen :) Daher muss es sehr einfach bleiben.

    Wie ist denn die Idee, dass ich den ATA an ein Hub (kein Switch) anschliesse und dann mit einem Rechner mit an diesem Hub hänge. Dann kann ich ja alle Packete mitsniffen, richtig ? Ich denke so ein Verbindungsaufbau wird nicht sehr kompliziert sein oder ? Hat da zufällig schon jemand Erfahrung damit ?

    GreetZ ManiaC
     
  5. ManiaC

    ManiaC Neuer User

    Registriert seit:
    5 Nov. 2004
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Danke Malte, genau sowas wollte ich hören :)

    Ja das mit der Sipgate - Seite schien mir auch als Notlösung nur in Frage zu kommen. Mein ATA ist das Grandstream ATA 486. Weisst du, ob man das da auch sehen kann ? Wie gesagt habe ich leider das Teil noch nicht und muss halt jetzt ein wenig theoretisch das Ganze versuchen zu durchdenken.

    Aber deine Hilfe geht schon genau in die richtige Richtung :)
    Danke dir.

    GreetZ ManiaC
     
  6. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg

    Wenn das Telefon klingelt, ruft Dich gerade jemand an :D :lach:
     
  7. Phib

    Phib Neuer User

    Registriert seit:
    26 Juli 2004
    Beiträge:
    8
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hab da vor ein paar Monaten schonmal mit der Implementierung angefangen, das war nämlich auch genau meine Idee, meinen Sipura an nen Hub hängen und auf meinem Server einfach nen Sniffer mitlaufen lassen, der dann wiederum TCP Connections aufreissst, sich mit allen laufenden Girder Instanz auf meinen Rechner verbindet und die Nummer als Overlay auf meinem Fernseher und allen gerade laufenden Rechnern anzeigt.

    Hatte sowas schonmal ohne den Sniffer am laufen, da hat mein Server halt über ISDN den Anruf registriert und dann via Phyton alle anderen Rechner kontaktiert (von denen einer am TV angeschlossen ist).

    Super Couch-Potatoe Feature um gleich zu sehen ob es sich lohnt überhaupt aufzustehen *g*

    Eigentlich total banal, hab jpcap eingebunden und angefangen auf Port 5060 zu lauschen. Sobald dann auf dem Port traffic aufläuft schnell nachgesehen ob ein "INVITE" drin steht, und wenn ja angefangen die Nummer zu extrahieren...

    War mehr ein proof-of-concept, aber ist eigentlich ein nettes feature ;)
     
  8. parlazzo

    parlazzo Neuer User

    Registriert seit:
    20 Juni 2004
    Beiträge:
    98
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi Beta
    Der GAG war der beste Start ins Wochenende
     
  9. TinTin

    TinTin Aktives Mitglied

    Registriert seit:
    6 Mai 2004
    Beiträge:
    1,864
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ja das geht mit Asterisk zu einem Windows Rechner - mit "Asterisk CallerID" , ein Tool was über voip-info.org verlinkt ist.

    Gruß,
    Tin
     
  10. markbeu

    markbeu IPPF-Promi

    Registriert seit:
    4 Apr. 2004
    Beiträge:
    3,263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Berlin
    ich fand den "Joke" von Beta gerade nicht sonderlich witzig..da es hier scheinbar um ein ernsthaftes Prob geht...
    In anderen Foren wird sowas Spam genannt :-(
     
  11. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Nun mal Spaß beiseite - zur Erklärung:

    Natürlich war das im Vordergrund lustig gemeint - ich konnte es mir einfach nicht verkneifen :wink:

    Aber jetzt mal im Ernst:

    Es ist durchaus möglich, am RJ11-Ausgang des ATA486 parallel zum angeschlossenen Telefon über eine simple 2-Draht-Leitung und einen PIC mit geeigneter Software die vom ATA bereits während der Anrufsignalisierung gelieferten CLIP-Informationen mitzulesen und diese z.B. über den RS232-Port in den PC einzuspeisen.

    In welcher Form der PC diese Daten dann auswertet, bleibt jedem Anwender selbst überlassen. Es ist nicht zu verschweigen, daß hierzu ziemlich weitreichende Programmier- und Protokollkenntnisse notwendig sind.

    Nach dem gleichen Prinzip haben wir hier vor ca. 15 Jahren schon RDS-Radiotext aus dem laufenden Radioprogramm ausgelesen und auf dem PC sichtbar gemacht.

    Als Spam bitte ich meinen Kommentar deshalb nicht zu betrachten.
     
  12. ManiaC

    ManiaC Neuer User

    Registriert seit:
    5 Nov. 2004
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Genial, genau sowas ähnliches hab ich auch vor :) Das mit Girder und dann per Overlay die Nummer auf den Fernseher zu malen, ist natürlich auch ne geniale Idee ! :) Bei mir hängt ein TFT-Touchpanel im Wohnzimmer an der Wand. Da läuft eine eigene Software drauf, die eigentlich nur Schnick/Schnack und alle möglichen Sachen enthält, die kein Mensch wirklich braucht, aber es macht Spaß sowas aufzubauen :) Und als weiteres Gimmick, wollte ich eben auch den Anrufer dadrüber anzeigen.

    Da dein Vorschlag genau den Lösungsweg beschreibt, den ich mir auch vorgestellt hatte, werde ich wohl diesen Weg versuchen einzuschlagen. Die Idee von Betateilchen mit der 2 Drahtleitung ist natürlich auch ne nette Möglichkeit. Doch das geht mehr in Richtung Hardware und da hab ich nicht so die Erfahrung drin. Wobei die serielle Schnittstelle weniger das Problem ist. Ich werde es wohl nicht so leicht hinkriegen da nen PIC so anzuschliessen/programmieren, damit es die benötigten Daten rausfiltert und dann die serielle Schnittstelle sendet. Die reine Software-Lösung fällt mir da auf jeden Fall leichter :)

    @Phib
    Hast du das zufällig noch am Laufen ? Hast du da was eigenes dafür geschrieben oder hast du irgendwelche Tools benutzt, die zum Beispiel das gesniffte loggen und in ne Datei schreiben und ein weiteres Tool parst die Datei immer wieder durch oder wie ?

    Danke auf jeden Fall für die ganzen Antworten.

    GreetZ ManiaC
     
  13. Phib

    Phib Neuer User

    Registriert seit:
    26 Juli 2004
    Beiträge:
    8
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wie gesagt, das war nur mal so ein proof of concept. Du brauchst JPCAP für das Beispiel. Kein Fehlerhandling und einfach mal quick & dirty.

    Mach da so ne art Live-Parsing, sobald ein interessantes Päckchen kommt müsstest halt noch Girder über ne TCP/IP connection triggern, das ist aber ganz easy. Hab ich sicher bei Bedarf auch noch n Code Schnippsel.

    Code:
    import jpcap.*;
    
    class Test1 implements JpcapHandler {
    
      private static long packetSeen, packetHandled;
    
      public void handlePacket(Packet packet){
        packetSeen++;
        UDPPacket udpPacket = (UDPPacket)packet;
        if(udpPacket.dst_port == 5060) {
          System.out.println("handlePacket() " + udpPacket.caplen);
          packetHandled++;
          byte[] data = packet.data;
          String strData = new String(data);
    
          // INVITE indicates that someone calls you
          if(strData.indexOf("INVITE") != -1) {
            // The string we are looking for should look like
            // [...From: "049123456789" <sip:049123456789@123.123.123.123>;...]
            String strSubstring, strNumber;
            int pOne, pTwo;
    
            pOne = strData.indexOf("From: ") + 7;
            strSubstring = strData.substring(pOne, pOne+30);
            pTwo = strSubstring.indexOf("\"");
            strNumber = strSubstring.substring(0, pTwo);
            System.out.println("Call from: " + strNumber);
            // Trigger Girder TCP/IP Connection here.
          }
          System.out.println("packetSeen = " + packetSeen);
          System.out.println("packetHandled = " + packetHandled);
        }
      }
    
       public static void main(String[] args) throws java.io.IOException{
         String[] lists=Jpcap.getDeviceDescription();
         //Define destination host (to whom the packets are adressed)
         String HOST = "158.133.130.159";
         packetSeen = 0;
         packetHandled = 0;
    
         System.out.println("Start capturing on "+lists[0]);
    
         Jpcap jpcap=Jpcap.openDevice(Jpcap.getDeviceList()[0],1000,false,20);
         jpcap.setFilter("host " + HOST + " and proto UDP", true);
    
         jpcap.loopPacket(-1, new Test1());
       }
    }