Moar parsers
This commit is contained in:
43
dataset/parser/firewall.go
Normal file
43
dataset/parser/firewall.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package parser
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"io"
|
||||
"net/netip"
|
||||
"strings"
|
||||
|
||||
"git.maze.io/maze/styx/internal/sliceutil"
|
||||
)
|
||||
|
||||
func init() {
|
||||
RegisterNetworksParser(mikroTikNetworksParser{})
|
||||
}
|
||||
|
||||
type mikroTikNetworksParser struct{}
|
||||
|
||||
func (mikroTikNetworksParser) CanHandle(line string) bool {
|
||||
return line == "/ip firewall address-list" ||
|
||||
strings.HasPrefix(line, "add address=")
|
||||
}
|
||||
|
||||
func (mikroTikNetworksParser) ParseNetworks(r io.Reader) (prefixes []netip.Prefix, ignored int, err error) {
|
||||
scanner := bufio.NewScanner(r)
|
||||
for scanner.Scan() {
|
||||
line := strings.TrimSpace(scanner.Text())
|
||||
if isComment(line) || line == "/ip firewall address-list" {
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(line, "add address=") {
|
||||
part := strings.Fields(line[12:])
|
||||
if prefix, err := netip.ParsePrefix(part[0]); err == nil {
|
||||
prefixes = append(prefixes, prefix)
|
||||
continue
|
||||
}
|
||||
}
|
||||
ignored++
|
||||
}
|
||||
if err = scanner.Err(); err != nil {
|
||||
return
|
||||
}
|
||||
return sliceutil.Unique(prefixes), ignored, nil
|
||||
}
|
Reference in New Issue
Block a user