2 votes

La "bonne" façon d'obtenir UNIQUEMENT mon masque de réseau eth0 via CLI dans Ubuntu 18.04 sur VPS ?

Selon cette réponse et de nombreux autres tutoriels sur le web, ifconfig vous trouverez de nombreuses informations fascinantes et utiles. Et, cela semble être le moyen standard pour trouver des choses comme mon masque de réseau.

Mais, pour les scripts, j'ai besoin uniquement le masque de réseau lui-même pour eth0 ; et man ifconfig n'a pas été utile pour cette question.

J'utilise un VPS, donc je n'ai pas le contrôle de mon masque de réseau ; j'ai besoin de découvrir sur lequel il a été réglé.

(Note : Bien que j'aie besoin eth0 certaines machines peuvent en avoir une autre, disons eth1 o ens3 qui serait également utile).

  • Je le fais. no a besoin de la ligne entière dans laquelle se trouve le masque de réseau :

inet 111.222.333.444 netmask 255.255.255.0 broadcast 111.222.555.666

  • I veulent éviter une méthode "hackdoor", comme obtenir netmask 255.255.255.0 puis en cours d'exécution sed "s/netmask //" parce que les choses peuvent changer. à moins qu'un expert ne le dise

3voto

pa4080 Points 27038

C'est probablement ce dont vous avez besoin (notez que cela ne fonctionnera pas sur Ubuntu 16.04) :

#!/bin/bash
IFACE='eth0'
ifconfig | grep -A 7 "$IFACE" | sed -nr 's/^.*netmask\s([0-9\.]+)\s\sbroadcast.*$/\1/p'

Dans la première ligne, le nom de l'interface réseau est assigné comme valeur de la variable $IFACE - c'est utile pour les scripts, sinon vous pouvez utiliser grep -A 7 'eth0' .

Sur la deuxième ligne, la sortie de la commande ifconfig sera acheminé vers le grep où l'option -A 7 affichera les 7 lignes suivantes après la ligne contenant la chaîne/explication correspondante. La sortie de cette commande sera envoyée à sed .

Dans le cadre de la sed commandement :

  • l'expression régulière ^.*netmask\s(.*)\s\sbroadcast.*$ correspondra à la ligne entière, du début à la fin. ^ jusqu'à la fin $ qui contient des caractères .* et les "mots-clés" netmask\space , [0-9\.]+ y \s\sbroadcast dans cet ordre précis ;

  • cette ligne sera substituée ( s/old/new/ ) avec le contenu du premier groupe de capture [ (.*) -> \1 ], où le regexp [0-9\.]+ correspondra aux chaînes de caractères qui sont composées de chiffres et de points ;

  • l'option -r (ou -E ) activera les expressions régulières étendues, ce qui, dans ce cas, nous permettra d'utiliser librement les parenthèses rondes ;

  • l'option -n avec la combinaison du drapeau p avec la sortie uniquement de la ligne correspondante et conservera le reste de la sortie de sed .


Voici un exemple étendu qui analysera les noms de toutes les interfaces réseau et fera la même chose que la commande ci-dessus pour chacune d'entre elles :

for IFACE in $(ifconfig | sed -nr 's/(^[a-z0-9]+):.*/\1/p'); do \
    echo -en "${IFACE}:\t"; ifconfig | \
    grep -A 7 "$IFACE" | \
    sed 's/  broadcast.*$//' | \
    sed -rn 's/^.*netmask (.*)$/\1/p'; \
done

Exemple de sortie de la commande ci-dessus exécutée sur une machine virtuelle avec Ubuntu 18.04 :

$ for IFACE in $(ifconfig | sed -nr 's/(^[a-z0-9]+):.*/\1/p'); do echo -en "${IFACE}:\t"; ifconfig | grep -A 7 "$IFACE" | sed 's/..broadcast.*$//' | sed -rn 's/^.*netmask (.*)$/\1/p'; done
ens33:  255.255.255.0
lo:     255.0.0.0

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X