|
|
|
|
@ -1,40 +1,51 @@ |
|
|
|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
# Definicje kolorków |
|
|
|
|
# CONFIG |
|
|
|
|
SNAP_FOLDER="~/server_states" |
|
|
|
|
|
|
|
|
|
# Bash color definitions |
|
|
|
|
GREEN='\033[00;92m' |
|
|
|
|
BLUE='\033[00;94m' |
|
|
|
|
RST='\033[0m' |
|
|
|
|
|
|
|
|
|
# print color message |
|
|
|
|
function msg() { |
|
|
|
|
echo -e "$BLUE * $GREEN$1$RST" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# colorify diff output |
|
|
|
|
function colorDiff { |
|
|
|
|
awk '/^>/ { print "\033[31m"$0"\033[0m"; } /^</ { print "\033[32m"$0"\033[0m"; } /^[^<>]/ { print $0; }' |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# print horizontal line |
|
|
|
|
function HL { |
|
|
|
|
echo -e "$BLUE============================================================================$RST" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# print and format unique processes names |
|
|
|
|
function procList { |
|
|
|
|
ps aux | awk '{ print $11 }' | sort | uniq | egrep -v '^\[' |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# print and format opened TCP/UDP ports and process names |
|
|
|
|
function portList { |
|
|
|
|
netstat -lpn | egrep "(tcp.*LISTEN|udp)" | sort | uniq | awk '{split($NF,arr,"/"); print $1 " " $4 " " arr[2]}' |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# print firewall rules (standard + NAT table) |
|
|
|
|
function firewallRules { |
|
|
|
|
(/sbin/iptables -L -n; echo -e "\n#NAT\n"; /sbin/iptables -L -nt nat) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# print routing table |
|
|
|
|
function routingTable { |
|
|
|
|
/sbin/ip route |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# make status snap |
|
|
|
|
function makeSnap { |
|
|
|
|
FOLDER=~/server_states/state_$(date '+%Y%m%d_%H%M%S') |
|
|
|
|
FOLDER=$SNAP_FOLDER/state_$(date '+%Y%m%d_%H%M%S') |
|
|
|
|
mkdir -p $FOLDER |
|
|
|
|
procList > $FOLDER/ps.out |
|
|
|
|
portList > $FOLDER/netstat.out |
|
|
|
|
@ -45,8 +56,9 @@ function makeSnap { |
|
|
|
|
msg "Written state snapshot to $FOLDER" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# comapring states to previous snap |
|
|
|
|
function compare { |
|
|
|
|
FOLDER=~/server_states/$(ls ~/server_states/ | tail -n 1) |
|
|
|
|
FOLDER=$SNAP_FOLDER/$(ls ~/server_states/ | tail -n 1) |
|
|
|
|
msg "Comparing with snap $FOLDER" |
|
|
|
|
echo -e "$GREEN\nProcesses diff$RST"; HL; procList | diff - $FOLDER/ps.out | colorDiff |
|
|
|
|
echo -e "$GREEN\nOpened ports diff$RST"; HL; portList | diff - $FOLDER/netstat.out | colorDiff |
|
|
|
|
@ -55,6 +67,7 @@ function compare { |
|
|
|
|
echo -e "$GREEN\nRouting table diff$RST"; HL; routingTable | diff - $FOLDER/routing.out | colorDiff |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# Checking if root privileges |
|
|
|
|
function nonRootExit { |
|
|
|
|
if [[ $EUID -ne 0 ]]; then |
|
|
|
|
msg "This command must be run as root" |
|
|
|
|
@ -62,6 +75,7 @@ function nonRootExit { |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# Printing help |
|
|
|
|
function printHelp { |
|
|
|
|
echo -e "State Snap 0.3"; HL |
|
|
|
|
echo -e "Use: $0 [PARAMETRS]...\n" |
|
|
|
|
@ -70,12 +84,12 @@ function printHelp { |
|
|
|
|
exit 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# przy braku argumentów wyświetl pomoc |
|
|
|
|
# Print help if no arguments |
|
|
|
|
if [ $# -lt 1 ]; then |
|
|
|
|
printHelp |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
# główny kod |
|
|
|
|
# Program starts here |
|
|
|
|
case $1 in |
|
|
|
|
diff) |
|
|
|
|
nonRootExit |
|
|
|
|
|