47 lines
759 B
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
|
|
}
|