Linuxでネットマスクを取得したい。 ifconfig
で出力されますが、文字列を抽出したいです。
ここのコードがLinuxで機能することを明確にする必要があります(他のUnicesに関するコメントと投稿に注意してください)。 OPはLinuxソリューションを求めましたが、質問を「ネットマスクを取得する方法」に一般的に変更し、より多くのUnixフレーバーのための最良の方法を組み合わせて回答するのが良いでしょう。
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
./script eth0
Netstat、arp、rarp、routeなどの他の従来のネットワークコマンドに加えて、ifconfigはnet-toolsパッケージの一部です。 net-toolsは長い間積極的に開発されておらず、新しいiproute2パッケージを優先して非推奨にする努力があります。簡潔にするために、この基本的な移行の詳細が必要な場合は、関連するリンクをいくつか示します。
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
?
本当にマスクだけ欲しいのかな。たぶん、あなたは本当にネットワーク(またはIP)にマスクを付けたり、設定ファイルで使用したり、nmap
などを使用したりしたいでしょう。
その場合、Linuxでは、ip ...
コマンドの出力を解析することもできます。
CIDR表記ですべてのインターフェースとそのアドレスおよびマスクをリストするには:
ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
または、デフォルトのインターフェースに制限するには:
default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
私のマシンでは「192.168.1.61/24」になります。
マスクを16進数で出力するOSを使用している場合は、次のようにすることができます。
#!/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
デフォルトのネットワークデバイスのネットマスクを探している場合、デフォルトのデバイスはeth0ではない可能性があるため、このコマンドはデフォルトのデバイスを返します。
netdevice=$(ip r | grep default | awk '/default/ {print $5}')
そして、このコマンドはマスクを取得します:
netmask=$(ifconfig "$netdevice" | awk '/netmask/{ print $4;}')
Eliah KaganとPaulo Tomeのおかげで、答えを簡単にして明確にすることができました。私の個人用マシンでは、デフォルトのイーサネットデバイスは「wlx504654c1a91」でした。これは複雑すぎて覚えて正確に入力することができないため、2段階のプロセスでした。