範囲内で利用可能なすべてのIPをデバイスのARPテーブルと比較して、利用可能なIPアドレスのリストを取得しようとします。
私がやっている議論に基づいてcomm
:BASHの2つの配列の交点
比較するIP範囲を作成します(例:192.168.20.0/23)。
RANGE1=(192.168.20.{2..255})
RANGE2=(192.168.21.{0..254})
RANGE=("${RANGE1[@]}" "${RANGE2[@]}")
printf '%s\n' "${RANGE[@]}" | LC_ALL=C sort > "${IPSETS_DIR}/<city-alias>_set.txt"
$ 1はネットワークデバイスのIPです。 OIDはデフォルトでデバイスのARPテーブルです。 GREP_SEARCH 例: "192.168.20|192.168.30|192.168.55"
$(which snmpbulkwalk) -v2c -c <community-string> "${1}" .1.3.6.1.2.1.4.35.1.4 > "${RESULTS_FILE}"
STRIPPED_RESULTS=( $(cut -d\" -f2 "${RESULTS_FILE}" | egrep -w "(^|\s)${GREP_SEARCH}") )
printf "%s\n" "${STRIPPED_RESULTS[@]}" | LC_ALL=C sort > "${STRIPPED_FILE}"
ウォーキングで返された結果は次のとおりです。
IP-MIB::ipNetToPhysicalPhysAddress.118161416.ipv4."X.X.X.X" = STRING: XX:XX:XX:XX:XX:XX
次に、以下の方法を使用して比較します。 $ 1は都市エイリアスです。
$(which comm) -13 "${STRIPPED_FILE}" "${IPSETS_DIR}/${1}_set.txt" > "${DIR}/${1}_stored_results.txt"
これはほとんど機能しますが、まだIPが使用されます。私が何を見逃しているのかよくわかりません。
ベストアンサー1
Stéphaneのリンクが私に答えを与えた。
Set Complement
$comm -23 <(sort set1) <(sort set2)
# set2 にない set1 の出力要素