Je veux obtenir mon masque de réseau sous Linux. Il est sorti avec ifconfigmais je veux extraire la chaîne.
Je veux obtenir mon masque de réseau sous Linux. Il est sorti avec ifconfigmais 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 nmapou 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 globalet 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
awkce 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 -oafin que grepne 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 }'
ifconfigligne de masque de réseau de FreeBSD est :,inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255donc bien que les réponses puissent être facilement ajustées, il n'y a probablement pas de solution universelle (en utilisant Bash / ifconfig uniquement) .