Files
techsuppgetinfo/DCIManager6/dci6-support/server_info_firewalls.go
2026-04-04 00:09:02 +08:00

61 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"fmt"
"os"
"os/exec"
"strconv"
"strings"
)
// для всех обычных фаерволов хватит двух команд
// iptables --version если в ответе есть nf_tables (а это почти 100% случаев теперь), то просто команда
// nft -j list ruleset
// в ином случае можно добавить iptables -L
// довольно сложный json, быстро у меня не получится его разоброать. Временно, я заберу просто вывод без json построчно
// и так же, построчно отображу в читалке. Там даже в простом варианте из убунты, где их никто не настраивал, 590 строк.
// значит пока что структура nfrRuleset
// type nftRuleset struct {
// Lines []string
// }
//
func getNftRuleset(dirName string) (nftRuleset, []error) {
var rules nftRuleset
var errs []error
cmd := exec.Command("nft", "list", "ruleset")
output, err := cmd.Output()
if err != nil {
err = fmt.Errorf("Ошибка при выполнении команды fmt list ruleset : %v", err)
errs = append(errs, err)
return rules, errs
}
i := 0
rulesFile, err := os.Create(dirName + "/nftListRuleset.txt")
if err != nil {
err = fmt.Errorf("Ошибка создания файла nftListRuleset.txt : %v", err)
errs = append(errs, err)
for line := range strings.SplitSeq(string(output), "\n") {
line = strconv.Itoa(i) + " " + strings.TrimSpace(line)
rules.Lines = append(rules.Lines, line)
i += 1
}
} else {
for line := range strings.SplitSeq(string(output), "\n") {
line = strings.TrimSpace(line) + "\n"
_, err := rulesFile.WriteString(line)
if err != nil {
err = fmt.Errorf("Ошибка при записи в файл nftListRuleset.txt")
errs = append(errs, err)
}
line = strconv.Itoa(i) + " " + strings.TrimSpace(line)
rules.Lines = append(rules.Lines, line)
i += 1
}
}
defer rulesFile.Close()
return rules, errs
}