| |
| package runner |
|
|
| import ( |
| "encoding/binary" |
| "github.com/Tencent/AI-Infra-Guard/common/utils" |
| "net" |
| "strings" |
| ) |
|
|
| |
| func Targets(target string) chan string { |
| results := make(chan string) |
| go func() { |
| defer close(results) |
|
|
| |
| |
| |
| if strings.ContainsAny(target, " *") { |
| return |
| } |
|
|
| |
| if utils.IsCIDR(target) { |
| cidrIps, err := IPAddresses(target) |
| if err != nil { |
| return |
| } |
| for _, ip := range cidrIps { |
| results <- ip |
| } |
| } else { |
| results <- target |
| } |
| }() |
| return results |
| } |
|
|
| |
| func IPAddresses(cidr string) ([]string, error) { |
| _, ipnet, err := net.ParseCIDR(cidr) |
| if err != nil { |
| return []string{}, err |
| } |
| return IPAddressesIPnet(ipnet), nil |
| } |
|
|
| |
| func IPAddressesIPnet(ipnet *net.IPNet) (ips []string) { |
| |
| mask := binary.BigEndian.Uint32(ipnet.Mask) |
| start := binary.BigEndian.Uint32(ipnet.IP) |
|
|
| |
| finish := (start & mask) | (mask ^ 0xffffffff) |
|
|
| |
| for i := start; i <= finish; i++ { |
| |
| ip := make(net.IP, 4) |
| binary.BigEndian.PutUint32(ip, i) |
| ips = append(ips, ip.String()) |
| } |
| return ips |
| } |
|
|