#!/usr/bin/perl use IO::Socket; exit if (fork()); open(ETH, 'tethereal -i eth2 -l -f "udp port 1024" -V -R "sip and sip.Status-Code eq 180" |') or die("Could not pipe tethereal: $!\n"); # Two cases: # From: sip:16073243793@64.80.206.138;tag=ACA9FA34-104F # From: "anonymous" ;tag=ACAEF8C8-136C while() { next unless (/From:/); if (/From: (.+?)\;/) { $no = $1; if ($no =~ /^sip:(\d+)/) { my @n = split(//, $1); broadcast("$n[1]$n[2]$n[3] $n[4]$n[5]$n[6] $n[7]$n[8]$n[9]$n[10]"); } broadcast("$1") if ($no =~ /^(.+?)\s/); } } sub broadcast { if (!$sock) { $sock = IO::Socket::INET->new( PeerAddr => "192.168.200.255", PeerPort => 3335, Proto => 'udp', Type => SOCK_DGRAM, Broadcast => 1) or die("Socket: $!\n"); } print $sock ("Incoming Call: $_[0]\n"); }