Python 模块中有一个方法ipaddress可以列出网络中的所有 IP。例如。
import ipaddress
ips = [ip for ip in ipaddress.ip_network('8.8.8.0/24').hosts()]
Run Code Online (Sandbox Code Playgroud)
你会如何在 Go 中做同样的事情?
Vor*_*ung 12
将 CIDR 地址和网络掩码转换为 uint32。找到开始和结束,然后在 uint32 上循环以获取地址
package main
import (
"encoding/binary"
"fmt"
"log"
"net"
)
func main() {
// convert string to IPNet struct
_, ipv4Net, err := net.ParseCIDR("192.168.255.128/25")
if err != nil {
log.Fatal(err)
}
// convert IPNet struct mask and address to uint32
// network is BigEndian
mask := binary.BigEndian.Uint32(ipv4Net.Mask)
start := binary.BigEndian.Uint32(ipv4Net.IP)
// find the final address
finish := (start & mask) | (mask ^ 0xffffffff)
// loop through addresses as uint32
for i := start; i <= finish; i++ {
// convert back to net.IP
ip := make(net.IP, 4)
binary.BigEndian.PutUint32(ip, i)
fmt.Println(ip)
}
}
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/5Yq0kXNnjYx
| 归档时间: |
|
| 查看次数: |
7616 次 |
| 最近记录: |