#!/bin/bash
MAXCDN_ARRAY="108.161.176.0/20 94.46.144.0/20 146.88.128.0/20 198.232.124.0/22 23.111.8.0/22 217.22.28.0/22 64.125.76.64/27 64.125.76.96/27 64.125.78.96/27 64.125.78.192/27 64.125.78.224/27 64.125.102.32/27 64.125.102.64/27 64.125.102.96/27 94.31.27.64/27 94.31.33.128/27 94.31.33.160/27 94.31.33.192/27 94.31.56.160/27 177.54.148.0/24 185.18.207.65/26 50.31.249.224/27 50.31.251.32/28 119.81.42.192/27 119.81.104.96/28 119.81.67.8/29 119.81.0.104/30 119.81.1.144/30 27.50.77.226/32 27.50.79.130/32 119.81.131.130/32 119.81.131.131/32 216.12.211.59/32 216.12.211.60/32 37.58.110.67/32 37.58.110.68/32 158.85.206.228/32 158.85.206.231/32 174.36.204.195/32 174.36.204.196/32"
$IP = 108.161.184.123
if [ $IP in $MAXCDN_ARRAY ];
then:
echo "$IP is in MAXCDN range"
else:
echo "$IP is not in MAXCDN range"
fi
MAXCDN_ARRAY
ホワイトリストとして使用するIPのリストがあります。特定のIPアドレスがこの配列の範囲内にあることを確認したいと思います。
配列内のすべてのIPを比較し、このリスト範囲内の特定のIPを表すようにコードをどのように設定できますか?
ベストアンサー1
あなたはそれを使用することができますgrepcidrIPアドレスがCIDRネットワークリストにあることを確認してください。
#! /bin/bash
NETWORKS="108.161.176.0/20 94.46.144.0/20 146.88.128.0/20 198.232.124.0/22
23.111.8.0/22 217.22.28.0/22 64.125.76.64/27 64.125.76.96/27
64.125.78.96/27 64.125.78.192/27 64.125.78.224/27 64.125.102.32/27
64.125.102.64/27 64.125.102.96/27 94.31.27.64/27 94.31.33.128/27
94.31.33.160/27 94.31.33.192/27 94.31.56.160/27 177.54.148.0/24
185.18.207.65/26 50.31.249.224/27 50.31.251.32/28 119.81.42.192/27
119.81.104.96/28 119.81.67.8/29 119.81.0.104/30 119.81.1.144/30
27.50.77.226/32 27.50.79.130/32 119.81.131.130/32 119.81.131.131/32
216.12.211.59/32 216.12.211.60/32 37.58.110.67/32 37.58.110.68/32
158.85.206.228/32 158.85.206.231/32 174.36.204.195/32
174.36.204.196/32"
for IP in 108.161.184.123 108.161.176.123 192.168.0.1 172.16.21.99; do
grepcidr "$NETWORKS" <(echo "$IP") >/dev/null && \
echo "$IP is in MAXCDN range" || \
echo "$IP is not in MAXCDN range"
done
注:grepcidr
一致すると予想されるIPアドレスは、コマンドラインの引数だけでなくファイルにあります。そのため、<(echo "$IP")
上記の方法を使用する必要があります。
出力:
108.161.184.123 is in MAXCDN range
108.161.176.123 is in MAXCDN range
192.168.0.1 is not in MAXCDN range
172.16.21.99 is not in MAXCDN range
grepcidr
Debianを含む複数のディストリビューション用に事前にパッケージ化することができます。
Package: grepcidr
Version: 2.0-1
Description-en: Filter IP addresses matching IPv4 CIDR/network specification
grepcidr can be used to filter a list of IP addresses against one or
more Classless Inter-Domain Routing (CIDR) specifications, or
arbitrary networks specified by an address range. As with grep, there
are options to invert matching and load patterns from a file.
grepcidr is capable of comparing thousands or even millions of IPs
to networks with little memory usage and in reasonable computation
time.
.
grepcidr has endless uses in network software, including: mail
filtering and processing, network security, log analysis, and many
custom applications.
Homepage: http://www.pc-tools.net/unix/grepcidr/
そうでない場合は、上記のリンクからソースを使用できます。
もう1つの選択肢は、perl
これらの言語を使用してIPv4アドレスを操作および検査するために、多くのライブラリ/モジュールのいずれかを使用して作成またはスクリプトを作成することです。python
たとえば、perl
モジュールには非常に似た方法がData::Validate::IP
あり、機能があります。is_innet_ipv4($ip, $network)
Net::CIDR::Lite
$cidr->find($ip);
Net::IPv4Addr
ipv4_in_network()
python
ipy
、、、ipaddr
などの類似ライブラリがありますipcalc
。