ユーザーがどのネットワーク範囲にいるかを確認しますか?

ユーザーがどのネットワーク範囲にいるかを確認しますか?

私はどんなネットワークでも動作するネットワークスキャナを作っています。これがこれまでの私のコードです

fd=$(date +%m%d%y%H%M%S)
echo -e "IP$fd\nReport of IP addresses on this intranet, test started at \n$(date)\n\nThe following IP addresses were found:" > IP$fd.txt
echo -e " Okay. Mind you, this could take a couple of minutes.\nI'll be scanning all 254 possibilities between 192.168.1.1 and 192.168.1.254\nI will ring the system bell when I am done.\nHere we go..."
for i in 192.168.0.{1..254}
do
echo "scanning $i"
if [ "$(ping -q -c1 $i)" ]
then
echo -e "AHA! Got one! ---- $i is up!"
fi
echo "END SCAN"
done
echo -e "That's all I got.\Test completed at\n$(date)\n" >> IP$fd.txt
echo -e \\a
echo -e "Your report is IP$fd.txt, and this is what it says:\n"
exit

ただし、問題は、これが IP 範囲が 192.168.0.1-255 の場合にのみ機能することです。IP が 10.10.10.1 の場合は何も返されません。

ユーザーのネットワーク範囲を取得してスクリプトに適用する方法はありますか?

編集: 私はrootとして実行しています

答え1

移植可能な方法はありません。

Linux では、次のコマンドを使用して、ホストが属するすべての IPv4 サブネットを一覧表示できます。

ip -4 route show scope link | awk '{print $1}'

(注意:複数の

答え2

現在のネットワークの詳細を出力から抽出できます。ifconfig -a

そこから、for ループの変数を設定できるはずです。ドット付き 4 進数よりも整数アドレスを使用する方が簡単かもしれません。

複数のアドレス範囲があり、その一部は IPV4、一部は IPV6 です。

現在のマシンが直接接続されていない近くのネットワークを検出するには、さらに多くの作業が必要になります。

関連情報