Last active
August 13, 2020 03:28
-
-
Save xjdrew/1ac0c03717b0f63b5fdd4aadba1528df to your computer and use it in GitHub Desktop.
Revisions
-
xjdrew revised this gist
Aug 13, 2020 . 1 changed file with 17 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,17 @@ ## build ```bash go build tcpinfo.go ``` ## run ```bash ./tcpinfo -h ./tcpinfo ``` ## feature print tcp options, include: * Maximum segment size * Window scale * Selective Acknowledgement * others -
xjdrew created this gist
Aug 13, 2020 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,64 @@ package main import ( "encoding/json" "flag" "fmt" "log" "net" "github.com/mikioh/tcp" "github.com/mikioh/tcpinfo" ) func handleConnection(conn net.Conn, monitor bool) { fmt.Println("new connection:", conn.RemoteAddr()) tc, err := tcp.NewConn(conn) if err != nil { conn.Close() log.Printf("tcp.NewConn failed:", err) return } var o tcpinfo.Info var b [256]byte for { i, err := tc.Option(o.Level(), o.Name(), b[:]) if err != nil { log.Println(err) return } txt, err := json.Marshal(i) if err != nil { log.Println(err) return } fmt.Println(string(txt)) if !monitor { break } } } func main() { listen := flag.String("listen", ":8081", "listen adddress") monitor := flag.Bool("monitor", false, "monitor options") flag.Parse() ln, err := net.Listen("tcp", *listen) if err != nil { log.Printf("listen failed: %s", err) return } log.Println("listen:", *listen) for { conn, err := ln.Accept() if err != nil { // handle error log.Println("accept failed:", err) break } go handleConnection(conn, *monitor) } }