lunarviews
lunarviews

| Home | Posts | Codes | About |

  ⎘   Se connecter au réseau avec le shell.

allo !!!

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
 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
#! /bin/bash
# Connectar el dispositivo a la red.

SUCCES=0
IP=192.168.1.18
DEVICE=$(ip link show | grep "altname" | awk '{print $NF}')

# Colors
RED=$(printf '\033[31m')
BLUE=$(printf '\033[34m')
BOLD=$(printf '\033[1m')
RESET=$(printf '\033[m')
BELL=$(printf '\a')

function title(){
  echo ""
  echo "$BLUE$1$RESET"
}

function yes_or_no() {
  while true; do
    read -p "$* [y/n]: " yn
      case $yn in
        [Yy]*) return 0  ;;  
        [Nn]*) echo "Proceso anulado." ; exit $SUCCES ;;
      esac
  done
}

echo "==========================================================================="
echo "                       $RED>>> NETWORK CONFIGURATION <<<$RESET                       "
echo "==========================================================================="

if [ "$EUID" -ne 0 ]; then
    echo $BELL
    echo "$RED Ejecute el script con sudo.$RESET"
    echo "La IP sera 192.168.1.18 puede cambiarla pasandosela en parametro (ipv4)"
    echo "El router debe haber asignado la ip estaticamente."
    echo
    exit
fi

if [ -z $1 ]; then 
  echo "La direccion IP de la maquina sera : $IP";
  yes_or_no
else 
  echo "La direccion IP de la maquina sera : '$1'"; 
  yes_or_no
  IP=$1
fi

title "Activando el dispositivo $BOLD$DEVICE"

function validCmd(){
$1
if [ $? -eq 0 ]; then
  echo "procesando ..."
else
  echo "$RED:($RESET fallo inesperado con el comando $1"
fi
sleep 2
}

sudo ip link set dev $DEVICE up
validCmd "ip addr flush dev $DEVICE"

title "Connectandose a la red local..."
validCmd "sudo ip addr add $IP/24 dev $DEVICE"
validCmd "ping -c3 192.168.1.1"

title "Connectandose a internet..."
validCmd "sudo ip route add default via 192.168.1.1 dev $DEVICE"

sleep 1

validCmd "ping -c3 1.1.1.1" 
i3-msg -q restart # refresh i3
 
#ip=$(curl -s https://api.ipify.org)
#echo "Conectado con la ip : $RED$ip$RESET"

title "Terminado exitosamente."
exit $SUCCES

Biensûr on peut faire plus court :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash 
# Connecte seulement sur le reseau local.

IP=192.168.1.18
DEVICE=$(ip link show | grep "altname" | awk '{print $NF}')

sudo ip link set dev $DEVICE up
sudo ip addr add $IP/24 dev $DEVICE
sleep 3
ping -c3 192.168.1.1

exit 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.

---