#!/bin/bash # Author: gilbertas matusevicius # Kolmisoft, 2015 . /usr/src/m2/framework/bash_functions.sh . /usr/src/m2/framework/settings.sh script_log="/var/log/m2/m2_pcap_control.log" pcap_dir="/var/log/m2/pcap" pcap_size="256MiB" pcap_binary="/usr/src/m2/scripts/pcapsipdump" pcap_output="" get_first_net_interface() { # Set variable default_interface to first non loopback interface and return 0 # If ip command is not found or do not return anything, default_interface is empty and return value is 1 default_interface="" /sbin/ip link show &> /dev/null if [ $? != 0 ]; then return 1; fi default_interface=$(/sbin/ip link show | grep -E '^[[:digit:]]+:' | awk -F':' '{print $2}' | sed 's/\s//g' | grep -vE '^lo$' | head -n1) if [ -z $default_interface ]; then return 1 else return 0 fi } retrieve_email_settings() { mysql_connect_data_v2 &> /dev/null if [ "$?" != "0" ]; then echo "[WARNING] $(date) Failed to retrieve database connection details. Will not send email" return 1; fi Email_Smtp_Server=$(/usr/bin/mysql -h "$DB_HOST" -u "$DB_USERNAME" --password=$DB_PASSWORD "$DB_NAME" --disable-column-names -B -e 'SELECT value FROM conflines WHERE owner_id = 0 AND name = "Email_Smtp_Server"') Email_Login=$(/usr/bin/mysql -h "$DB_HOST" -u "$DB_USERNAME" --password=$DB_PASSWORD "$DB_NAME" --disable-column-names -B -e 'SELECT value FROM conflines WHERE owner_id = 0 AND name = "Email_Login"') Email_Password=$(/usr/bin/mysql -h "$DB_HOST" -u "$DB_USERNAME" --password=$DB_PASSWORD "$DB_NAME" --disable-column-names -B -e 'SELECT value FROM conflines WHERE owner_id = 0 AND name = "Email_Password"') Email_from=$(/usr/bin/mysql -h "$DB_HOST" -u "$DB_USERNAME" --password=$DB_PASSWORD "$DB_NAME" --disable-column-names -B -e 'SELECT value FROM conflines WHERE owner_id = 0 AND name = "Email_from"') Email_port=$(/usr/bin/mysql -h "$DB_HOST" -u "$DB_USERNAME" --password=$DB_PASSWORD "$DB_NAME" --disable-column-names -B -e 'SELECT value FROM conflines WHERE owner_id = 0 AND name = "Email_port"') if [ "$Email_Smtp_Server" == "localhost" ]; then echo "[WARNING] $(date) smtp server is localhost. Will not send email" return 1 fi return 0 } read_m2_pcap_settings if [ $PCAP_ENABLED == "0" ]; then echo "$(date) [WARNING] pcap is disabled. Will not run pcapsipdump command!" exit 1 fi if [ $PCAP_BUFFER_SIZE != "-1" ]; then pcap_size="$PCAP_BUFFER_SIZE" fi if [ $PCAP_LISTENING_NET_INTERFACE == "-1" ] || [ $PCAP_LISTENING_NET_INTERFACE == "default" ] || [ -z $PCAP_LISTENING_NET_INTERFACE ] then get_first_net_interface if [ $? != 0 ]; then pcap_interface="eth0" echo "$(date) [WARNING] cannot get default interface, I will try to use $pcap_interface" else pcap_interface="$default_interface" echo "$(date) [NOTICE] using default interface $pcap_interface" fi else pcap_interface="$PCAP_LISTENING_NET_INTERFACE" echo "$(date) [NOTICE] using interface $pcap_interface" fi if ! [ -f $pcap_binary ]; then echo "$(date) [WARNING] pcapsipdump binary $pcap_binary is not found. Updating scripts directory" svn update /usr/src/m2/scripts fi pcap_command="$pcap_binary -U -i $pcap_interface -d $pcap_dir -v 1 -B $pcap_size -R none" sleep 5; if ! ps aux | grep -v 'grep' | grep -Fqi pcapsipdump then echo "$(date) [WARNING] pcapsipdump is not running. Enabling it" $pcap_command else echo "$(date) [NOTICE] pcapsipdump is running..." exit 1; fi sleep 5; # Check again if ! ps aux | grep -v 'grep' | grep -Fqi pcapsipdump then echo "$(date) [WARNING] pcapsipdump is not running. Trying again" pcap_output=$($pcap_command 2>&1) else echo "$(date) [NOTICE] pcapsupdump is running..." exit 1; fi sleep 5; if ! ps aux | grep -v 'grep' | grep -Fqi pcapsipdump; then echo "$(date) [ERROR] pcapsipdump cannot be started. Preparing to send notification email to support" if grep -Fqi 'Email sending trigerred!' $script_log; then echo "$(date) [WARNING] Today email sending was already trigered. Will not send email today" exit 1 fi retrieve_email_settings if [ "$?" != "0" ]; then echo "$(date) [ERROR] Cannot get email settings or settings are incorrect. I will NOT send email" exit 1; fi echo "$date [WARNING] Email sending trigerred!" client_tag=$(grep 'ExceptionNotifier_email_prefix' /home/m2/config/environment.rb | awk -F'=' '{print $2}') ifconfig_output=$(/sbin/ifconfig) external_ip=$(curl showip.net) #here documents don't like indentation read -r -d '' email_output << EOF Pcap command output: $pcap_output -------------- Client tag: $client_tag --------------- External IP ( curl showip.net) $external_ip ---------------- ifconfig command output: $ifconfig_output EOF if [ "$Email_Login" == "" ] && [ "$Email_Password" == "" ] then /usr/local/m2/sendEmail -f $Email_from -t support@kolmisoft.com -u "pcapsipdump error" -s $Email_Smtp_Server:$Email_port -m "$email_output" -o tls='auto' else /usr/local/m2/sendEmail -f $Email_from -xu $Email_Login -xp $Email_Password -t support@kolmisoft.com -u "pcapsipdump error" -s $Email_Smtp_Server:$Email_port -m "$email_output" -o tls='auto' fi fi