Ubuntu/Scripts
From r00tedvw.com wiki
(Difference between revisions)
(→Code) |
|||
| Line 15: | Line 15: | ||
====Code==== | ====Code==== | ||
| − | #!/bin/bash -x | + | <nowiki>#!/bin/bash -x |
| − | + | ||
| − | + | #static variables | |
| − | + | from="$HOSTNAME"'@sender domain.com' | |
| − | + | to='recipient address' | |
| − | + | ||
| − | + | #dynamic variables | |
| − | + | HOSTNAME=$(hostname) | |
| − | + | #recipient_mx='recipient mail exchanger' ---obsolete | |
| − | + | DATE=$(date) | |
| − | + | messageidrandom=$(od -vAn -N4 -tu4 < /dev/urandom) | |
| − | + | messageid=$messageidrandom'@r00tedvw.com' | |
| − | + | IP=$(curl checkip.dyndns.org|awk '/Address:/ {print$6}'|sed 's/<.*/ /') | |
| − | + | UPTIME=$(uptime) | |
| − | + | USERS=$(users) | |
| − | + | recip_domain=$(printf "$to" | sed 's/^.*@//') | |
| − | + | recip_mx=$(dig +short $recip_domain mx | sort -n | nawk '{print $2;exit}' | sed 's/\(.*\)./\1/') | |
| − | + | ||
| + | #function containing mail commands. Contains enough RFC required fields to satisfy gmail's requirements to allow the message, though it may be detected as spam if you do not have a SPF record. | ||
function mail_input { | function mail_input { | ||
sleep 1 | sleep 1 | ||
| Line 58: | Line 59: | ||
printf 'quit' | printf 'quit' | ||
} | } | ||
| − | + | ||
| − | + | #sending mail with mail_input function | |
| − | + | mail_input | telnet $recip_mx 25 | |
| + | </nowiki> | ||
====Learned==== | ====Learned==== | ||
Revision as of 21:21, 25 September 2015
Contents |
Email current IP address
Variables needing to be defined:
- sender domain (@sender domain.com)
- recipient (recipient address)
- recipient mail exchanger (recipient mail exchanger) ---FIXED, no longer needed
Variables automatically defined
- HOSTNAME - defined by using the hostname command
- DATE - defined by using the date command
- IP - queries checkip.dyndns.org and then parses the return to exclude everything except the IP address
- UPTIME - defined by using the uptime command
- USERS - defined by using the users command
- RECIP_DOMAIN - defined by parsing the domain from the recipients' address
- RECIP_MX - defined by querying the recipient's MX and picking the record with the highest priority
Code
#!/bin/bash -x
#static variables
from="$HOSTNAME"'@sender domain.com'
to='recipient address'
#dynamic variables
HOSTNAME=$(hostname)
#recipient_mx='recipient mail exchanger' ---obsolete
DATE=$(date)
messageidrandom=$(od -vAn -N4 -tu4 < /dev/urandom)
messageid=$messageidrandom'@r00tedvw.com'
IP=$(curl checkip.dyndns.org|awk '/Address:/ {print$6}'|sed 's/<.*/ /')
UPTIME=$(uptime)
USERS=$(users)
recip_domain=$(printf "$to" | sed 's/^.*@//')
recip_mx=$(dig +short $recip_domain mx | sort -n | nawk '{print $2;exit}' | sed 's/\(.*\)./\1/')
#function containing mail commands. Contains enough RFC required fields to satisfy gmail's requirements to allow the message, though it may be detected as spam if you do not have a SPF record.
function mail_input {
sleep 1
echo 'ehlo test.com\n'
sleep 0.5
printf 'mail from:<'"$from"'>\n'
sleep 1
printf 'rcpt to:<'"$to"'>\n'
sleep 1
printf 'data\n'
sleep 0.5
printf 'Return-Path: <'"$from"'>\n'
printf 'Date: '"$DATE"'\n'
printf 'Message-ID: <'"$messageid"'>\n'
printf 'Subject: '"$HOSTNAME"' ip address= '"$IP"'\n'
printf 'From: <'"$from"'>\n'
printf 'To: <'"$to"'>\n'
printf '\n'
printf '\n'
printf 'hostname='"$HOSTNAME"'\n'
printf 'ip address= '"$IP"'\n'
printf 'uptime= '"$UPTIME"'\n'
printf 'users logged in= '"$USERS"'\n'
printf '.\n'
printf 'quit'
}
#sending mail with mail_input function
mail_input | telnet $recip_mx 25
Learned
- you cannot define a variable as the same exact spelling of the command.
WRONG: hostname ≠ `hostname` RIGHT: HOSTNAME = `hostname`
- you can call a standard command and define its output as a variable, so long as you use " ` " around the command (old school) or "$( )" around it
WRONG: HOSTNAME ≠ 'hostname' RIGHT: HOSTNAME = `hostname` RIGHT: HOSTNAME = $(hostname)
- when using printf you should be careful which type of quote to use. a single quote should be used for plain text, such as a static heading to an output. a double quote should be used for defining variables.
WRONG: printf "Address: " '$IP' "\n" RIGHT: printf 'Address: ' "$IP" '\n'
adding -x to your #!/bin/bash statement will cause everything to be printed, useful in troubleshooting
#!/bin/bash -x
- a wise man told me that i'm supposed to separate the headers from the body of the message with (2) linefeeds. Added to the script.