Se connecter au réseau avec le shell.
2021-02-13
Aujourd’hui un peu de bash pour tenter de maîtriser nôtre connection au réseau.
Alors, voici la réflexion du jour : pourquoi rajouter une couche UI pour quelque chose que l’on peut faire avec des outils deja conçus et qui respectent la philosophie Unix? Et bien il y a des gens qui en ont besoin, mais si vous êtes la c’est que ce n’est pas le cas.
Suivant la tactique qui suggere d’utiliser mois de programmes, car du coup moins de trous, on va tenter de mettre les mains dans le cambouis.
La logique est d’utiliser ip
La suggestion pour commencer == man ip
Je tiens a préciser que j’ai déjà configuré une adresse ip statique au niveau de mon routeur. J’ai habillé un peu mon script avec des jolis couleurs et je suis un apprenti comme tout le monde…
On va dans un prémier temps tenter de recupèrer le nom de nôtre interface réseau dans la variable DEVICE et puis on execute en tant que root.
En bonus à la fin j’ai commenté la recuperation de l’ip publique, mais c’est un bon plan si vous en avez besoin.
Effectivement je met des commentaires en espagnol, j’aime bien me rappeller ma langue maternelle. Après des discours de presentation je vous laisse deguster la chose :
1#! /bin/bash
2# Connectar el dispositivo a la red.
3
4SUCCES=0
5IP=192.168.1.18
6DEVICE=$(ip link show | grep "altname" | awk '{print $NF}')
7
8# Colors
9RED=$(printf '\033[31m')
10BLUE=$(printf '\033[34m')
11BOLD=$(printf '\033[1m')
12RESET=$(printf '\033[m')
13BELL=$(printf '\a')
14
15function title(){
16 echo ""
17 echo "$BLUE❯ $1$RESET"
18}
19
20function yes_or_no() {
21 while true; do
22 read -p "$* [y/n]: " yn
23 case $yn in
24 [Yy]*) return 0 ;;
25 [Nn]*) echo "Proceso anulado." ; exit $SUCCES ;;
26 esac
27 done
28}
29
30echo "==========================================================================="
31echo " $RED>>> NETWORK CONFIGURATION <<<$RESET "
32echo "==========================================================================="
33
34if [ "$EUID" -ne 0 ]; then
35 echo $BELL
36 echo "$RED Ejecute el script con sudo.$RESET"
37 echo "La IP sera 192.168.1.18 puede cambiarla pasandosela en parametro (ipv4)"
38 echo "El router debe haber asignado la ip estaticamente."
39 echo
40 exit
41fi
42
43if [ -z $1 ]; then
44 echo "La direccion IP de la maquina sera : $IP";
45 yes_or_no
46else
47 echo "La direccion IP de la maquina sera : '$1'";
48 yes_or_no
49 IP=$1
50fi
51
52title "Activando el dispositivo $BOLD$DEVICE"
53
54function validCmd(){
55$1
56if [ $? -eq 0 ]; then
57 echo "procesando ..."
58else
59 echo "$RED:($RESET fallo inesperado con el comando $1"
60fi
61sleep 2
62}
63
64sudo ip link set dev $DEVICE up
65validCmd "ip addr flush dev $DEVICE"
66
67title "Connectandose a la red local..."
68validCmd "sudo ip addr add $IP/24 dev $DEVICE"
69validCmd "ping -c3 192.168.1.1"
70
71title "Connectandose a internet..."
72validCmd "sudo ip route add default via 192.168.1.1 dev $DEVICE"
73
74sleep 1
75
76validCmd "ping -c3 1.1.1.1"
77i3-msg -q restart # refresh i3
78
79#ip=$(curl -s https://api.ipify.org)
80#echo "Conectado con la ip : $RED$ip$RESET"
81
82title "Terminado exitosamente."
83exit $SUCCES
Biensûr on peut faire plus court :
1#!/bin/bash
2# Connecte seulement sur le reseau local.
3
4IP=192.168.1.18
5DEVICE=$(ip link show | grep "altname" | awk '{print $NF}')
6
7sudo ip link set dev $DEVICE up
8sudo ip addr add $IP/24 dev $DEVICE
9sleep 3
10ping -c3 192.168.1.1
11
12exit 0
Pour rester sur le réseau local sans toucher aux routes.
J’éspere que cela vous sera utile, pour moi ça le fait ;)
Mes dotfiles si vous aimez, vous en trouverez d’autres ici.