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.



More posts like this