This commit is contained in:
2026-04-04 00:09:02 +08:00
commit 38e896363e
117 changed files with 119311 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
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
}