Date created: Saturday, January 16, 2016 5:28:13 PM. Last modified: Monday, May 10, 2021 9:27:56 AM
ICMP Messages (Frequency)
Two almost completely pointless bash scripts, one to TX a basic ASCII message using IMCP echo requests and one to recieve them using tcpdump and convert the number of echo requests back into the ASCII message. The RX script needs sudo to use tcpdump however the TX script (which is presumably the one that would be used out in the field to phone home) does not:
#!/bin/bash # Simply call this script with the receivers IP and the message to send; # ./message_tx.sh 11.22.33.44 "Help Im high and need biscuits" # Convert the message characters to their ASCII values msg_to_ascii() { local LOOP=0 local ASCII[${#MESSAGE}] while [ $LOOP -lt ${#MESSAGE} ] do ASCII[$LOOP]=$(echo -n "${MESSAGE:$LOOP:1}" | od -An -tuC | tr -d ' ') let LOOP=LOOP+1 done echo -n "${ASCII[*]}" } if [ -z "$1" ] then echo "1st argument must be IP/hostname" exit 1 fi if [ -z "$2" ] then echo "2nd argument must be message" exit 1 fi # Defaults DEST="$1" MESSAGE="$2" ASCII=$(msg_to_ascii) INTER_SYMBOL_PERIOD=3 # Main loop to transmit ASCII numbers as pings for CHAR in $ASCII do ping -A -c $CHAR $DEST sleep $INTER_SYMBOL_PERIOD done # Send a final terminal "character" ping -A -c 1 $DEST
#!/bin/bash # Call the script using sudo and parse the IP of the transmitting host # sudo ./message_rx.sh 11.22.33.44 if [ "$EUID" -ne 0 ] then echo "Need to be root for tcpdump" exit 1 fi if [ -z "$1" ] then echo "First argument must be IP/hostname" exit 1 fi set -u # Defaults RX_FILE="rx.pcap" if [ -e $RX_FILE ]; then rm -f $RX_FILE; fi touch $RX_FILE RX_COUNT=0 THIS_SECOND=0 LAST_SECOND=0 LINE_COUNT=$(wc -l $RX_FILE | awk '{print $1}') THIS_LINE_COUNT=0 INTER_SYMBOL_PERIOD=3 # Listen for transmission stdbuf -o0 tcpdump -tttni any "host $1 and icmp[icmptype] == 8" > $RX_FILE & # Main loop to read the pcap file while true do while IFS='' read -r line do let THIS_LINE_COUNT=THIS_LINE_COUNT+1 THIS_SECOND=$(echo $line | awk -F ":" '{print $3}' | awk -F "." '{print $1}') if [ $((THIS_SECOND-LAST_SECOND)) -ge $INTER_SYMBOL_PERIOD ] then if [ $RX_COUNT -gt 0 ]; then printf "\x$(printf %x $RX_COUNT)" fi RX_COUNT=1 LAST_SECOND=00 elif [ $((THIS_SECOND-LAST_SECOND)) -lt $INTER_SYMBOL_PERIOD ] then let RX_COUNT=RX_COUNT+1 fi if [ $THIS_LINE_COUNT -eq $LINE_COUNT ] then printf "\x$(printf %x $RX_COUNT)" fi done < $RX_FILE echo "" RX_COUNT=0 THIS_TIMESTAMP=0 LAST_TIMESTAMP=0 THIS_LINE_COUNT=0 sleep 5 done
Previous page: Example 32bit Stack Buffer Overflow Exploit
Next page: Internet.nl Security Checks