Je veux obtenir mon masque de réseau sous Linux. Il est sorti avec ifconfig
mais je veux extraire la chaîne.
Je veux obtenir mon masque de réseau sous Linux. Il est sorti avec ifconfig
mais je veux extraire la chaîne.
Réponses:
Je dois préciser que le code fonctionne ici pour Linux, (notez les commentaires et publiez sur d'autres Unices). OP a demandé une solution Linux, mais il serait bon de changer la question en "comment obtenir un masque de réseau" en général, et d'avoir la réponse combiner la meilleure façon pour plus de saveurs Unix.
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
./script eth0
Avec d'autres commandes de mise en réseau traditionnelles comme netstat, arp, rarp et route, ifconfig fait partie du package net-tools . Net-tools n'a pas été activement développé depuis très longtemps et des efforts sont déployés pour le déprécier en faveur du nouveau package iproute2 . Par souci de concision, si vous souhaitez plus de détails sur cette transition fondamentale, voici quelques liens pertinents:
Page de manuel de net-tools ifconfig (voir la section BUGS)
Analyse et comparaison des frameworks du point de vue des utilisateurs
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
?
/sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'
/sbin/ifconfig eth0 | awk '/netmask/{print $4}'
Je me demande si tu ne veux vraiment que le masque. Peut-être que vous voulez vraiment que le réseau (ou IP) avec masque soit utilisé dans les fichiers de configuration, avec nmap
ou autre.
Dans ce cas, sous Linux, vous pouvez également analyser la sortie de la ip ...
commande.
Pour répertorier toutes les interfaces avec leur adresse et leur masque en notation CIDR:
ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
Ou pour le restreindre à l'interface par défaut:
default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
ce qui me donne "192.168.1.61/24" sur ma machine.
ip -o -f inet addr show scope global
et ip route list default
.
si vous utilisez un système d'exploitation qui génère le masque en hexadécimal, vous pouvez faire quelque chose comme:
#!/usr/bin/bash
# read the mask, and strip leading 0x if it's there
hexmask=$( echo $1 | sed -e 's/^0x//' )
# loop through $hexmask in pairs
#
for (( i=0; i<${#hexmask}; i+=2 )); do
if (( $i > 1 )); then
# use a . to separate octets
# but don't print a leading .
printf "%s" "."
fi
printf "%d" "0x${1:$i:2}"
done
printf "\n"
/sbin/ifconfig eth0 | grep Mask | cut -d":" -f4
awk
ce qui n'est pas le cas dans la vraie vie ifconfig
. Je suggère quelques modifications cependant: ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2
. Le -o
afin que grep
ne renvoie qu'une partie de la ligne plutôt que l'ensemble du lot (plus efficace). Faites correspondre les caractères non blancs ( [^\s]*
) pour trouver la fin du jeton de masque de réseau. Des guillemets simples autour du délimiteur de champ pour plus de sécurité.
/sbin/ifconfig | grep ask | sed -e 's/.*netmask //g' | sed -e 's/ .*//g'
le masque en hexadécimal.
Si vous recherchez le masque de réseau pour le périphérique réseau par défaut, cette commande renvoie le périphérique par défaut car le périphérique par défaut n'est peut-être pas eth0
netdevice=$(ip r | grep default | awk '/default/ {print $5}')
Et cette commande récupère le masque:
netmask=$(ifconfig "$netdevice" | awk '/netmask/{ print $4;}')
Merci à Eliah Kagan et Paulo Tome qui m'ont aidé à la fois à simplifier et à clarifier la réponse. Sur ma machine personnelle, le périphérique Ethernet par défaut était "wlx504654c1a91", ce qui était beaucoup trop compliqué à mémoriser et à taper avec précision, d'où le processus en deux étapes.
grep 'pattern' | awk '{ action }'
peut généralement être réduit àawk '/pattern/ { action }'
ifconfig
ligne de masque de réseau de FreeBSD est :,inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255
donc bien que les réponses puissent être facilement ajustées, il n'y a probablement pas de solution universelle (en utilisant Bash / ifconfig uniquement) .