LoginSignup
4
2

More than 5 years have passed since last update.

telnetでProxyに接続してwebsocketに切り替える(101 Switching Protocols)まで

Posted at

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-KeyRFC6455では

無作為に選ばれた 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=
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2