|
@@ -2,23 +2,94 @@ package main
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
- "log"
|
|
|
+ "html/template"
|
|
|
+ "net"
|
|
|
"net/http"
|
|
|
+ "strings"
|
|
|
)
|
|
|
|
|
|
+var tpl = template.Must(template.ParseFiles("pus.html"))
|
|
|
+
|
|
|
+type IPv4 struct {
|
|
|
+ IpAddress string
|
|
|
+ NetMask string
|
|
|
+ DefGateway string
|
|
|
+ MainDNS string
|
|
|
+ AltDNS string
|
|
|
+}
|
|
|
+
|
|
|
func main() {
|
|
|
|
|
|
- http.HandleFunc("/info", info) // Устанавливаем роутер
|
|
|
- http.HandleFunc("/ok", ok) // Устанавливаем роутер
|
|
|
- err := http.ListenAndServe(":8080", nil) // устанавливаем порт веб-сервера
|
|
|
- if err != nil {
|
|
|
- log.Fatal("ListenAndServe: ", err)
|
|
|
- }
|
|
|
+ mux := http.NewServeMux()
|
|
|
+ mux.HandleFunc("/info", info)
|
|
|
+ mux.HandleFunc("/error", err)
|
|
|
+ mux.HandleFunc("/", indexHandler)
|
|
|
+ http.ListenAndServe(":8080", mux)
|
|
|
|
|
|
}
|
|
|
+func err(w http.ResponseWriter, r *http.Request) {
|
|
|
+ fmt.Fprintf(w, "Ты по-моему перепутал")
|
|
|
+}
|
|
|
func info(w http.ResponseWriter, r *http.Request) {
|
|
|
- fmt.Fprintf(w, "Попова Ульяна, 792 группа")
|
|
|
+ IP_Address := r.FormValue("IP_Address")
|
|
|
+ NET_Mask := r.FormValue("NET_Mask")
|
|
|
+ Def_gateway := r.FormValue("Def_gateway")
|
|
|
+ Main_DNS := r.FormValue("Main_DNS")
|
|
|
+ Alt_DNS := r.FormValue("Alt_DNS")
|
|
|
+ if IP_Address == "" || NET_Mask == "" {
|
|
|
+
|
|
|
+ http.Redirect(w, r, "/error", http.StatusSeeOther)
|
|
|
+
|
|
|
+ }
|
|
|
+ if !valid(IP_Address) || !valid(NET_Mask) || !valid(Def_gateway) || !valid(Main_DNS) || !valid(Alt_DNS) {
|
|
|
+ http.Redirect(w, r, "/error", http.StatusSeeOther)
|
|
|
+ }
|
|
|
+
|
|
|
+ if !validMask(NET_Mask) {
|
|
|
+ http.Redirect(w, r, "/error", http.StatusSeeOther)
|
|
|
+ }
|
|
|
+
|
|
|
+ info := IPv4{IpAddress: IP_Address, NetMask: NET_Mask, DefGateway: Def_gateway, MainDNS: Main_DNS, AltDNS: Alt_DNS}
|
|
|
+
|
|
|
+ fmt.Fprintf(w, info.GetAllInfo())
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func (ip IPv4) GetAllInfo() string {
|
|
|
+
|
|
|
+ return fmt.Sprintf("IP Address: %s \nNet Mask: %s \nDefault Gateway: %s \nDNS-Server: %s \nAlternative DNS-Server: %s", ip.IpAddress, ip.NetMask, ip.DefGateway, ip.MainDNS, ip.AltDNS)
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func indexHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
+
|
|
|
+ tpl.Execute(w, nil)
|
|
|
+}
|
|
|
+
|
|
|
+func valid(ip string) bool {
|
|
|
+
|
|
|
+ Ipv4Addr := net.ParseIP(ip)
|
|
|
+ if Ipv4Addr == nil {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return true
|
|
|
+
|
|
|
}
|
|
|
-func ok(w http.ResponseWriter, r *http.Request) {
|
|
|
- fmt.Fprintf(w, "status OK ")
|
|
|
+
|
|
|
+func validMask(mask string) bool {
|
|
|
+ count := 0
|
|
|
+ s := strings.Split(mask, ".")
|
|
|
+ fmt.Println("mask: ", s)
|
|
|
+ for i := 0; i < len(s)-1; i++ {
|
|
|
+ if s[i] == "255" {
|
|
|
+ count++
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if count == 3 && (s[len(s)-1] == "0" || s[len(s)-1] == "128" || s[len(s)-1] == "192" || s[len(s)-1] == "224" || s[len(s)-1] == "240" || s[len(s)-1] == "248" || s[len(s)-1] == "254" || s[len(s)-1] == "255") {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ return false
|
|
|
+
|
|
|
}
|