case 'accept': $output .= '<font color="#22aa22">'; $output .= "Call {$i->fields['dcalli']} Acceptance \t " . descConn($block['header']['src']['ip'], $block['header']['dst']['ip']) . "\t"; $output .= "\n"; $output .= '</font>'; break; case 'auth_challenge': CallRegister::challenge($i, $block['header']['src']['ip'], $i->data['challenge_data']); $output .= '<font color="#8888aa">'; $output .= "Authorise Challenge \t " . descConn($block['header']['src']['ip'], $block['header']['dst']['ip']) . " \t"; $output .= "Peer {$i->data['auth_user']} challenged with {$i->data['challenge_data']}\n"; $output .= '</font>'; break; case 'auth_response': CallRegister::challengeResponse($i, $block['header']['dst']['ip'], $i->data['challenge_result']); $result = CallRegister::challengeCheck($i, $block['header']['dst']['ip'], $passwords[$block['header']['src']['ip']][$call['user']]) ? 'CORRECT' : 'INCORRECT'; $output .= '<font color="#8888cc">'; $output .= "Authorise Response \t " . descConn($block['header']['src']['ip'], $block['header']['dst']['ip']) . " \t"; $output .= "Peer " . $call['user'] . " gave {$result} result: {$i->data['challenge_result']}\n"; $output .= '</font>'; break; /* case 'register_attempt': $output.= '<font color="#666666">'; $output.= "Registration REQ \t ".descConn($block['header']['src']['ip'], $block['header']['dst']['ip'])." \t"; $output.= "Peer {$i->data['auth_user']} @ {$i->data['register_timeout']} \n"; $output.= '</font>'; break; case 'register_accept': $output.= '<font color="#6666cc">';
server char(12), source char(12), ended char(12), server char(12), time datetime, clear_code char(32) ); */ if (!file_exists('capture.hex')) { die; } $t = new TCPDUMP_UDP_Decode('capture.hex'); $i = new IAX_Decode(); $blocks = $t->getBlocks(); foreach ($blocks as $block) { $i->load($block['data']); switch ($i->messagetype) { case 'new': CallRegister::register($i, $block['header']['dst']['ip'], $block['header']['src']['ip']); break; case 'hangup': $call = CallRegister::retrieve($i->fields['scalli'], $block['header']['dst']['ip']); if ($call['user']) { print "INSERT INTO call_log SET \n" . " number='{$call['dst']}', \n" . " user='******'user']}', \n" . " server='{$call['server']}', \n" . " source='{$call['source']}', \n" . " ended='{$call['ended']}', \n" . " time='" . date('Y-m-d H:i:s', strtotime($block['header']['time'])) . "', \n" . " clear_code='{$i->data['hangup_cause']}';\n\n"; } CallRegister::unregister($i, $block['header']['dst']['ip'], $block['header']['src']['ip']); break; case 'accept': break; } }
$captureTypes = array('register_attempt', 'register_accept', 'accept', 'new', 'auth_challenge', 'auth_response', 'hangup'); // batch mode //$packets = $t->getPackets(); //foreach($packets as $packet){ // stream mode while ($packet = $t->getPacket()) { if (@$packet['udp']) { $i->load($packet['udp']['packet']); print_r($i); } if ($i->messagetype) { //!='voice' && $i->messagetype!='acknowledge'){ // print "{$packet['capture_packet']['length']} {$i->messagetype} \n"; } if ('new' == $i->messagetype) { $call = CallRegister::register($i, $packet['ip']['header']['dst'], $packet['ip']['header']['src']); } if (in_array($i->messagetype, $captureTypes)) { // if(!is_array($captureTypes) || in_array($i->messagetype, $captureTypes)){ $call = CallRegister::retrieve($i->fields['dcalli'], $packet['ip']['header']['dst']); if (!$call['user']) { $call = CallRegister::retrieve($i->fields['scalli'], $packet['ip']['header']['dst']); } if ($call['user']) { print "INSERT INTO call_packets SET \n" . " number='{$call['dst']}', \n" . " user='******'user']}', \n" . " server=inet_aton('{$call['server']}'), \n" . " source=inet_aton('{$call['source']}'), \n" . " type='{$i->messagetype}', \n" . " time='" . date('Y-m-d H:i:s', strtotime($packet['capture_packet']['time'])) . "', \n" . " packet=unhex('" . bin2hex($packet['packet']) . "');\n\n"; } } if ('hangup' == $i->messagetype) { CallRegister::unregister($i, $packet['ip']['header']['dst'], $packet['ip']['header']['src']); } }