telnetでProxy越しに http://websocketstest.com/ へwebsocketで接続してみる。
まずはtelnetに流し込むスクリプトを作成。ここではSSLなしのポート443を使っている。
websocket.sh
# !/bin/bash
sleep 1
echo CONNECT ws.websocketstest.com:443 HTTP/1.1
echo
sleep 2
echo GET ws://ws.websocketstest.com:443/service HTTP/1.1
echo Host: ws.websocketstest.com:443
echo Upgrade: websocket
echo Connection: Upgrade
echo Sec-WebSocket-Key: $(echo -n "1234567890123456" | base64)
echo Sec-WebSocket-Version: 13
echo
sleep 3
Sec-WebSocket-Key
はRFC6455では
無作為に選ばれた 16 バイト値を base64 符号化した nonce でなければならない
となっている。
telnetで接続してみる。
$ ./websocket.sh | telnet <proxy host> <proxy port>
Trying <proxy ip>...
Connected to <proxy host>.
Escape character is '^]'.
HTTP/1.1 200 Connection established
HTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: +I6SyLIaWoDVyDga6eYd6AAeTAo=
connected,
接続できた。
Sec-Websocket-Accept
の値は以下のように算出されている
$ echo -n "1234567890123456" | base64 | xargs -i echo -n "{}258EAFA5-E914-47DA-95CA-C5AB0DC85B11" | openssl dgst -sha1 -binary -c | base64
+I6SyLIaWoDVyDga6eYd6AAeTAo=