Я работаю над совершенствованием своих навыков BASH и создаю проект для добавления кнопки GUI для запуска моего сеанса openvpn.
Я пытаюсь распечатать свой адрес TUN0 (VPN) для экран в зените.
Когда я запускаю это:
"ip address | grep -sw" inet "| cut -d" "-f 6 | grep 10.10. * | Head -n 1)"
Предоставляет правильную информацию, но при запуске в виде скрипта выдает пустой вывод. Когда я снова запускаю скрипт, он работает .. как мне заставить это работать каждый раз.
(Это для лабораторий HTB, и адрес всегда будет 10.10.)
Ниже приведен фрагмент кода:
IPADDRESS="$(ip address | grep -sw "inet" | cut -d " " -f 6 | grep 10.10.* | head -n 1)"
#Show user what the local host is on VPN network
zenity --width=250 --height=250 --title "Hacktime" --info --text "Your VPN address is: $IPADDRESS"
Редактировать * Очистить код из ShellCheck:
#!/bin/bash
# Variables
#TODO: Add a VPN option for Offsec and htb
set -m
FILE="hacktime"
SERVICE="openvpn"
PROCESS="pgrep -x $SERVICE "
KILLPROCESS="$(pgrep -x "$SERVICE" )"
IPADDRESS="$(ip address | grep -sw "inet" | cut -d " " -f 6 | grep "10.10.*" | head -n 1)"
title="Select example"
prompt="Pick an option:"
options=("HTB" "OffSec")
zenity --width=350 --height=150 --question --title "Hacktime" --text='Do you want to run the VPN?'
if [ "$?" != 0 ]
then
exit
fi
#kill any connections that might be in place already to run only one VPN at a time to HTB
if $PROCESS &> /dev/null
then
kill "$KILLPROCESS"
fi
if echo 'ifconfig tun0' | grep -q "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00"
then
echo "VPN is down"
else
ifconfig tun0 down && zenity --width=350 --height=150 --title "Hacktime" --info --text "Closing old VPN Connection"
fi
# Make sure its in the local bin file for (Also used as the script backup and update feature)
if [ ! -d "/bin/$FILE" ]; then
cp $FILE /bin &> /dev/null
chmod 777 /bin/$FILE &> /dev/null
cp $FILE ~/Desktop/$FILE &> /dev/null
chmod 777 ~/Desktop/$FILE &> /dev/null
else
rm /bin/$FILE
rm ~/Desktop/$FILE
cp $FILE /bin &> /dev/null
cp $FILE ~/Desktop/hacktime &> /dev/null
chmod 777 /bin/$FILE &> /dev/null
chmod 777 ~/Desktop/$FILE &> /dev/null
fi
# Choose which vpn to use
while opt=$(zenity --title="$title" --text="$prompt" --list --column="Options" "${options[@]}"); do
select=""
case "$opt" in
"${options[0]}" ) select="HTB";;
"${options[1]}" ) select="OffSec";;
*) zenity --error --text="Invalid option, OK to exit" && continue
esac
if zenity --question --text=" $select" ; then break ;fi
if (( ${options[0]} == 0 )) ; then
zenity --width=350 --height=150 --title "Hacktime" --error --text "IT WORKED! "
elif (( ${options[1]} == 0 )) ; then
echo "OffSec"
else
echo "Invalid choice!!"
fi
done > /dev/null 2>&1
cd ~/Downloads || exit
sudo -b openvpn NAME.ovpn
# Check that there is an internet connection
intertube=0
while [ $intertube -ne 1 ]; do
ping -q -c 1 -W 1 8.8.8.8 &> /dev/null
if [ $? -eq 0 ]; then
zenity --width=250 --height=250 --info --title "Hacktime" --text "Internet is is OK: Connecting VPN..."
intertube=1;
else
zenity --width=350 --height=150 --title "Hacktime" --error --text "Internet is down! Connect to internet before starting VPN"
echo "$IPADDRESS"
fi
done
# Show user what the local host is on VPN network
zenity --width=250 --height=250 --title "Hacktime" --info --text "Your VPN address is: $IPADDRESS"
exit