-
Notifications
You must be signed in to change notification settings - Fork 1
/
inetmon.sh
182 lines (152 loc) · 4.55 KB
/
inetmon.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#!/bin/bash
# iNetMon v1.0 - Internet Monitor 4 GNU/Linux
# (c) 2018 AnonymousWebHacker
#
# TODO:
# - Logging to file
# - Proxy
# Tiempo de espera para comprobar el estado de la conexión. Si la conexión
# es muy inestable prueba aumentando este valor.
CHECK_TIMEOUT=10
# Utilizar cURL para hacer la comprobación, si es ´false´ se usará ICMP
USE_CURL=true
# Notificar usando un motor TTS (Text-To-Speech)
USE_TTS=false
# Indica si se debe mostrar la IP pública (no recomendado si tu conexión es lenta)
SHOW_PUBLIC_IP=true
# Servidor para obtener tu IP pública
PUBLIC_IP_SRV="http://api.ipify.org/"
#PUBLIC_IP_SRV="http://whatismyip.systutorials.com/myip/"
# Servidor para hacer la comprobación cuando se usa ICMP
#PING_CHECK_ADDRESS="8.8.8.8"
PING_CHECK_ADDRESS="127.0.0.1"
APP_TITLE="Internet Monitor 4 Linux"
LOG_FILE="//tmp/log/inetmon.log"
CURR_STATUS="unknown"
PUBLIC_IP='N/D'
function start {
#print_banner
log "Iniciando monitorización..." info
if [[ $USE_CURL == false ]]; then
log "Se está usando ICMP en lugar de CURL (no recomendado)." info
fi
# Main Loop
while true; do
if [[ $USE_CURL == true ]]; then
# Verificar Internet usando HTTP
http_check
else
# Verificar Internet usando ICMP
ping -c 1 -W $CHECK_TIMEOUT -n "${PING_CHECK_ADDRESS}" >/dev/null 2>&1
fi
case $? in
0) status "online";;
1) status "offline";;
*) status "error";;
esac
sleep 5s
done
}
function status_changed {
log "Status changed:$RED $CURR_STATUS" info
if [[ $1 == 'online' ]]; then
if [[ $SHOW_PUBLIC_IP == true ]]; then
get_public_ip # Intenta obtener la IP pública
fi
local content="¡Estás conectado a Internet!\nTu IP pública es: $PUBLIC_IP"
notify "$content" normal
say "¡Estás conectado a Internet!"
elif [[ $1 == 'offline' ]]; then
local l_url="https://secure.etecsa.net:8443"
local p_url="https://www.portal.nauta.cu/user/login"
local content="¡No estás conectado a Internet!\n\n<a href=\"$l_url\">Inicia sesión</a> <a href=\"$p_url\">Portal Usuario</a>"
notify "$content" normal
say "¡No estás conectado!"
elif [[ $1 == 'error' ]]; then
local content="¡Ha ocurrido un error de red!\nPuede que tu adaptador de red se encuentre desconectado o hayas perdido la conexión con tu ISP"
notify "$content" low
say "¡Error de conexión!"
fi
}
# Establece el estado actual de la conexión sólo si es diferente
# Params: $1 nuevo estado
function status {
if [[ $1 != $CURR_STATUS ]]; then
CURR_STATUS=$1
status_changed $CURR_STATUS
fi
}
# Muestra una notificación con notify-send
# Params: $1 content, $2 urgency
function notify {
local icon="$SCRIPT_DIR/assets/conn_status_$CURR_STATUS.png"
local soundfile="$SCRIPT_DIR/sounds/$CURR_STATUS.wav"
notify-send "${APP_TITLE}" "$1" -u "$2" --icon="$icon"
aplay -N $soundfile >/dev/null 2>&1
}
# TTS
# Params: $1 text
function say {
if [[ $USE_TTS == true ]]; then
spd-say --language es --voice-type male2 -m some --volume -50 "$1"
fi
}
function http_check {
local html=$(curl -s -r 0-5 --connect-timeout $CHECK_TIMEOUT -L http://www.google.com/humans.txt)
if [[ -n "$html" ]]; then
# Detect WISPr
if [[ ${html:24:12} = "CMCCWLANFORM" ]]; then
return 1
# Detect Internet
elif [[ ${html} = "Google" ]]; then
return 0
fi
else
return 2
fi
}
# Obtiene la IP pública una vez (timeout 10 seg)
function get_public_ip {
if [[ $PUBLIC_IP == 'N/D' ]]; then
log "Obteniendo dirección IP pública..." info true
PUBLIC_IP=$(curl -s --connect-timeout 10 -L $PUBLIC_IP_SRV)
if [[ $? -eq 28 ]]; then # timeout
PUBLIC_IP='N/D'
fi
echo -e "$RED $PUBLIC_IP$RESETCOLOR" >&2
fi
}
# Imprime una línea del historial en la terminal
# Params $1 text, $2 type, $3 no newline
function log {
local nonl=''
#local timestamp="[$(date "+%F %X")]"
if [[ $3 == true ]]; then
nonl=-n
fi
case $2 in
info) local T="[$BLUE*$GREEN] $BLUE $1";;
warn) local T="[$RED!$GREEN] $RED $1";;
esac
local logline="$BLUE$timestamp$GREEN $T $RESETCOLOR"
echo -e $nonl $logline >&2
}
# for internal use only
export BLUE='\033[1;94m'
export GREEN='\033[1;92m'
export RED='\033[1;91m'
export RESETCOLOR='\033[1;00m'
export SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
function print_banner {
reset
echo -e "$RED
__ _______ __ _______
|__| | |.-----.| |_| | |.-----.-----.$GREEN
| | || -__|| _| || _ | |$BLUE
|__|__|____||_____||____|__|_|__||_____|__|__|
$RED Internet Connection Monitor 4 GNU/Linux
$GREEN -- (c) 2018, AnonymousWebHacker -- $RESETCOLOR
" >&2
}
# Run Main Loop
start