-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathFirewall.go
127 lines (121 loc) · 3.32 KB
/
Firewall.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package main
import (
"fmt"
"io/ioutil"
"os/exec"
)
//Iptables_status:Iptables防火墙状态
//Iptables_rules:Iptables防火墙规则
//Firewall_status:Firewall防火墙状态
//Firewall_rules:Firewall防火墙规则
type FireWall struct {
Iptables_status string `json:"iptablesStatus"`
Iptables_rules string `json:"iptablesRules"`
Firewall_status string `json:"firewallStatus"`
Firewall_rules string `json:"firewallRules"`
}
//iptables防火墙
func Getiptables() (string, string) {
cmd := exec.Command("/bin/bash", "-c", "service iptables status")
cmd2 := exec.Command("/bin/bash", "-c", "sudo iptables -L")
//创建获取命令输出管道
stdout, err := cmd.StdoutPipe()
stdout2, err2 := cmd2.StdoutPipe()
if err != nil {
fmt.Printf("Error:can not obtain stdout pipe for command:%s\n", err)
return "", ""
}
if err2 != nil {
fmt.Printf("Error:can not obtain stdout pipe for command:%s\n", err2)
return "", ""
}
//执行命令
if err := cmd.Start(); err != nil {
fmt.Println("Error:The command is err", err)
return "", ""
}
if err2 := cmd2.Start(); err2 != nil {
fmt.Println("Error:The command is err", err2)
return "", ""
}
//读取所有输出
bytes, err := ioutil.ReadAll(stdout)
bytes2, err2 := ioutil.ReadAll(stdout2)
if err != nil {
fmt.Println("ReadAll Stdout:", err.Error())
return "", ""
}
if err2 != nil {
fmt.Println("ReadAll Stdout:", err2.Error())
return "", ""
}
if err2 := cmd2.Wait(); err2 != nil {
fmt.Println("wait:", err2.Error())
return "", ""
}
return string(bytes), string(bytes2)
//fmt.Println("iptables的状态:")
//fmt.Printf("%s\n", bytes)
//fmt.Println("iptables的规则:")
//fmt.Printf("%s\n", bytes2)
}
//firewall防火墙
func Getfirewall() (string, string) {
cmd := exec.Command("/bin/bash", "-c", "firewall-cmd --state")
cmd2 := exec.Command("/bin/bash", "-c", "firewall-cmd --list-all")
//创建获取命令输出管道
stdout, err := cmd.StdoutPipe()
stdout2, err2 := cmd2.StdoutPipe()
if err != nil {
fmt.Printf("Error:can not obtain stdout pipe for command:%s\n", err)
return "", ""
}
if err2 != nil {
fmt.Printf("Error:can not obtain stdout pipe for command:%s\n", err2)
return "", ""
}
//执行命令
if err := cmd.Start(); err != nil {
fmt.Println("Error:The command is err", err)
return "", ""
}
if err2 := cmd2.Start(); err2 != nil {
fmt.Println("Error:The command is err", err2)
return "", ""
}
//读取所有输出
bytes, err := ioutil.ReadAll(stdout)
bytes2, err2 := ioutil.ReadAll(stdout2)
if err != nil {
fmt.Println("ReadAll Stdout:", err.Error())
return "", ""
}
if err2 != nil {
fmt.Println("ReadAll Stdout:", err2.Error())
return "", ""
}
//if err := cmd.Wait(); err != nil {
// fmt.Println("wait:", err.Error())
// return
//}
if err2 := cmd2.Wait(); err2 != nil {
fmt.Println("wait:", err2.Error())
return "", ""
}
return string(bytes), string(bytes2)
//fmt.Println("firewall的状态:")
//fmt.Printf("%s\n", bytes)
//fmt.Println("firewall的规则:")
//fmt.Printf("%s\n", bytes2)
}
func GetFireWall() FireWall {
ipstatus, iprules := Getiptables() //ip防火墙信息
firestatus, firerules := Getfirewall() //firewall防火墙信息
firewall := FireWall{
Iptables_status: ipstatus,
Iptables_rules: iprules,
Firewall_status: firestatus,
Firewall_rules: firerules,
}
return firewall
}