英文:
Golang: Number of bits of an IP mask
问题
在Go语言中,你可以使用net.IPMask
类型来获取IP掩码的位数。首先,你需要将IP掩码解析为net.IP
类型和net.IPMask
类型。然后,你可以使用net.IPMask
类型的Size()
方法来获取掩码的位数。
下面是一个示例代码:
package main
import (
"fmt"
"net"
)
func main() {
ip := net.ParseIP("10.100.20.0")
mask := net.IPMask(net.ParseIP("255.255.255.0").To4())
ones, bits := mask.Size()
fmt.Printf("Mask: %s\n", mask.String())
fmt.Printf("Bits: %d\n", bits)
fmt.Printf("Ones: %d\n", ones)
}
这段代码将输出:
Mask: ffffff00
Bits: 24
Ones: 24
这里,bits
变量存储了掩码的位数,即24。你可以根据需要使用bits
变量来比较掩码的大小。
英文:
In Go, how do I get the number of bits of an IP mask like this: 10.100.20.0 255.255.255.0
=> 24
bits maks.
It would be helpful to check if a mask is lower or greater than a certain number of bits (like if one wants to block all adresses greater than /24).
答案1
得分: 13
net
包提供了一些函数来获取掩码的前缀大小,该值在 CIDR 表示法 中使用。具体用于位数的函数是:
func (m IPMask) Size() (ones, bits int)
要获取位数,请参考以下示例:
package main
import (
"fmt"
"net"
)
func main() {
mask := net.IPMask(net.ParseIP("255.255.255.0").To4()) // 如果你有一个字符串形式的掩码
//mask := net.IPv4Mask(255,255,255,0) // 如果你有一个由4个整数值表示的掩码
prefixSize, _ := mask.Size()
fmt.Println(prefixSize)
}
输出:
24
附注:
我假设你指的是掩码 255.255.255.0。
英文:
The net
package has functions for getting the prefix size of a mask, the value used in CIDR notation. The specific function for the bits is:
func (m IPMask) Size() (ones, bits int)
To get the bits, see the following example:
package main
import (
"fmt"
"net"
)
func main() {
mask := net.IPMask(net.ParseIP("255.255.255.0").To4()) // If you have the mask as a string
//mask := net.IPv4Mask(255,255,255,0) // If you have the mask as 4 integer values
prefixSize, _ := mask.Size()
fmt.Println(prefixSize)
}
Output:
24
Ps.
I assume you mean the bitmask 255.255.255.0
答案2
得分: 0
这可以使用IPAddress Go库来实现,无论是IPv4还是IPv6。免责声明:我是项目经理。
import (
"fmt"
"github.com/seancfoley/ipaddress-go/ipaddr"
)
func main() {
maskStr := "255.255.255.0"
pref := ipaddr.NewIPAddressString(maskStr).GetAddress().
GetBlockMaskPrefixLen(true)
fmt.Printf("255.255.255.0的前缀长度为%d", pref.Len())
}
输出:
255.255.255.0的前缀长度为24
英文:
This is straightforward using the IPAddress Go library for either IPv4 or IPv6. Disclaimer: I am the project manager.
import (
"fmt"
"github.com/seancfoley/ipaddress-go/ipaddr"
)
func main() {
maskStr := "255.255.255.0"
pref := ipaddr.NewIPAddressString(maskStr).GetAddress().
GetBlockMaskPrefixLen(true)
fmt.Printf("prefix length for %s is %d", maskStr, pref.Len())
}
Output:
prefix length for 255.255.255.0 is 24
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论