blob: 37b1cb3bc94fceae202e3bec31f99ca988119aed (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#!/bin/sh
_boxconf_ip2dec(){
# helper function for ip_in_subnet
while [ $# -gt 0 ]; do
echo "$1" | {
IFS=./ read -r _bcipd_a _bcipd_b _bcipd_c _bcipd_d _bcipd_e
[ -n "$_bcipd_e" ] || _bcipd_e=32
printf '%s %s ' "$((_bcipd_a<<24|_bcipd_b<<16|_bcipd_c<<8|_bcipd_d))" "$((-1<<(32-_bcipd_e)))"
}
shift
done
}
ip_in_subnet(){
# Check if an IP address is contained within a subnet.
# $1 = IPv4 address
# $2 = network cidr
_boxconf_ip2dec "$1" "$2" | {
read -r _bciis_a1 _bciis_m1 _bciis_a2 _bciis_m2 ||:
test "$(( (_bciis_a1 & _bciis_m2) == (_bciis_a2 & _bciis_m2) && _bciis_m1 >= _bciis_m2 ))" -eq 1
}
}
prefix2netmask(){
# Convert a network prefix to its netmask address.
# For example, 24 returns '255.255.255.0'
# $1 = network prefix value
_bcp2n_val=$(( 0xffffffff ^ ((1 << (32 - $1)) - 1) ))
echo "$(( (_bcp2n_val >> 24) & 0xff )).$(( (_bcp2n_val >> 16) & 0xff )).$(( (_bcp2n_val >> 8) & 0xff )).$(( _bcp2n_val & 0xff ))"
}
ip2rdns(){
# Convert an IPv4 address to its in-addr.arpa reverse DNS name.
# $1 = IPv4 address
echo "$1" | awk -F. '{print $4"."$3"."$2"."$1".in-addr.arpa"}'
}
|