THEAARBS menus - netmenu

Raw

#!/bin/bash
# A menu for my commonly-used network tools

IOFile=$(mktemp)

runprefix="$TERMINAL -o $IOFile -e"

MenuChoices="cisco\nconnect to\ndig\ngen pw\nkillvpn\nnmtui\nnmgui\nclonesite\nping\npingsubnet\nsmtp\nssh keys\nssl query\nspeedof lan\nspeedof wifi\nspeedof wan\ntrace route\nnewnet\nvm\nvnc\nwhois\nwinbox\nwireshark"

Say() { echo "$1" "$2" ; notify-send "$1" "$2" ;}

GetKeyFile() { KeyFile="$(find /home/$USER/.ssh -type f | dwmenu "Locate key file to use:")" || exit 1 ;}

GetHostName() { ServerHost=$(inprompt "$1") || exit 1 ;}

Menu2() {
	choice=$(echo -e "$1" | dwmenu "$2") || exit
	case $choice in
	# Cisco choices
		"asdm")		$(ifinstalled javaws) && Util ASDM "Host:" ;;
		"sho run")	ciscorun ;;
		"sho inv")	ciscover ;;
	# Connect To choices
		FTP)		Util FTP "Host:" ;;
		RDP)		connectcomputer RDP ;;
		SMB)		CIFS Mount ;;
		SSH)		connectcomputer SSH ;;
		"Network Checkin") checkin ;;
	# SMTP choices
		default)	$(ifinstalled msmtp) && msg ;;
		telnet)		Util SMTPTelnet "Mail Server:" ;;
		config)		openfile ~/.config/msmtp/config ;;
	# SSH choices
		"keygen")	$runprefix ssh-keygen -t rsa ;;
		"push key")	Util PushKey "Remote Server Hostname:" ;;
		"keychain")	GetKeyFile
				$runprefix ssh-add -k $KeyFile
				if [[ $(grep "Identity added" $IOFile) ]]
				then Say "👍 Private key added to keychain."
				else Say "⛔ There was a problem adding key to keychain."
				fi ;;
	esac ;}

Util() {
	GetHostName "$2"
	case $1 in
		ASDM)		javaws https://$ServerHost/admin/public/asdm.jnlp ;;
		Dig)		TypeChoice=$(echo -e "any\nreverse\na\nmx\nns\nsrv\ntxt" | dwmenu "Record type:")
				[[ $TypeChoice = "reverse" ]] && TypeChoice="x"
				dig $TypeChoice $ServerHost >$IOFile
				xdg-open $IOFile &disown ;;
		FTP)		$runprefix ftp $ServerHost ;;
		Ping)		$runprefix cping $ServerHost ;;
		Whois)		Say "⌛ Looking up whois for '$ServerHost'"
				whois $ServerHost > $IOFile &&
					xdg-open $IOFile ||
					Say "⛔ There was a whois problem" ;;
		TraceRoute)	Say "⌛ Tracing route to '$ServerHost'"
				traceroute $ServerHost > $IOFile &&
					xdg-open $IOFile ||
					Say "⛔ There was a route problem" ;;
		CloneSite)	Say "⌛ Attempting to download $ServerHost"
				cd ~/Downloads
				wget -mkEpnp $ServerHost &> $IOFile
				if [[ $(grep "FINISHED" $IOFile) ]]
				then Say "👍 $ServerHost download complete. $(grep 'Total wall clock time' $IOFile)"
				else Say "⛔ There was a problem downloading $ServerHost"
				fi ;;
		SSLQuery)	Say "⌛ Looking up SSL info for '$ServerHost'"
				openssl s_client -showcerts -servername $ServerHost -connect $ServerHost:443 2>/dev/null | \
					openssl x509 -inform pem -noout -text > $IOFile
				xdg-open $IOFile &disown ;;
		PushKey)	GetKeyFile
				$runprefix ssh-copy-id -i $KeyFile $ServerHost
				if [[ $(grep "key(s) added: 1" $IOFile) ]]
				then Say "👍 Key added. Try logging into $ServerHost."
				else Say "⛔ There was a problem pushing key to $ServerHost."
				fi ;;
		SMTPTelnet)	Sender=$(inprompt "Sender e-mail:") || exit
				Recipient=$(inprompt "Recipient e-mail:") || exit
				Subject=$(inprompt "Subject:") || exit
				Body=$(inprompt "Message Body:") || exit
				$runprefix expect ~/.local/bin/expect/smtptelnet "$ServerHost" "$Sender" "$Recipient" "$Subject" "$Body"
				if [[ $(grep "Queued mail for deliver" /tmp/smtp-telnet) ]]
				then Say "👍 SMTP successful."
				else Say "⛔ SMTP was not successful."
				fi ;;
	esac ;}

CIFS() {
	case $1 in
		Ask)	case $(echo -e "Yes\nNo" | dwmenu "Add another?") in
				"Yes") CIFS Wiz ;;
				"No") CIFS Finish ;;
			esac ;;
		Finish)	sudo cp /tmp/fstab-modified /etc/fstab
			sudo mount -a
			exit ;;
		Mount)	cat /etc/fstab >/tmp/fstab-original
			cat /etc/fstab >/tmp/fstab-modified
			SpaceChar='\\040'
			CIFS Wiz ;;
		Wiz)	LocalPath=$(inprompt "Local path for this mount:") || exit
			ConnectTo=$(inprompt "Network server name or IP:") || exit
			ConnectUsr=$(inprompt "Username to connect with:") || exit
			ConnectPw=$(dmenupass "Password to connect with:") || exit
			ShareName=$(inprompt "Name of the remote share:") || exit
			ConnectPw=$(echo $ConnectPw | sed -e 's/ /'$SpaceChar'/g')
			FSTABEDIT="//$ConnectTo/$ShareName $LocalPath cifs username=$ConnectUsr,password=$ConnectPw,uid=$(id -u $USER),gid=$(id -g $USER),iocharset=utf8,vers=1.0 0 0"
			sudo mkdir -p $LocalPath
			echo $FSTABEDIT >> /tmp/fstab-modified
			CIFS Ask ;;
	esac ;}

case $(echo -e "Clients\nCommands" | dwmenu "🔗 Network Command") in
	Clients)	nets ;;
	Commands)	case $(echo -e "$MenuChoices" | sort -n | dwmenu "🔗 Network Command") in
				"gen pw")	$runprefix genpw ;;
				"killvpn")	killvpn ;;
				"nmtui")	$runprefix nmtui ;;
				"nmgui")	nm-connection-editor ;;
				"newnet")	sudo systemctl restart NetworkManager ;;
				"speedof lan")	$runprefix speedof -l ;;
				"speedof wifi")	$runprefix speedof -w ;;
				"speedof wan")	speedof -i ;;
				"cisco")	Menu2 "asdm\nsho run\nsho inv" "Cisco Options:" ;;
				"connect to")	Menu2 "FTP\nRDP\nSMB\nSSH\nNetwork Checkin" "Connection Options:" ;;
				"smtp")		Menu2 "default\ntelnet\nconfig" "SMTP Options:" ;;
				"ssh keys")	Menu2 "keygen\npush key\nkeychain" "SSH Key Options:" ;;
				"clonesite")	Util CloneSite "Website URL to clone:" ;;
				"ping")		Util Ping "Hostname or IP:" ;;
				"ssl query")	Util SSLQuery "Domain Name:" ;;
				"pingsubnet")	$(ifinstalled nmap) && $runprefix pingsubnet $(inprompt "Subnet to ping:") ;;
				"trace route")	$(ifinstalled traceroute) && Util TraceRoute "Hostname or IP:" ;;
				"dig")		$(ifinstalled dig) && Util Dig "Domain Name:" ;;
				"vm")		$(ifinstalled virtualbox) &&
						choices=$(VBoxManage list vms | awk '{print $1}' | sed -e 's/^"//' -e 's/"$//') &&
						choice=$(echo -e "$choices" | dwmenu "Virtual Machines:") || exit
						if [[ $(VBoxManage list runningvms | grep $choice) ]];
						then Say "⛔ $choice is already running."
						else Say "👍 Starting $choice." ; VBoxManage startvm "$choice"
						fi ;;
				"vnc")		$(ifinstalled vncviewer) && vncviewer ;;
				"whois")	$(ifinstalled whois) && Util Whois "Domain Name:" ;;
				"winbox")	$(ifinstalled winbox) && winbox ;;
				"wireshark")	$(ifinstalled wireshark-gtk) && sudo wireshark-gtk ;;
			esac ;;
esac