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 }