Frontend: add traceroute support

This commit is contained in:
Lan Tian
2019-01-08 13:57:53 +08:00
parent 75c68fdfda
commit 0ba325beed
5 changed files with 111 additions and 35 deletions

View File

@@ -7,47 +7,49 @@ import (
)
func webDispatcherIPv4Summary(w http.ResponseWriter, r *http.Request) {
webHandler(w, r, false, r.URL.Path[len("/ipv4/summary/"):], "show protocols")
split := strings.Split(r.URL.Path[len("/ipv4/summary/"):], "/")
webHandler(w, r, "bird", split[0], "show protocols")
}
func webDispatcherIPv6Summary(w http.ResponseWriter, r *http.Request) {
webHandler(w, r, true, r.URL.Path[len("/ipv6/summary/"):], "show protocols")
split := strings.Split(r.URL.Path[len("/ipv6/summary/"):], "/")
webHandler(w, r, "bird6", split[0], "show protocols")
}
func webDispatcherIPv4Detail(w http.ResponseWriter, r *http.Request) {
split := strings.Split(r.URL.Path[len("/ipv4/detail/"):], "/")
webHandler(w, r, false, split[0], "show protocols all " + split[1])
webHandler(w, r, "bird", split[0], "show protocols all " + split[1])
}
func webDispatcherIPv6Detail(w http.ResponseWriter, r *http.Request) {
split := strings.Split(r.URL.Path[len("/ipv6/detail/"):], "/")
webHandler(w, r, true, split[0], "show protocols all " + split[1])
webHandler(w, r, "bird6", split[0], "show protocols all " + split[1])
}
func webDispatcherIPv4Route(w http.ResponseWriter, r *http.Request) {
split := strings.Split(r.URL.Path[len("/ipv4/route/"):], "/")
webHandler(w, r, false, split[0], "show route for " + strings.Join(split[1:], "/"))
webHandler(w, r, "bird", split[0], "show route for " + strings.Join(split[1:], "/"))
}
func webDispatcherIPv6Route(w http.ResponseWriter, r *http.Request) {
split := strings.Split(r.URL.Path[len("/ipv6/route/"):], "/")
webHandler(w, r, true, split[0], "show route for " + strings.Join(split[1:], "/"))
webHandler(w, r, "bird6", split[0], "show route for " + strings.Join(split[1:], "/"))
}
func webDispatcherIPv4RouteAll(w http.ResponseWriter, r *http.Request) {
split := strings.Split(r.URL.Path[len("/ipv4/route_all/"):], "/")
webHandler(w, r, false, split[0], "show route for " + strings.Join(split[1:], "/") + " all")
webHandler(w, r, "bird", split[0], "show route for " + strings.Join(split[1:], "/") + " all")
}
func webDispatcherIPv6RouteAll(w http.ResponseWriter, r *http.Request) {
split := strings.Split(r.URL.Path[len("/ipv6/route_all/"):], "/")
webHandler(w, r, true, split[0], "show route for " + strings.Join(split[1:], "/") + " all")
webHandler(w, r, "bird6", split[0], "show route for " + strings.Join(split[1:], "/") + " all")
}
func webDispatcherWhois(w http.ResponseWriter, r *http.Request) {
var target string = r.URL.Path[len("/whois/"):]
templateHeader(w, r, "Bird-lg Go - WHOIS " + html.EscapeString(target))
templateHeader(w, r, "Bird-lg Go - whois " + html.EscapeString(target))
w.Write([]byte("<h2>whois " + html.EscapeString(target) + "</h2>"))
smartWriter(w, whois(target))
@@ -55,20 +57,26 @@ func webDispatcherWhois(w http.ResponseWriter, r *http.Request) {
templateFooter(w)
}
func webHandler(w http.ResponseWriter, r *http.Request, isIPv6 bool, serverQuery string, command string) {
templateHeader(w, r, "Bird-lg Go - " + html.EscapeString(command))
func webDispatcherIPv4Traceroute(w http.ResponseWriter, r *http.Request) {
split := strings.Split(r.URL.Path[len("/ipv4/traceroute/"):], "/")
webHandler(w, r, "traceroute", split[0], strings.Join(split[1:], "/"))
}
func webDispatcherIPv6Traceroute(w http.ResponseWriter, r *http.Request) {
split := strings.Split(r.URL.Path[len("/ipv6/traceroute/"):], "/")
webHandler(w, r, "traceroute6", split[0], strings.Join(split[1:], "/"))
}
func webHandler(w http.ResponseWriter, r *http.Request, endpoint string, serverQuery string, command string) {
templateHeader(w, r, "Bird-lg Go - " + html.EscapeString(endpoint + " " + command))
var servers []string = strings.Split(serverQuery, "+")
var responses []string
if isIPv6 {
responses = batchRequest(servers, "bird6", command)
} else {
responses = batchRequest(servers, "bird", command)
}
var responses []string = batchRequest(servers, endpoint, command)
for i, response := range responses {
w.Write([]byte("<h2>" + html.EscapeString(servers[i]) + ": " + html.EscapeString(command) + "</h2>"))
if command == "show protocols" && response[0:4] == "name" {
if (endpoint == "bird" || endpoint == "bird6") && command == "show protocols" && response[0:4] == "name" {
var isIPv6 bool = endpoint[len(endpoint) - 1] == '6'
summaryTable(w, isIPv6, response, servers[i])
} else {
smartWriter(w, response)
@@ -104,7 +112,9 @@ func webServerStart() {
http.HandleFunc("/ipv6/route/", webDispatcherIPv6Route)
http.HandleFunc("/ipv4/route_all/", webDispatcherIPv4RouteAll)
http.HandleFunc("/ipv6/route_all/", webDispatcherIPv6RouteAll)
http.HandleFunc("/ipv4/traceroute/", webDispatcherIPv4Traceroute)
http.HandleFunc("/ipv6/traceroute/", webDispatcherIPv6Traceroute)
http.HandleFunc("/whois/", webDispatcherWhois)
http.HandleFunc("/redir/", navbarFormRedirect)
http.ListenAndServe(":5000", nil)
http.ListenAndServe(settingListen, nil)
}