CAICP/system/scripts/json_api_nix.sh
2018-11-22 21:02:44 +03:00

939 lines
31 KiB
Bash

#!/bin/bash
# MIT License:
#
# Copyright (c) 2016-2018, Alexander I. Chebykin
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#################################################################
# CAI CP v.0.9.1
#
# @module : Bash script module
# @author : Alexander I. Chebykin <alex.chebykin@gmail.com>
# @copyright : Copyright (c) 2016-2018 Alexander I. Chebykin
# @version : 0.9.1
# @build date : 2018-08-23
# @license : MIT
# @link : https://github.com/CAI79/CAI-CP
#################################################################
skeleton() {
cmd_arp=`which arp`
cmd_awk=`which awk`
cmd_cat=`which cat`
cmd_date=`which date`
cmd_df=`which df`
cmd_free=`which free`
cmd_grep=`which grep`
cmd_hostname=`which hostname`
cmd_iostat=`which iostat`
cmd_ip=`which ip`
cmd_lsb_release=`which lsb_release`
cmd_lscpu=`which lscpu`
cmd_netstat=`which netstat`
cmd_ps=`which ps`
cmd_sed=`which sed`
cmd_smartctl=`which smartctl`
cmd_smbstatus=`which smbstatus`
cmd_sort=`which sort`
cmd_ss=`which ss`
cmd_uname=`which uname`
cmd_w=`which w`
result=$()
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
_print_parsed() {
while read data; do
# echo -n "$data" | sed -r "s/\"/\\\\\"/g" | tr -d "\n";
echo -n "$data" | tr -d "\n";
done;
}
#########################
# Common info functions #
#########################
cpu() {
cmd_awk=`which awk`
cmd_cat=`which cat`
result=$({ $cmd_cat /proc/stat; sleep "1"; $cmd_cat /proc/stat; } \
| $cmd_awk '/^cpu* / {usr=$2-usr; sys=$4-sys; idle=$5-idle; iow=$6-iow} END \
{total=usr+sys+idle+iow; printf "%.2f\n", (total-idle)*100/total}' \
| $cmd_awk -F " " '{print "{\n \"cpu\": " $1 "\n}"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# CPU(s) count
cpu_count() {
cmd_awk=`which awk`
cmd_grep=`which grep`
cmd_lscpu=`which lscpu`
result=$($cmd_lscpu \
| $cmd_grep '^CPU(s):' \
| $cmd_awk '{ print "{\n\t\"cpu(s)\": " $2 "\n}" }')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# CPU(s) load information
cpu_load() {
cmd_awk=`which awk`
cmd_cat=`which cat`
cmd_grep=`which grep`
cmd_lscpu=`which lscpu`
cpus=$($cmd_lscpu \
| $cmd_grep '^CPU(s):' \
| $cmd_awk '{ print $2 }')
i=0
while [ $i -lt $cpus ]
do
if [ "$i" -ne 0 ]; then
result="$result,"
fi
result+=$(
{ $cmd_cat /proc/stat; sleep "1"; $cmd_cat /proc/stat; } \
| $cmd_awk '/^cpu'$i' / {usr=$2-usr; sys=$4-sys; idle=$5-idle; iow=$6-iow} END \
{total=usr+sys+idle+iow; printf "%.2f\n", (total-idle)*100/total}' \
| $cmd_awk -F " " '{print "\n \"cpu'$i'\": " int($1) "\n"}'
)
(( i++ ))
done
echo "{$result}" | _print_parsed
}
# CPU information
cpu_info() {
cmd_awk=`which awk`
cmd_lscpu=`which lscpu`
result=$($cmd_lscpu \
| $cmd_awk -F: '{print "\""$1"\": \""$2"\"," }'\
)
echo "[{" ${result%?} "}]" | _print_parsed
}
# General OS information
general_info() {
cmd_awk=`which awk`
cmd_cat=`which cat`
cmd_date=`which date`
cmd_hostname=`which hostname`
cmd_lsb_release=`which lsb_release`
cmd_sed=`which sed`
cmd_uname=`which uname`
function displaytime {
local T=$1
local D=$((T/60/60/24))
local H=$((T/60/60%24))
local M=$((T/60%60))
local S=$((T%60))
[[ $D > 0 ]] && printf '%d days ' $D
[[ $H > 0 ]] && printf '%d hours ' $H
[[ $M > 0 ]] && printf '%d minutes ' $M
[[ $D > 0 || $H > 0 || $M > 0 ]] && printf 'and '
printf '%d seconds\n' $S
}
lsbRelease=$($cmd_lsb_release -ds | $cmd_sed -e 's/^"//' -e 's/"$//')
uname=$($cmd_uname -r | $cmd_sed -e 's/^"//' -e 's/"$//')
os=`echo $lsbRelease $uname`
hostname=$($cmd_hostname)
uptime_seconds=$($cmd_cat /proc/uptime | $cmd_awk '{print $1}')
server_time=$($cmd_date)
echo "[{ \"OS\": \"$os\", \
\"Hostname\": \"$hostname\", \
\"Uptime\": \" $(displaytime ${uptime_seconds%.*}) \", \
\"Server Time\": \"$server_time\" }]" \
| _print_parsed
}
# OS distriboutive info
os_distr() {
cmd_lsb_release=`which lsb_release`
cmd_sed=`which sed`
cmd_uname=`which uname`
lsbRelease=$($cmd_lsb_release -ds | $cmd_sed -e 's/^"//' -e 's/"$//')
osFamily=$($cmd_uname)
echo "{ \"Distr\": \"$lsbRelease\", \
\"Family\": \"$osFamily\" }" \
| _print_parsed
}
# Running processes list
processes() {
cmd_awk=`which awk`
cmd_ps=`which ps`
cmd_sed=`which sed`
cmd_sort=`which sort`
result=$($cmd_ps -eafw \
| $cmd_sed -e '1d' \
| $cmd_sort -k1 \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"uid\": \"%s\", \
\n\t\t\"pid\": %s, \
\n\t\t\"ppid\": %s, \
\n\t\t\"c\": %s, \
\n\t\t\"stime\": \"%s\", \
\n\t\t\"tty\": \"%s\", \
\n\t\t\"time\": \"%s\", \
\n\t\t\"cmd\": \"%s\"\n\t}", $1, $2, $3, $4, $5, $6, $7, $8)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# Server name
srv_name() {
cmd_awk=`which awk`
cmd_uname=`which uname`
result=$($cmd_uname -n | $cmd_awk '{ print "{\n\t\"server_name\": \"" $1 "\"\n}" }')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
##############################
# File system info functions #
##############################
# File system info
fs() {
cmd_awk=`which awk`
cmd_df=`which df`
cmd_sed=`which sed`
cmd_sort=`which sort`
result=$($cmd_df -h -T \
| $cmd_sed -e '1d' \
| $cmd_sort -k1,1 -k7,7 \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"fs\": \"%s\", \
\n\t\t\"type\": \"%s\", \
\n\t\t\"size\": \"%s\", \
\n\t\t\"used\": \"%s\", \
\n\t\t\"free\": \"%s\", \
\n\t\t\"percent\": \"%s\", \
\n\t\t\"mount\": \"%s\"\n\t}", $1, $2, $3, $4, $5, $6, $7)} \
END{print "\n]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# HDD S.M.A.R.T. status
hdd_smart() {
cmd_awk=`which awk`
cmd_sed=`which sed`
cmd_smartctl=`which smartctl`
result=$(sudo $cmd_smartctl --scan \
| $cmd_awk '{printf("%s ", $1)} {system("sudo smartctl -H \"" $1 "\" \
| sed -n '5p'")}' \
| $cmd_sed -e '/^$/d' \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"drive\": \"%s\",\n\t\t\"status\": \"%s\"\n\t}", $1, $NF)} \
END \
{print "\n]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# HDD temperature info
hdd_temp() {
cmd_awk=`which awk`
cmd_smartctl=`which smartctl`
path=`pwd`
result=$($cmd_smartctl --scan \
| $cmd_awk '{system("./smart_temp.sh \"" $1 "\"")}' \
| $cmd_awk -F: 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{FS=": "} \
{printf("\t\t\"drive\": \"%s\", \
\n\t\t\"model\": \"%s\", \
\n\t\t\"temperature\": \"%s\"\n\t}", $1, $2, $3)} \
END\
{print "\n]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# IO statistics
io_stat() {
cmd_awk=`which awk`
cmd_iostat=`which iostat`
cmd_sed=`which sed`
cmd_sort=`which sort`
result=$($cmd_iostat \
| $cmd_sed -e '1,6d;/^$/d' \
| $cmd_sort -k1 \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"device\": \"%s\", \
\n\t\t\"tps\": %s, \
\n\t\t\"kB_read/s\": %s, \
\n\t\t\"kB_wrtn/s\": %s, \
\n\t\t\"kB_read\": %s, \
\n\t\t\"kB_wrtn\": %s\n\t}", $1, $2, $3, $4, $5, $6)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
#########################
# Memory info functions #
#########################
# General memory information
mem_info() {
cmd_awk=`which awk`
cmd_cat=`which cat`
cmd_sed=`which sed`
result=$($cmd_cat /proc/meminfo \
| $cmd_awk -F: 'BEGIN {print "{"} {print "\"" $1 "\": \"" $2 "\"," } END {print "}"}' \
| $cmd_sed 'N;$s/,\n/\n/;P;D')
echo "[" ${result%?} "}]" | _print_parsed
}
# Memory usage information
#
# Based on Linux Dash codebase: https://github.com/afaqurk/linux-dash
#
# References:
# Calculations: http://zcentric.com/2012/05/29/mapping-procmeminfo-to-output-of-free-command/
# Fields: https://www.kernel.org/doc/Documentation/filesystems/proc.txt
mem() {
cmd_awk=`which awk`
cmd_cat=`which cat`
cmd_grep=`which grep`
memInfoFile="/proc/meminfo"
memInfo=`$cmd_cat $memInfoFile | $cmd_grep 'MemTotal\|MemFree\|Buffers\|Cached'`
echo $memInfo \
| $cmd_awk '{print "{ \"total\": " ($2/1024) ", \"used\": " ( ($2-($5+$8+$11))/1024 ) " }" }' \
| _print_parsed
}
# Swap memory info
swap() {
cmd_awk=`which awk`
cmd_free=`which free`
cmd_sed=`which sed`
# result=$($cmd_free -m \
# | $cmd_sed -e '1d' -e '2d' -e '3d' \
# | $cmd_awk 'BEGIN \
# {print "{"} \
# {if (NR > 1) print ","} \
# {printf("\n\t\"total\": %s, \n\t\"used\": %s", $2, $3)} \
# END{print "\n}"}')
result=$($cmd_free -m \
| $cmd_sed '/Swap:/!d' \
| $cmd_awk 'BEGIN \
{print "{"} \
{if (NR > 1) print ","} \
{printf("\n\t\"total\": %s, \n\t\"used\": %s", $2, $3)} \
END{print "\n}"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
##########################
# Network info functions #
##########################
# ARP cache table
#
# Based on Linux Dash codebase: https://github.com/afaqurk/linux-dash
arp_cache() {
cmd_awk=`which awk`
cmd_sed=`which sed`
if hash arp 2>/dev/null; then cmd_arp=`which arp`
else cmd_arp="ip neigh"
fi
result=$($cmd_arp | \
$cmd_awk 'BEGIN {print "["} NR>1 \
{if ( NF==6 ) {print "{ \"addr\": \"" $1 "\", " \
"\"hw_type\": \"" $2 "\", " \
"\"hw_addr\": \"" $3 "\", " \
"\"flags\": \"" $4 "\", " \
"\"mask\": \"" $5 "\" , " \
"\"iface\": \"" $6 "\" }, "} \
if ( NF==5 ) {print "{ \"addr\": \"" $1 "\", " \
"\"hw_type\": \"" $2 "\", " \
"\"hw_addr\": \"" $3 "\", " \
"\"flags\": \"" $4 "\", " \
"\"mask\": \"\", " \
"\"iface\": \"" $5 "\" }, "} \
if ( NF==4 ) {print "{ \"addr\": \"" $1 "\", " \
"\"hw_type\": \"" $2 "\", " \
"\"hw_addr\": \"" $3 "\", " \
"\"flags\": \"\", " \
"\"mask\": \"\", " \
"\"iface\": \"" $4 "\" }, "} \
if ( NF==3 ) {print "{ \"addr\": \"" $1 "\", " \
"\"hw_type\": \"\", " \
"\"hw_addr\": \"" $2 "\", " \
"\"flags\": \"\", " \
"\"mask\": \"\", " \
"\"iface\": \"" $3 "\" }, "} \
} \
END {print "]"}' \
| $cmd_sed 'N;$s/},/}/;P;D')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# IP addresses
#
# Based on Linux Dash codebase: https://github.com/afaqurk/linux-dash
ip_addr() {
cmd_awk=`which awk`
cmd_grep=`which grep`
cmd_ifconfig=`which ifconfig`
cmd_tr=`which tr`
cmd_dig=`which dig`
externalIp=`$cmd_dig +short myip.opendns.com @resolver1.opendns.com`
$cmd_ifconfig \
| $cmd_grep -B1 "inet addr" \
| $cmd_awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' \
| $cmd_awk -v exIp="$externalIp" -F: 'BEGIN {print "["} { print "{ \"interface\": \"" $1 "\", \"ip\": \"" $3 "\" },"} END {print "{ \"interface\": \"external\", \"ip\": \""exIp"\" } ]"}' \
| $cmd_tr -d '\r\n'
}
# Network bandwith
net_band() {
cmd_awk=`which awk`
cmd_cat=`which cat`
cmd_sed=`which sed`
result=$($cmd_cat /proc/net/dev \
| $cmd_awk 'BEGIN\
{print "["} NR>2 \
{print "{ \"interface\": \"" $1 "\"," " \"tx\": " $2 "," " \"rx\": " $10 " }," } \
END\
{print "]"}' \
| $cmd_sed 'N;$s/,\n/\n/;P;D')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# Network connections
net_conn() {
cmd_awk=`which awk`
cmd_sed=`which sed`
cmd_sort=`which sort`
cmd_ss=`which ss`
result=$($cmd_ss \
| $cmd_sed -e '1d;/u_str/d' \
| $cmd_sort -k1 \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"netid\": \"%s\", \
\n\t\t\"state\": \"%s\", \
\n\t\t\"rcvq\": %s, \
\n\t\t\"sendq\": %s, \
\n\t\t\"local\": \"%s\", \
\n\t\t\"peer\": \"%s\"\n\t}", $1, $2, $3, $4, $5, $6)} \
END{print "\n]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# Download transfer rate
#
# Based on Linux Dash codebase: https://github.com/afaqurk/linux-dash
net_download_transfer_rate() {
files=(/sys/class/net/*)
pos=$(( ${#files[*]} - 1 ))
last=${files[$pos]}
json_output="{"
for interface in "${files[@]}"
do
basename=$(basename "$interface")
# find the number of bytes transfered for this interface
in1=$(cat /sys/class/net/"$basename"/statistics/rx_bytes)
# wait a second
sleep 1
# check same interface again
in2=$(cat /sys/class/net/"$basename"/statistics/rx_bytes)
# get the difference (transfer rate)
in_bytes=$((in2 - in1))
# convert transfer rate to KB
in_kbytes=$((in_bytes / 1024))
# convert transfer rate to KB
json_output="$json_output \"$basename\": $in_kbytes"
# if it is not the last line
if [[ ! $interface == $last ]]
then
# add a comma to the line (JSON formatting)
json_output="$json_output,"
fi
done
# close the JSON object & print to screen
echo "$json_output}" | _print_parsed
}
# Upload transfer rate
#
# Based on Linux Dash codebase: https://github.com/afaqurk/linux-dash
net_upload_transfer_rate() {
files=(/sys/class/net/*)
pos=$(( ${#files[*]} - 1 ))
last=${files[$pos]}
json_output="{"
for interface in "${files[@]}"
do
basename=$(basename "$interface")
# find the number of bytes transfered for this interface
out1=$(cat /sys/class/net/"$basename"/statistics/tx_bytes)
# wait a second
sleep 1
# check same interface again
out2=$(cat /sys/class/net/"$basename"/statistics/tx_bytes)
# get the difference (transfer rate)
out_bytes=$((out2 - out1))
# convert transfer rate to KB
out_kbytes=$((out_bytes / 1024))
# convert transfer rate to KB
json_output="$json_output \"$basename\": $out_kbytes"
# if it is not the last line
if [[ ! $interface == $last ]]
then
# add a comma to the line (JSON formatting)
json_output="$json_output,"
fi
done
# close the JSON object & print to screen
echo "$json_output}" | _print_parsed
}
# Online users info
users_online() {
cmd_awk=`which awk`
cmd_netstat=`which netstat`
cmd_sed=`which sed`
cmd_smbstatus=`which smbstatus`
cmd_sort=`which sort`
cmd_w=`which w`
result=$($cmd_w \
| $cmd_sed -e '1,2d' \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"user\": \"%s\", \
\n\t\t\"tty\": \"%s\", \
\n\t\t\"from\": \"%s\", \
\n\t\t\"login\": \"%s\", \
\n\t\t\"idle\": \"%s\", \
\n\t\t\"jcpu\": \"%s\", \
\n\t\t\"pcpu\": \"%s\", \
\n\t\t\"what\": \"%s %s %s\"\n\t}", \
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)} \
END \
{print "\n]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# IP routing table
ip_route() {
if hash netstat 2>/dev/null; then ip_route_netstat
else ip_route_ip
fi
}
# IP routing table (ip)
ip_route_ip() {
cmd_awk=`which awk`
cmd_ip=`which ip`
cmd_sed=`which sed`
result=$($cmd_ip r \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{\"route\": \""} \
{print } \
{print "\"\n\t}"} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# IP routing table (netstat)
ip_route_netstat() {
cmd_awk=`which awk`
cmd_netstat=`which netstat`
cmd_sed=`which sed`
result=$($cmd_netstat -r \
| $cmd_sed -e '1,2d' \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"destination\": \"%s\", \
\n\t\t\"gateway\": \"%s\", \
\n\t\t\"genmask\": \"%s\", \
\n\t\t\"flags\": \"%s\", \
\n\t\t\"mss\": %s, \
\n\t\t\"window\": %s, \
\n\t\t\"irtt\": %s, \
\n\t\t\"iface\": \"%s\"\n\t}", $1, $2, $3, $4, $5, $6, $7, $8)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# Multicast groups
net_multicast() {
cmd_awk=`which awk`
cmd_netstat=`which netstat`
cmd_sed=`which sed`
cmd_sort=`which sort`
result=$($cmd_netstat -g \
| $cmd_sed -e '1,3d' \
| $cmd_sort -k1 \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"interface\": \"%s\", \
\n\t\t\"refcnt\": %s, \
\n\t\t\"group\": \"%s\"\n\t}", $1, $2, $3)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# Listening sockets
listen_socks() {
if hash netstat 2>/dev/null; then listen_socks_netstat
else listen_socks_ss
fi
}
# Listening sockets (ss)
listen_socks_ss() {
cmd_awk=`which awk`
cmd_ss=`which ss`
cmd_sed=`which sed`
result=$($cmd_ss -ltn \
| $cmd_sed -e '1d' \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"state\": \"%s\", \
\n\t\t\"recv-q\": %s, \
\n\t\t\"send-q\": %s, \
\n\t\t\"local address:port\": \"%s\", \
\n\t\t\"peer addr:port\": \"%s\"\n\t}", $1, $2, $3, $4, $5)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# Listening sockets (netstat)
listen_socks_netstat() {
cmd_awk=`which awk`
cmd_netstat=`which netstat`
cmd_sed=`which sed`
result=$($cmd_netstat -l \
| $cmd_sed -n '/tcp/p;/udp/p;/raw/p' \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"proto\": \"%s\", \
\n\t\t\"recv-q\": %s, \
\n\t\t\"send-q\": %s, \
\n\t\t\"localaddr\": \"%s\", \
\n\t\t\"foreignaddr\": \"%s\", \
\n\t\t\"state\": \"%s\"\n\t}", $1, $2, $3, $4, $5, $6, $7)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# Active unix domain sockets
active_unix_socks() {
if hash netstat 2>/dev/null; then active_unix_socks_netstat
else active_unix_socks_ss
fi
}
# Active unix domain sockets (ss)
active_unix_socks_ss() {
cmd_awk=`which awk`
cmd_ss=`which ss`
cmd_sed=`which sed`
cmd_sort=`which sort`
result=$($cmd_ss -x \
| $cmd_sed -e '1d' \
| $cmd_sort -k6 \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"netid\": \"%s\", \
\n\t\t\"state\": \"%s\", \
\n\t\t\"recv-q\": %s, \
\n\t\t\"send-q\": %s, \
\n\t\t\"local address:port\": \"%s:%s\", \
\n\t\t\"peer address:port\": \"%s:%s\"\n\t}", $1, $2, $3, $4, $5, $6, $7, $8)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# Active unix domain sockets (netstat)
active_unix_socks_netstat() {
cmd_awk=`which awk`
cmd_netstat=`which netstat`
cmd_sed=`which sed`
cmd_sort=`which sort`
result=$($cmd_netstat -l \
| $cmd_sed -n '/unix/p' \
| $cmd_sort -k6 \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"proto\": \"%s\", \
\n\t\t\"refcnt\": %s, \
\n\t\t\"flags\": \"%s%s%s\", \
\n\t\t\"type\": \"%s\", \
\n\t\t\"state\": \"%s\", \
\n\t\t\"i-node\": \"%s\", \
\n\t\t\"path\": \"%s\"\n\t}", $1, $2, $3, $4, $5, $6, $7, $8, $9)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# Check is application installed or not
check_app() {
cmd_awk=`which awk`
result=$(whereis -S /opt -f $1 \
| $cmd_awk -F: '{if(length($2)==0) { installed="false"; } else { installed="true"; } \
print \
"{ \
\"binary\": \""$1"\", \
\"location\": \""$2"\", \
\"installed\": "installed" \
}"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# SMB processes
smb_proc() {
cmd_awk=`which awk`
cmd_sed=`which sed`
cmd_smbstatus=`which smbstatus`
cmd_sort=`which sort`
result=$(sudo $cmd_smbstatus -pf \
| $cmd_sed -e '1,4d' \
| $cmd_sort -k1 \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"pid\": %s, \
\n\t\t\"username\": \"%s\", \
\n\t\t\"group\": \"%s\", \
\n\t\t\"machine\": \"%s\", \
\n\t\t\"protocol ver\": \"%s\", \
\n\t\t\"encryption\": \"%s\", \
\n\t\t\"signing\": \"%s\"\n\t}", $1, $2, $3, $4, $5, $6, $7)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# SMB shares
smb_shares() {
cmd_awk=`which awk`
cmd_sed=`which sed`
cmd_smbstatus=`which smbstatus`
cmd_sort=`which sort`
result=$(sudo $cmd_smbstatus -Sf \
| $cmd_sed -e '1,3d;/^\s*$/d' \
| $cmd_sort -k1 \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{print "\t{"} \
{printf("\t\t\"service\": \"%s\", \
\n\t\t\"pid\": %s, \
\n\t\t\"machine\": \"%s\", \
\n\t\t\"connected at\": \"%s %s %s %s %s %s\", \
\n\t\t\"encryption\": \"%s\", \
\n\t\t\"signing\": \"%s\"\n\t}", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
# SMB locked files
smb_locks() {
cmd_awk=`which awk`
cmd_sed=`which sed`
cmd_smbstatus=`which smbstatus`
cmd_sort=`which sort`
result=$(sudo $cmd_smbstatus -Lf \
| $cmd_sed -e '1,3d;/^\s*$/d' \
| $cmd_sort -k1 \
| $cmd_awk 'BEGIN \
{print "["} \
{if (NR > 1) print ","} \
{fname = ""} \
{ftime = ""} \
{for (i = 8; i < NF - 4; i++) fname = fname" "$i} \
{for (i = NF - 4; i < NF; i++) ftime = ftime" "$i} \
{print "\t{"} \
{printf("\t\t\"pid\": %s, \
\n\t\t\"uid\": %s, \
\n\t\t\"deny mode\": \"%s\", \
\n\t\t\"access\": \"%s\", \
\n\t\t\"r/w\": \"%s\", \
\n\t\t\"oplock\": \"%s\", \
\n\t\t\"share path\": \"%s\", \
\n\t\t\"name\": \"%s\", \
\n\t\t\"time\": \"%s\"\n\t}", $1, $2, $3, $4, $5, $6, $7, fname, ftime)} \
END \
{print "\n\t]"}')
if [ -z "$result" ]; then echo {}
else echo $result | _print_parsed
fi
}
function_name="$1"
parameter="$2"
${function_name} ${parameter}