diff --git a/README.md b/README.md index 7c22dd0..8bde88b 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,20 @@ # probehost2 an http endpoint to query network diagnosis tools from remote hosts -1. Overview -2. Disclaimer -3. Installation -4. Usage +- Overview +- Disclaimer +- Installation + - Building + - Systemd + - Docker + - Proxy +- Usage + - Server + - Client + - General + - Ping + - MTR + - Traceroute # Disclaimer Dont expect good or even mediocre code here. This is my first take at go and is mostly for myself to learn. Suggestions and improvements are welcome. @@ -69,21 +79,21 @@ All inputs are validated and invalid input is discarded. If the request contains Local IP ranges are by default excluded from lookups, this currently only includes IPs and not hostnames and can be disabled on the server by passing the -l flag. -Command options are based on the originally given cli flags but also have a more understandable altname (wip). +Command options are based on the originally given cli flags but also have a more understandable altname. ### Ping The default options are: - `-c 10`: send 10 pings Available options are: -- `4`: force IPv4 -- `6`: force IPv6 -- `d`: print timestamps -- `n`: no dns name resolution -- `v`: verbose output -- `c1`: send 1 ping -- `c5`: send 5 pings -- `c10`: send 10 pings +- `4` / `force4`: force IPv4 +- `6` / `force6`: force IPv6 +- `d` / `timestamps`: print timestamps +- `n` / `nodns`: no dns name resolution +- `v` / `verbose`: verbose output +- `c1` / `count1`: send 1 ping +- `c5` / `count5`: send 5 pings +- `c10` / `count10`: send 10 pings Example query: ```sh @@ -103,18 +113,18 @@ The default options are: - `-c10`: send 10 pings Available options are: -- `4`: force IPv4 -- `6`: force IPv6 -- `u`: use UDP instead of ICMP echo -- `t`: use TCP instead of ICMP echo -- `e`: display information from ICMP extensions -- `x`: output xml -- `n`: do not resolve host names -- `b`: show IP numbers and host names -- `z`: display AS number -- `c1`: send 1 ping -- `c5`: send 5 pings -- `c10`: send 10 pings +- `4` / `force4`: force IPv4 +- `6` / `force6`: force IPv6 +- `u` / `udp`: use UDP instead of ICMP echo +- `t` / `tcp`: use TCP instead of ICMP echo +- `e` / `ext`: display information from ICMP extensions +- `x` / `xml`: output xml +- `n` / `nodns`: do not resolve host names +- `b` / `cmb`: show IP numbers and host names +- `z` / `asn`: display AS number +- `c1` / `count1`: send 1 ping +- `c5` / `count5`: send 5 pings +- `c10` / `count10`: send 10 pings Example query: ``` @@ -129,16 +139,16 @@ The default options are: - none Available options are: -- `4`: force IPv4 -- `6`: force IPv6 -- `f`: do not fragment packets -- `i`: use ICMP ECHO for tracerouting -- `t`: use TCP SYN for tracerouting (default port is 80) -- `n`: do not resolve IP addresses to their domain names -- `u`: use UDP to particular port for tracerouting (default port is 53) -- `ul`: Use UDPLITE for tracerouting (default port is 53) -- `d`: Use DCCP Request for tracerouting (default port is 33434) -- `b`: Guess the number of hops in the backward path and print if it differs +- `4` / `force4`: force IPv4 +- `6` / `force6`: force IPv6 +- `f` / `dnf`: do not fragment packets +- `i` / `ìcmp`: use ICMP ECHO for tracerouting +- `t` / `tcp`: use TCP SYN for tracerouting (default port is 80) +- `n` / `nodns`: do not resolve IP addresses to their domain names +- `u` / `udp`: use UDP to particular port for tracerouting (default port is 53) +- `ul` / `udplite`: Use UDPLITE for tracerouting (default port is 53) +- `d` / `dccp`: Use DCCP Request for tracerouting (default port is 33434) +- `b` / `back`: Guess the number of hops in the backward path and print if it differs Example query: ``` diff --git a/main.go b/main.go index f14885a..1d5a813 100644 --- a/main.go +++ b/main.go @@ -119,7 +119,10 @@ func prerunner(req *http.Request, cmd string, cmdopts map[string]string, default func ping(w http.ResponseWriter, req *http.Request) { cmd := "ping" - cmdopts := map[string]string{"4": "-4", "6": "-6", "d": "-D", "n": "-n", "v": "-v", "c1": "-c1", "c5": "-c5", "c10": "-c10"} + cmdopts := map[string]string{ + "4": "-4", "6": "-6", "d": "-D", "n": "-n", "v": "-v", "c1": "-c1", "c5": "-c5", "c10": "-c10", + "force4": "-4", "force6": "-6", "timestamps": "-D", "nodns": "-n", "verbose": "-v", "count1": "-c1", "count5": "-c5", "count10": "-c10", + } var defaultopts []string defaultopts = append(defaultopts, "-c10") res := prerunner(req, cmd, cmdopts, defaultopts) @@ -132,7 +135,10 @@ func ping(w http.ResponseWriter, req *http.Request) { func mtr(w http.ResponseWriter, req *http.Request) { cmd := "mtr" - cmdopts := map[string]string{"4": "-4", "6": "-6", "u": "-u", "t": "-T", "e": "-e", "x": "-x", "n": "-n", "b": "-b", "z": "-z", "c1": "-c1", "c5": "-c5", "c10": "-c10"} + cmdopts := map[string]string{ + "4": "-4", "6": "-6", "u": "-u", "t": "-T", "e": "-e", "x": "-x", "n": "-n", "b": "-b", "z": "-z", "c1": "-c1", "c5": "-c5", "c10": "-c10", + "force4": "-4", "force6": "-6", "udp": "-u", "tcp": "-T", "ext": "-e", "xml": "-x", "nodns": "-n", "cmb": "-b", "asn": "-z", "count1": "-c1", "count5": "-c5", "count10": "-c10", + } var defaultopts []string defaultopts = append(defaultopts, "-r", "-w", "-c10") res := prerunner(req, cmd, cmdopts, defaultopts) @@ -145,7 +151,10 @@ func mtr(w http.ResponseWriter, req *http.Request) { func traceroute(w http.ResponseWriter, req *http.Request) { cmd := "traceroute" - cmdopts := map[string]string{"4": "-4", "6": "-6", "dnf": "-F", "i": "-I", "t": "-T", "n": "-n", "u": "-U", "ul": "-UL", "d": "-D", "b": "--back"} + cmdopts := map[string]string{ + "4": "-4", "6": "-6", "f": "-F", "i": "-I", "t": "-T", "n": "-n", "u": "-U", "ul": "-UL", "d": "-D", "b": "--back", + "force4": "-4", "force6": "-6", "dnf": "-F", "icmp": "-I", "tcp": "-T", "nodns": "-n", "udp": "-U", "udplite": "-UL", "dccp": "-D", "back": "--back", + } var defaultopts []string //defaultopts = append(defaultopts) // no default options for traceroute res := prerunner(req, cmd, cmdopts, defaultopts)