컬렉션을 "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의 링크가 나에게 답을 주었다.

Set Complement
$ comm -23 <(sort set1) <(sort set2)
# set2에 없는 set1의 출력 요소

관련 정보