Contenu | Rechercher | Menus

Annonce

Ubuntu-fr vend de superbes t-shirts et de belles clés USB 32Go
Rendez-vous sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/02/2020, à 05: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, à 10:06)

Hors ligne

#2 Le 19/02/2020, à 08: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, à 12:40)

Hors ligne

#3 Le 19/02/2020, à 18: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, à 19: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, à 20: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, à 09: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, à 02:53)

Hors ligne

#7 Le 20/02/2020, à 10:52

cqfd93

Re : script pour changer un addresse dhcp en static

biker870 a écrit :

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

En ligne

#8 Le 20/02/2020, à 18: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 wink

Hors ligne

#9 Le 20/02/2020, à 20: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, à 20: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

Hors ligne

#11 Le 20/02/2020, à 22: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 smile

Hors ligne

#12 Le 21/02/2020, à 03:02

MicP

Re : script pour changer un addresse dhcp en static

Hors ligne

#13 Le 21/02/2020, à 05: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, à 14:32)

Hors ligne

#14 Le 24/02/2020, à 12:42

MicP

Re : script pour changer un addresse dhcp en static

Hors ligne