Ifconfig et passage de debian 8 a debian 9

Hello à toutes et tous,
J’ai trouvé un script sous Debian 8 pour récupérer l’adresse ip de l’interface eth0.
Il fonctionne très bien :stuck_out_tongue:

Mais j’ai passé ma carte tinkerboard sous Debian 9 et le ifconfig a change :

root@diagbox:~# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.52  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2e4d:54ff:fe43:34dd  prefixlen 64  scopeid 0x20<link>
        ether 2c:4d:54:43:34:dd  txqueuelen 1000  (Ethernet)
        RX packets 325181  bytes 431503077 (411.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 125790  bytes 151664286 (144.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 44

Et voici le script :

                 #!/bin/bash
ifconfig eth0 | grep 'inet addr: ' | cut -d: -f2 | awk '{ print $1}' >/diagbox/web/tmp/ip.txt    

Je n’arrive pas à adapter le script au nouveau ifconfig.
J’ai essayé de ne mettre que inet au lieu de inet adres mais ca ne fonctionne pas.

je ne comprends pas le ct -d: -f2

Est ce que quelqu’un pourrait m’expliquer? :slight_smile:
Je pourrais aussi adapter le script pour récupérer l’adresse mac

Merci d’avance

ifconfig n’est plus, mieux vaudrait effectivement utiliser ip addr show eth0.

Si tu cherche à extraire l’IP en bash tu doit pouvoir faire ça avec un :

ip addr show eth0 | grep inet | tr -s ' ' | cut -d ' ' -f 3

Maintenant si tu possède plusieurs interfaces cela va te remonter toutes les IPs

Si tu ne veux que la première ligne, en règle générale eth0 si il n’y a pas de wifi ajoute un head -n1 en bout de ligne.

1 J'aime

@Clochette: Malheureusement, c’est vrai… mais tu pars du principe que l’interface se nomme ‘eth0’… Or, hormis d’avoir reconfigurer sa Debian, ce nommage n’est plus vrai par défaut !

Voici ma proposition :

@domoticity: Sachant que si tu fais : ip link - cela te restituera toutes les interfaces réseaux sur ta machine, qu’elles soient connectées à un réseau ou non !
Tu en auras - normalement au moins deux - celle de bouclage locale, et celle communiquant sur un réseau ethernet - qu’elle soit Wifi ou de lien physique. Bien-sûr, tu peux en avoir plus selon ta configuration.

Normalement :

  • la première est l’interface de bouclage ‘lo’
  • la deuxième est l’interface RJ45, si tu en as une - et, admettons que ce soit le cas…

Le script :

iface=2
family=inet
addr="$(ip addr show "$(ip link | awk -F': ' '/ '"${iface}"':/ { print $2 }' | head -n1)" | awk -F' ' '/'"${family}"' / { print $2}')"
echo "${addr:0:-3}" # on enlève les trois derniers caractères, car reçu en notation CIDR...

En version, un peu plus facile à lire :

nb=2
family=inet
iface="$(ip link | awk -F': ' '/ '"${nb}"':/ { print $2 }' | head -n1)"
addr="$(ip addr show "${iface}" | awk -F' ' '/'"${family}"' / { print $2 }')"
mac="$(ip addr show "${iface}" | awk -F' ' '/link\/ether/ { print $2 }')"
echo "${addr:0:-3}" 
echo "${mac}"

Dans le premier cas, je ne restitue pas la recherche sur l’adresse mac… mais il suffit d’adapter le deuxième exemple au premier si besoin !


Déjà, c’est ‘cut’ et non ‘ct’… ensuite, c’est une commande qui comme son nom anglais l’indique permet de couper une chaîne de caractère, selon un séparateur défini…
Là, elle coupe la chaîne reçue, selon le séparateur ‘:’, et elle restitue le deuxième champ…

Un man cut dans ton terminal préféré t’en apprendra plus ! :wink:

Salut
l’@ip est visible directement dans ip ad

 ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 98:4b:e1:c6:c4:7b brd ff:ff:ff:ff:ff:ff
3: wlp3s0b1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1492 qdisc mq state UP group default qlen 1000
    link/ether cc:52:af:5a:a2:b5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.68/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp3s0b1
       valid_lft 84641sec preferred_lft 84641sec

Il ne demande pas comment est-elle visible, mais comment on la récupère !!!


J’aurais eu la possibilité de te mettre un ‘-1’, tu l’aurais gagné ! :wink:

c’est surtout que je ne vois pas l’interet de passer par ip link, tout est dans ip ad pour un expert en code dans ton genre ça doit etre facile

De toute façon, tu vas être obligé de récupérer une première fois le nom de l’interface réseau, en question.

Il est vrai que ip ad permet de voir tes adresses réseaux… mais ip link est LA commande pour connaître le nom de tes interfaces…
Sans parler que @Clochette a parlé - à juste titre de ip addr show...

À toi de voir, perso, je le propose ainsi et selon le manpage ‘‘ip’’ !

une piste ip ad | egrep '"state UP" | inet'

c’est cadeau.

root@debian:/# ip ad | egrep '"state UP" | inet'
    inet 127.0.0.1/8 scope host lo
    inet 192.168.1.68/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp3s0b1
root@debian:/# 

et avec cut considérant que l’@ip est affichée des colonnes 9 à 21

ip ad | grep -i "state UP" -A2 | grep inet | cut -c9-21

root@debian:/# ip ad | grep -i "state UP" -A2 | grep inet | cut -c9-21
 192.168.1.68
root@debian:/# 

Merci à toutes et tous pour vos messages.
JE vais essayer toutes les méthodes proposées.
en tout cas mille foi merci encore. :slight_smile:

1 J'aime

Quelque soit la méthode que tu utilises, le tout est surtout que tu comprennes de quoi il retourne et comment faire… :wink:

C’est ce qui est intéressant avec ce forum, beaucoup de personnes interavissent, donnent des conseils et leur méthode. Et in apprend énormément ainsi :slight_smile: j’ai utilisé la méthode de clochette qui me sort mon iPhone avec le masque de sous réseau sœur forme 192.168.1.10/24
Merci à toutes et tous encore.
Maintenant je vais me penser sur la fonction cut lol