iplistget/targets/ipset.go

47 lines
759 B
Go

package targets
import (
"fmt"
"io/ioutil"
"git.veenee.ru/veenee/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
}