Skip to content

Instantly share code, notes, and snippets.

@driusan
Created August 30, 2018 00:23
Show Gist options
  • Save driusan/2da1062cff4bb4505a3965ec93f1dff6 to your computer and use it in GitHub Desktop.
Save driusan/2da1062cff4bb4505a3965ec93f1dff6 to your computer and use it in GitHub Desktop.
Corrupting websocket test code
const testSize = 200
const maxPacketSize = 4096
var upgrader = websocket.Upgrader{
ReadBufferSize: maxPacketSize,
WriteBufferSize: maxPacketSize,
CheckOrigin: func(r *http.Request) bool {
return true
},
}
func wsHandler(w http.ResponseWriter, req *http.Request) {
packets := 0
conn, err := upgrader.Upgrade(w, req, nil)
if err != nil {
log.Fatal(err)
}
for {
rcv := make([]byte, testSize)
_, r, err := conn.NextReader()
if err != nil {
log.Println(err)
continue
}
_, err = r.Read(rcv)
if err != nil {
log.Fatal(err)
}
for i := range rcv {
if rcv[i] != byte(i % 255) {
log.Fatalf("Packet %d: %d != %d (%v)", packets, rcv[i], i, rcv)
}
packets++
}
}
}
func main() {
var data [testSize]byte
for i := range data {
data[i] = byte(i % 255)
}
if len(os.Args) >= 2 && os.Args[1] == "serve" {
http.HandleFunc("/ws", wsHandler)
log.Println(http.ListenAndServe("127.0.0.1:8080", nil))
} else {
conn, _, err := websocket.DefaultDialer.Dial("ws://127.0.0.1:8080/ws", nil)
if err != nil {
log.Fatal(err)
}
for {
if err := conn.WriteMessage(websocket.BinaryMessage, data[:]); err != nil {
log.Fatal(err)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment