package targets import ( "fmt" "io/ioutil" "iplistget/common" "net" "os" "os/exec" ) func init() { common.RegisterTarget(Ipset{Table: "iplistget"}) } type Ipset struct { Table string } func (s Ipset) Set(table string, iplist []net.IPNet) error { if table != "" { s.Table = table } tmpFile, err := ioutil.TempFile("", "iplistget-") if err != nil { return err } defer os.Remove(tmpFile.Name()) defer tmpFile.Close() for key := range iplist { _, err := tmpFile.WriteString(fmt.Sprintf("add -exist %s %s\n", s.Table, iplist[key].String())) if err != nil { return err } } ipset := exec.Command("ipset", "restore", "-f", tmpFile.Name()) if err := ipset.Run(); err != nil { return err } return nil }