#1 Le 19/02/2020, à 04:55
- biker870
script pour changer un addresse dhcp en static
bonjours je suis entrain de faire un script bash pour prendre mon addresse donner par mon dhcp et la rendre static il faut ke se cript marche ubuntu et centos
j'ai deja fait un script prend laddresse ip le gateway le dns et le broadcast en variable mais jaimerais ke se script inject tout sa dans les fichier ou il y a lieu en mettant les variable au bonne palce dans le bon fichier pouvez vous maider
voici le script:
#!/bin/bash
echo
echo
echo
echo
echo
echo "bonjour" $USER
echo
echo
echo
echo
#verifier la distribution
distribution=$(grep PRETTY_NAME /etc/os-release | sed 's/PRETTY_NAME=//g' | tr -d '="')
echo "votre distribution:" $distribution
echo
echo
echo
#afficher les address deja configurer dans le dhcp
addr="$(ifconfig ens33 | awk '/inet / { print substr($2,1) }')"
bcst="$(ifconfig ens33 | awk '/inet / { print substr($6,1) }')"
mask="$(ifconfig ens33 | awk '/inet / { print substr($4,1) }')"
gateway="$(ip r | awk '/^def/{print $3}')"
dns="$(cat /etc/resolv.conf | grep ^nameserver| tr -d [:alpha:] | tr -s [:space:] | cut -d: -f2)"
echo
echo "votre addresse ipv4 est :" $addr
echo "votre addresse Broadcast est :" $bcst
echo "votre masque reseau est :" $mask
echo "votre gateway est :" $gateway
echo "votre DNS est: " $dns
echo BOOTPROTO=static>/tmp/scenario.conf
echo IPADDR=$addr>>/tmp/scenario.conf
echo NETMASK=$mask>>/tmp/scenario.conf
echo GATEWAY=$gateway>>/tmp/scenario.conf
echo DNS1=$dns>>/tmp/scenario.conf
echo
echo
echo "est-ce que vous confirmer les addresse?"
echo
echo
select i in oui non; do
if [ "$i" = "oui" ]; then
echo "les addresse sont sauvegarder"
if [ $distribution=$(grep “^U”)]
then
/tmp/scenario.conf>>/etc/network/interfaces/
fi
if [$distribution=$(grep “^C”)]
then
/tmp/scenario.conf>>/etc/sysconfig/network-scripts/ifcfg-$NETDEV
fi
break
elif [ "$i" = "non" ]; then
echo "vous avez canceller l operation "
break
else
echo "mauvaise reponse"
fi
done
et jaimerais que mes variable prennent place au endroit suivante
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=$ipaddr
NETMASK=$mask
GATEWAY=$gateway
DNS1=$dns
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=3ab194e5-7622-4ada-836f-01b2a217d7a3
DEVICE=ens33
ONBOOT=yes
merci de votre aide d'avance
Modération : merci d'utiliser les balises code (explications ici).
Et la langue du forum est le français, pas le SMS.
Dernière modification par cqfd93 (Le 19/02/2020, à 09:06)
Hors ligne
#2 Le 19/02/2020, à 07:06
- MicP
Re : script pour changer un addresse dhcp en static
Bonjour biker870
Quelques simplifications
pour éviter d'avoir à utiliser les commandes externes awk grep tr cut
Un premier Extrait :
if="ens33" # Interface réseau
# La distribution
distribution=$(lsb_release -ds)
# Adresses déjà configurées dans le DHCP
maReg='inet ([0-9.]*)\/([0-9]*) brd ([0-9.]*)'
[[ $(ip -4 a show $if) =~ $maReg ]]
addr=${BASH_REMATCH[1]}
mask=${BASH_REMATCH[2]}
bcst=${BASH_REMATCH[3]}
maReg='default via ([0-9.]*)'
[[ $(ip r) =~ $maReg ]]
gateway=${BASH_REMATCH[1]}
maReg='nameserver ([0-9.]*)'
[[ $(< /etc/resolv.conf) =~ $maReg ]]
dns=${BASH_REMATCH[1]}
##########
# Affichage
echo -e "\n\n\n\n\n"
echo "Bonjour $USER"
echo -e "\n\n\n"
echo "Votre distribution : $distribution"
echo -e "\n\n\n"
echo -e "Votre adresse ipv4 est :\t$addr"
echo -e "Votre adresse Broadcast est :\t$bcst"
echo -e "Votre masque réseau est :\t$mask"
echo -e "Votre gateway est :\t\t$gateway"
echo -e "Votre DNS est :\t\t\t$dns"
Pour la suite, j'ai pas encore pris le temps.
Dernière modification par MicP (Le 24/02/2020, à 11:40)
Hors ligne
#3 Le 19/02/2020, à 17:01
- biker870
Re : script pour changer un addresse dhcp en static
ayoye merci bcp mieux
mais juste une petite question pour le mask il dois pas etre en addr ip genre et non en nombre pour l'incorporé dans le dossier de configuration ?
Hors ligne
#4 Le 19/02/2020, à 18:54
- LeoMajor
Re : script pour changer un addresse dhcp en static
bonjour,
utilise la méthode de réservation d'adresse ip, par rapport à l'adresse hexadécimale de la carte réseau (appelée aussi adresse matérielle, adresse MAC, HWaddr (ifconfig, ...) . C'est plus simple et plus efficace. Sur la machine elle-même, il n'y a rien à faire. Tout se passe sur ta box, modem-routeur (onglet voisin du dhcp, bail, baux, ...). Le dhcp reste sur ta box en automatique.
Tu auras un onglet qui va ressembler à
host1 ip demandé
ab8bcb5dff94 192.168.1.6
idéalement, tu le fais avec 2 machines, une éteinte (host 1) et l'autre (host 2) qui va renseigner la box, à propos de host1. Au moins, tu mets les ip que tu veux.
cela fonctionne pour le wifi, et ethernet.
Hors ligne
#5 Le 19/02/2020, à 19:24
- biker870
Re : script pour changer un addresse dhcp en static
oui je comprend cela mais y me le faut absolument en script bash dsl
Hors ligne
#6 Le 20/02/2020, à 08:52
- MicP
Re : script pour changer un addresse dhcp en static
Bonjour
J'ai récupéré la fonction cidr2mask toute faite dans ce message
#!/bin/bash
if="ens33" # interface réseau concernée
##########################
# Fonction "cidr to netmask"
# https://www.linuxquestions.org/questions/programming-9/bash-cidr-calculator-646701/#post3433298
cidr2mask() {
local i mask=""
local full_octets=$(($1/8))
local partial_octet=$(($1%8))
for ((i=0;i<4;i+=1)); do
if [ $i -lt $full_octets ]; then
mask+=255
elif [ $i -eq $full_octets ]; then
mask+=$((256 - 2**(8-$partial_octet)))
else
mask+=0
fi
[ $i -lt 3 ] && mask+=.
done
echo $mask
}
##############################
# Récupération des informations
# La distribution
distribution=$(lsb_release -ds)
# Adresses déjà configurées dans le DHCP
maReg='inet ([0-9.]*)\/([0-9]*) brd ([0-9.]*)'
[[ $(ip -4 a show $if) =~ $maReg ]]
addr=${BASH_REMATCH[1]}
mask=$(cidr2mask ${BASH_REMATCH[2]})
bcst=${BASH_REMATCH[3]}
maReg='default via ([0-9.]*)'
[[ $(ip r) =~ $maReg ]]
gateway=${BASH_REMATCH[1]}
maReg='nameserver ([0-9.]*)'
[[ $(< /etc/resolv.conf) =~ $maReg ]]
dns=${BASH_REMATCH[1]}
##########
# Affichage
echo -e "\n\n\n\n\n"
echo "Bonjour $USER"
echo -e "\n\n\n"
echo "Votre distribution : $distribution"
echo -e "\n\n\n"
echo -e "Votre addresse ipv4 est :\t$addr"
echo -e "Votre addresse Broadcast est :\t$bcst"
echo -e "Votre masque reseau est :\t$mask"
echo -e "Votre gateway est :\t\t$gateway"
echo -e "Votre DNS est :\t\t\t$dns"
Dernière modification par MicP (Le 21/02/2020, à 01:53)
Hors ligne
#7 Le 20/02/2020, à 09:52
- cqfd93
Re : script pour changer un addresse dhcp en static
oui je comprend cela mais y me le faut absolument en script bash dsl
Modération − Rappel : merci de respecter la langue du forum qui est le français, pas le SMS.
− cqfd93 −
Hors ligne
#8 Le 20/02/2020, à 17:51
- bruno
Re : script pour changer un addresse dhcp en static
Bon c'est quoi l’intérêt de ce script ? Je ne comprends vraiment pas à quoi cela peut servir…
Sinon merci à MicP qui m'a fait découvrir BASH_REMATCH
#9 Le 20/02/2020, à 19:10
- biker870
Re : script pour changer un addresse dhcp en static
Le but de ce script d’être sur le même réseau sans avoir de bail a renouveler et d'avoir un d’adresse fixe sur le réseau détecter par Ubuntu ou Centos
Hors ligne
#10 Le 20/02/2020, à 19:43
- bruno
Re : script pour changer un addresse dhcp en static
Je ne comprends toujours pas…
Les baux se règlent sur le serveur DHCP : leur durée, s'ils sont statiques (en fonction de l'adresse MAC) ou dynamiques. Avec des baux statiques les machines ont des adresses IPv4 fixes. Dans ce cas le script ne sert à rien ou alors je n'ai rien compris.
L'autre manière d'avoir des IP fixes et de modifier les paramètres réseau avec une IP statique plutôt que fournie par le serveur DHCP. Dans ce cas là non plus je ne vois pas l'utilité du script.
Sinon tu as déjà , grâce à MicP, une grande partie du travail de fait :
- détection de la distribution ;
- récupération de l'adresse IPv4 courante et du masque de sous-réseau ;
- récupération de la passerelle;
- pour les résolveurs regarder le contenu de /etc/resolv.conf ne sert à rien sous Ubuntu : tu vas obtenir 1270.0.1 ou 127.0.0.53 et non l'adresse des résolveurs en amont.
Il ne reste plus qu'a injecter les valeurs récupérées dans un fichier de configuration. Mais dans quelle configuration ? Celle de NetworkManger ? De /etc/interfaces ? De systemd-networkd ? De netplan ?
Et dans CentOS se sera encore différent: soit /etc/sysconfig/network et /etc/sysconfig/network-scripts/ifcg-nom_interface, soit systemd-networkd et ses fichiers sous /etc/systemd/network
#11 Le 20/02/2020, à 21:27
- biker870
Re : script pour changer un addresse dhcp en static
merci de ton aide
moi ce script c'est des travaux que je fais pour automatiser des tache en bash pour apprendre bash une peu je suis dans un cours de programmation c#, Powershell, bash et python et je suis en période apprentissage j adore voir comment les professionnel mais je regarde vos code et j apprend beaucoup grâce a vous merci si tu aurais vue mon premier code bien je crois qui est plus haut j'ai fais beaucoup de chemin grâce MicP il est très professionnelle
j adore voir vos comment faire sa d'une autre manière j apprend beaucoup grâce a ce forum
Hors ligne
#12 Le 21/02/2020, à 02:02
- MicP
Re : script pour changer un addresse dhcp en static
Hors ligne
#13 Le 21/02/2020, à 04:49
- krodelabestiole
Re : script pour changer un addresse dhcp en static
le truc c'est qu'avec ta technique tu vas te retrouver avec des IPs dans le range des IPs attribuées automatiquement en DHCP, donc risque d'avoir plusieurs machines qui utilisent la même adresse et de là divers problèmes réseau.
bref c'est une technique à éviter absolument.
le plus simple c'est de mettre des baux à durée illimité sur ton serveur DHCP (box / routeur).
ou sinon si tu veux organiser plus finement tes adresses d'attribuer des baux statiques en dehors du range DHCP depuis ta box (en fonction des adresses MAC de chaque machine).
et sinon effectivement configurer des IP statiques sur chaque machine (ça peut avoir certains intérêts mais c'est plus de boulot et la config n'est plus du tout centralisée), mais bien en dehors du range DHCP.
Dernière modification par krodelabestiole (Le 21/02/2020, à 13:32)
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
En ligne
#14 Le 24/02/2020, à 11:42
- MicP
Re : script pour changer un addresse dhcp en static
Pour la suite,
Ça se joue par là -> https://www.debian-fr.org/t/mettre-une- … leau/81272
et par là aussi -> https://www.debian-fr.org/t/injection-d … atic/81290
Hors ligne