
/ 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 bla8
printf "500%x" 8
5008
したがって、最後の3桁の数字をプレースホルダ%xに置き換えてから、16進範囲c00-dffに対応する10進数を指定する必要があります。これは10進数で3072-3583です(残念ながらbash範囲演算子は16進数を理解していません)。 。
ただし、3桁未満の数字から計算を開始するには、プレースホルダにパディングを割り当てることもできます。たとえば、000〜200という数字の場合は、プレースホルダを使用できます%03x
。0
3桁未満のパディングに使用したい文字で、3
必要な最小数字の長さです。