Skip to content

Instantly share code, notes, and snippets.

@mdobson
Created December 9, 2013 14:20
Show Gist options
  • Save mdobson/7872888 to your computer and use it in GitHub Desktop.
Save mdobson/7872888 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/hijack", func(w http.ResponseWriter, r *http.Request) {
hj, ok := w.(http.Hijacker)
print("Made connection\n")
if !ok {
http.Error(w, "webserver doesn't support hijacking", http.StatusInternalServerError)
return
}
conn, bufrw, err := hj.Hijack()
print("Hijacked\n")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer conn.Close()
bufrw.WriteString("Now we're speaking raw TCP. Say hi: ")
bufrw.Flush()
print("Initial flush\n")
s, err := bufrw.ReadString('\n')
if err != nil {
log.Printf("Error reading string: %v", err)
return
}
fmt.Fprintf(bufrw, "You said: %q \nBye.\n", s)
bufrw.Flush()
})
log.Fatal(http.ListenAndServe(":8080", nil))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment