このスクリプトはどのようにIPアドレスをランダムに生成しますか?

このスクリプトはどのようにIPアドレスをランダムに生成しますか?

誰かが以下のコードがどのように機能するかを説明できますか? IPアドレスをランダムに生成することはわかっていますが、どのように生成されるのかわかりません。

while
  set $(dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1)
  [ $1 -lt 224 ] &&
  [ $1 -ne 10 ] &&
  { [ $1 -ne 192 ] || [ $2 -ne 168 ]; } &&
  { [ $1 -ne 172 ] || [ $2 -lt 16 ] || [ $2 -gt 31 ]; }
do :; done
ip_address=$1.$2.$3.$4

ベストアンサー1

注文する

dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1

類似データの生成

     251 113 126 026

ddデバイスから4バイトの読み込みを要求しurandom、それぞれ1バイトの一連の符号なし整数に変換しますod

setこれは、位置引数$(...)とともにコマンド置換()を介して渡され、整数に設定されます。set$1$2$3$4

その後、これらの整数に対していくつかのチェックが実行され、テストの1つが失敗するまでループが続きます。ループ本文の内容には:作業がなく、シェルの構文を満たすだけです。


任意のIPアドレスを生成する別の方法(個人アドレスの範囲内ではない):

$ nmap -n -iR 10 -sL | awk '/report for/ { print $NF }'
221.37.208.42
121.3.97.158
203.225.119.103
145.139.220.88
95.153.25.126
149.73.57.221
165.178.177.39
11.187.21.175
175.211.240.124
130.89.42.47

おすすめ記事