Hola. Comparto con ustedes este básico y simple programa que hice para deshabilitar y habilitar rápidamente, tras la elección de una o dos opciones, la conexión a internet.
Ante una eventual emergencia, una necesidad que no se esperaba; o un insospechado apuro, esta herramienta les servirá, quizás, de atajo.
Código fuente:
#include<chrono>
#include<fstream>
#include<iostream>
#define AZUL "\033[34m" /* Azul */
#define VERDE "\033[32m" /* Verde */
#define RED "\033[31m" /* Red */
#define RESET "\033[0m"
using namespace std;
void clear() {
system("clear");
}
void espacio() {
cout<<endl;
}
void pausa() {
system("read -p 'Presione una tecla para continuar.' var");
}
bool archivoabuscar_existe(string nombre)
{
ifstream archivoabuscar(nombre.c_str());
return archivoabuscar.good();
}
int main() {
clear();
auto ahora = chrono::system_clock::now();
time_t end_time = chrono::system_clock::to_time_t(ahora);
espacio();
cout<<AZUL<<ctime(&end_time)<<RESET<<endl;
short int opcion;
string ubicacion = "/usr/sbin/ufw";
do{
cout<<"|--------------------------------------------------|"<<endl;
cout<<"|Deshabilitar y habilitar conexión [varios métodos]|"<<endl;
cout<<"|--------------------------------------------------|"<<endl;
espacio();
cout<<" - DESHABILITAR"<<endl;
espacio();
cout<<"Elija una opción (numérica): "<<endl;
espacio();
cout<<"1.Método ip config"<<endl;
espacio();
cout<<"2.Sobreescribir o crear resolv.conf con líneas vacías"<<endl;
espacio();
cout<<"3.Anular conexión con firewall ufw"<<endl;
espacio();
cout<<" - HABILITAR"<<endl;
espacio();
cout<<"4. Restablecer conexión"<<endl;
espacio();
cout<<"5. Verificar conexión"<<endl;
espacio();
cout<<"6. Salir"<<endl;
cin>>opcion;
cin.clear();
cin.ignore();
if ((opcion != 1 ) && (opcion != 2 ) && (opcion != 3 ) && (opcion != 4 ) && (opcion != 5 ) && (opcion != 6)) {
cout<<"¡!Error! Caracteres admitidos: 1, 2, 3, 4, 5, o 6";
espacio();
pausa();
clear();
}
else
{
switch(opcion){
case 1:
system("ifconfig eth0 down");
cout<<"Hecho: "<<RED<<"Conexión deshabilitada."<<RESET<<endl;
espacio();
pausa();
break;
case 2:
system("echo > /etc/resolv.conf");
espacio();
cout<<"Hecho: "<<RED<<"Archivo resolv.conf, nulo."<<RESET<<endl;
espacio();
break;
case 3:
if (archivoabuscar_existe(ubicacion))
{
cout<<VERDE<<"Programa firewall ufw está instalado."<<RESET<<endl;
espacio();
system("sudo ufw status");
espacio();
}
else
{
cout<<RED<<"El programa firewall ufw no se encuentra; será instado automáticamente..."<<RESET<<endl;
system("sudo apt install ufw -y");
}
espacio();
pausa();
espacio();
system("sudo ufw default deny outgoing");
espacio();
system("sudo ufw default deny incoming");
espacio();
cout<<"Hecho: "<<RED<<"Conexión bloqueada con ufw firewall"<<RESET<<endl;
espacio();
break;
case 4:
system("ifconfig eth0 up");
cout<<"Hecho: "<<VERDE<<"conexión habilitada."<<RESET<<endl;
espacio();
pausa();
espacio();
cout<<"Hecho: "<<VERDE<<"Archivo resolv.conf "<<RESET<<"creado."<<RESET<<endl;
espacio();
system("echo nameserver 1.1.1.1 nameserver 8.8.8.8 nameserver 8.8.4.4 > /etc/resolv.conf");
pausa();
espacio();
if (archivoabuscar_existe(ubicacion))
{
cout<<VERDE<<"Programa firewall ufw está instalado."<<RESET<<endl;
espacio();
system("sudo ufw status");
espacio();
}
else
{
cout<<RED<<"El programa firewall ufw no se encuentra; será instado automáticamente..."<<RESET<<endl;
system("sudo apt install ufw -y");
}
pausa();
espacio();
cout<<"Hecho: "<<VERDE<<"ufw conexiones entrantes y salientes permitidas"<<RESET<<endl;
espacio();
system("sudo ufw default allow outgoing");
espacio();
system("sudo ufw default allow incoming");
espacio();
break;
case 5:
cout<<"El programa está haciendo ping:"<<endl;
espacio();
system("ping -c 4 [Enlace externo eliminado para invitados]");
espacio();
pausa();
espacio();
cout<<"Archivo "<<VERDE<<"resolv.conf:"<<RESET<<endl;
espacio();
system("ls /etc/resolv.conf");
espacio();
pausa();
espacio();
cout<<VERDE<<"Contenido del archivo resolv.conf:"<<RESET<<endl;
espacio();
system("cat /etc/resolv.conf");
espacio();
pausa();
break;
case 6:
exit(0);
break;
}
}
}while(true);
return 0;
}
Omití en el condicional if del case 3 escribir las lnstrucciones del firewall ufw.
Código corregido:
Código fuente:
if (archivoabuscar_existe(ubicacion))
{
cout<<VERDE<<"Programa firewall ufw está instalado."<<RESET<<endl;
espacio();
system("sudo ufw status");
espacio();
system("sudo ufw default deny outgoing");
espacio();
system("sudo ufw default deny incoming");
espacio();
}
Código corregido:
Código fuente:
if (archivoabuscar_existe(ubicacion))
{
cout<<VERDE<<"Programa firewall ufw está instalado."<<RESET<<endl;
espacio();
system("sudo ufw status");
espacio();
system("sudo ufw default deny outgoing");
espacio();
system("sudo ufw default deny incoming");
espacio();
}