IP 주소나 네트워크가 다른 네트워크에 포함되어 있는지 BusyBox 셸에서 확인하는 방법은 무엇입니까?

IP 주소나 네트워크가 다른 네트워크에 포함되어 있는지 BusyBox 셸에서 확인하는 방법은 무엇입니까?

ipsetBusyBox 쉘 스크립트에는 방화벽 목록의 화이트리스트 로 사용되는 IP 목록이 있습니다 . 화이트리스트에는 화이트리스트에 등록할 라우팅할 수 없는 IP가 포함될 수 있습니다. 반면에Firehol_level1목록(완벽한)에는 rfc1918 라우팅할 수 없는 CIDR이 포함되어 있습니다.

iprange첫 번째 시도는 CIDR과 일치하는 항목을 제외하는 화이트리스트를 사용하는 것이었고 iprange --common net.txt whitelist.txt, 스왑된 파일 순서는 iprange --common whitelist.txt net.txt항상 CIDR(네트워크 블록)이 아닌 IP를 출력했습니다.

화이트리스트에 등록된 IP가 네트워크 블록과 일치하는 경우 ipset해당 네트워크 블록을 ( ) 목록에서 제거해야 합니다.

사용자 yaegashi는 좋은 사람입니다네트워크 스크립트의 bash ipv4/cidr (아님):

#!/bin/bash

v4dec() {
        for i; do
                echo $i | {
                        IFS=./
                        read a b c d e
                        test -z "$e" && e=32
                        echo -n "$((a<<24|b<<16|c<<8|d)) $((-1<<(32-e))) "
                }
        done
}

v4test() {
        v4dec $1 $2 | {
                read addr1 mask1 addr2 mask2
                if (( (addr1&mask2) == (addr2&mask2) && mask1 >= mask2 )); then
                        echo "$1 is in network $2"
                else
                        echo "$1 is not in network $2"
                fi
        }
}

그러나 bash 스크립트비지박스 쉘에서는 실행되지 않습니다.. busybox 쉘에서 실행되도록 수정했습니다.

#!/bin/sh

v4dec() {
        for i; do
                echo $i | {
                        IFS=./
                        read a b c d e
                        test -z "$e" && e=32
                        echo -n "$((a<<24|b<<16|c<<8|d)) $((-1<<(32-e))) "
                }
        done
}

v4dec $1 $2 | {
  read addr1 mask1 addr2 mask2
    if [ $(($addr1&$mask2)) -eq $(($addr2&$mask2)) ] && [ $mask1 -ge $mask2 ]; then
      echo "$1 is in network $2"
    else
      echo "$1 is not in network $2"
    fi
}

BusyBox(v1.24.2로 테스트됨) yaegashi v4test의 쉘 스크립트 번역이 동일한 작업을 수행합니까, 아니면 실수를 하고 있습니까?

아니면 제한된 하드웨어(Perl/Python/etcetera 없음)의 IPv4 주소 목록과 일치하는 ipset hash:net 목록에서 CIDR 항목을 제거하는 더 좋은 방법이 있습니까?

답변1

중요한 점 iprange은 화이트리스트에 등록된 IP를 CIDR 형식으로 작성해야 한다는 것입니다.

IP에 접미사 합계 /20를 추가하면 /24네트워크 블록 일치가 향상될 수 있습니다.

$ cat net-optim.txt
1.10.16.0/20

$ cat whitelist.txt
1.10.16.1/20
1.10.16.1/24

$ iprange --common net-optim.txt whitelist.txt
1.10.16.0/20

iprange --exclude실패 와 결합됩니다 --ipset-reduce 20. 사용을 포기 iprange하고 delete 192.168.0.* 사용으로 돌아갑니다 grep.

관련 정보