将集合与“comm”进行比较

将集合与“comm”进行比较

尝试根据某个范围内的所有可用 IP 与设备的 ARP 表进行比较来获取可用 IP 地址列表。

根据我正在做的comm讨论:BASH 中两个数组的交集

创建要比较的 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 的链接给了我答案。

设置补集
$ comm -23 <(sort set1) <(sort set2)
# 输出 set1 中不在 set2 中的元素

相关内容