ipv6 サブネットを構築する単純な for ループスクリプト

ipv6 サブネットを構築する単純な for ループスクリプト

/ 119 IPv6ネットワークをスキャンするためにnmapを使用しようとしています。 (アドレス512個)。これを行う前に、その範囲内のすべてのIPアドレスでいっぱいのファイルを作成したいと思います。ネットワーク情報は次のとおりです。

network 2607:f4a0:3:0:250:56ff:feac:3c00
Prefix length   119
network range   2607:f4a0:0003:0000:0250:56ff:feac:3c00-
                2607:f4a0:0003:0000:0250:56ff:feac:3dff

だから私は次のようにスクリプトを設定しました。

[root@ns1 ~]# for i in {1..512}; do printf "2607:f4a0:3:0:250:56ff:feac:3c00%x\n" $i >> ipv6.txt; done

ファイルにはすべて上記の範囲内にある512のアドレスがあると予想されます。しかし、私が見るのはこれです:

2607:f4a0:3:0:250:56ff:feac:3c001
2607:f4a0:3:0:250:56ff:feac:3c002
2607:f4a0:3:0:250:56ff:feac:3c003
2607:f4a0:3:0:250:56ff:feac:3c004
2607:f4a0:3:0:250:56ff:feac:3c005
2607:f4a0:3:0:250:56ff:feac:3c006
2607:f4a0:3:0:250:56ff:feac:3c007
2607:f4a0:3:0:250:56ff:feac:3c008
2607:f4a0:3:0:250:56ff:feac:3c009
2607:f4a0:3:0:250:56ff:feac:3c00a
2607:f4a0:3:0:250:56ff:feac:3c00b
2607:f4a0:3:0:250:56ff:feac:3c00c
2607:f4a0:3:0:250:56ff:feac:3c00d
2607:f4a0:3:0:250:56ff:feac:3c00e
2607:f4a0:3:0:250:56ff:feac:3c00f
2607:f4a0:3:0:250:56ff:feac:3c0010
2607:f4a0:3:0:250:56ff:feac:3c0011
2607:f4a0:3:0:250:56ff:feac:3c0012
2607:f4a0:3:0:250:56ff:feac:3c0013
2607:f4a0:3:0:250:56ff:feac:3c0014
2607:f4a0:3:0:250:56ff:feac:3c0015
2607:f4a0:3:0:250:56ff:feac:3c0016
2607:f4a0:3:0:250:56ff:feac:3c0017
2607:f4a0:3:0:250:56ff:feac:3c0018
2607:f4a0:3:0:250:56ff:feac:3c0019
2607:f4a0:3:0:250:56ff:feac:3c001a
2607:f4a0:3:0:250:56ff:feac:3c001b
2607:f4a0:3:0:250:56ff:feac:3c001c

nmapを実行するとエラーが発生します。

nmap -Pn -sT -p 22 -6 -iL ipv6.txt > ipv6up

間違い:

Failed to resolve given IPv6 hostname/IP:    2607:f4a0:3:0:250:56ff:feac:3c00200.  Note that you can't use '/mask' or   '[1-4,7,100-]' style ranges for IPv6.

この問題をどのように解決できますか?

答え1

for i in {15360..15871}; do printf "2607:f4a0:3:0:250:56ff:feac:%.4x\n" $i; done

出力:

2607:f4a0:3:0:250:56ff:feac:3c00
2607:f4a0:3:0:250:56ff:feac:3c01
2607:f4a0:3:0:250:56ff:feac:3c02
2607:f4a0:3:0:250:56ff:feac:3c03
2607:f4a0:3:0:250:56ff:feac:3dfd
2607:f4a0:3:0:250:56ff:feac:3dfe
2607:f4a0:3:0:250:56ff:feac:3dff

答え2

ほぼすべて来ました。この行は次のようになります。

for i in {3072..3583};do printf "2607:f4a0:3:0:250:56ff:feac:3%x\n" $i >> ipv6.txt;done

説明:printfが入力した数字をプレースホルダーの前の数字に何とか追加すると思います。そのようなことは起こりませんでした。 printfが行うことは、プレースホルダではなくすべてを文字列として解釈し、提供された入力を文字列に変換し(変換方法は使用するプレースホルダによって異なります)、プレースホルダに対応します。だからprintf "bla bla%x" 8もう一度bla bla8printf "500%x" 85008

したがって、最後の3桁の数字をプレースホルダ%xに置き換えてから、16進範囲c00-dffに対応する10進数を指定する必要があります。これは10進数で3072-3583です(残念ながらbash範囲演算子は16進数を理解していません)。 。

ただし、3桁未満の数字から計算を開始するには、プレースホルダにパディングを割り当てることもできます。たとえば、000〜200という数字の場合は、プレースホルダを使用できます%03x03桁未満のパディングに使用したい文字で、3必要な最小数字の長さです。

関連情報