• Like
HttpとTelnetをつなぐ何か
Upcoming SlideShare
Loading in...5
×
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,263
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Http と Telnet をつなぐ何か 2011/08/27 PyCon JP Shigeki Yamada
  • 2. おまえだれよ 山田茂樹● ネットワーク系です。● とあるSIに派遣されている。● ルータやスイッチを設定したり、テストしたり、導入したり。● NWer向けtool(TTLGen, RouTexDF)をpythonで作ってます。
  • 3. このセッションについて● websocket に関する内容です。 利用事例 + pywebsocket の使い方のさわり をご紹介します。● non programer ~ beginner 向けです。 このセッションの目標● 「websocket 使うの簡単そう!」● 「websocket 面白そう!」 って思ってもらう事です。
  • 4. 予備知識
  • 5. 予備知識1:websocketについて client web server browser websocket ・httpでハンドシェイク ・コネクションを確立 ・明示的に切断するまでコネクションは張りっぱなし clientはいつでもデータを送れる serverはいつでもデータを送れる
  • 6. 予備知識2:pywebsocketについて client browser web server html/JS pywebsocket AP server とかブラウザに送るhtmlには Handler 必要なら DB とかデータを受けたり送ったりするJSが含まれます。 受けたデータをどうするか? どういうデータを返すか? を書きます。
  • 7. 予備知識3:web2telについて client browser web server html/JS pywebsocketこの部分はpywebsocketに web2tel TELNET server同梱されているexampleに入っていたものをそのまま流用しました。 ブラウザからのデータをもとに TELNETするためのHandlerを つくりました。 https://gist.github.com/1020399
  • 8. デモ
  • 9. web2telの挙動 Client (web browser) websocket pywebsocket (stand alone) web2tel web_socket_transfer_data TelnetClass ReaderClass connect send Telnet Telnet Server
  • 10. 動機と経緯
  • 11. どういう方式で実現するか? client browser Telnet server telnet ↑は動やったら良いかわからなかったので、↓で client http telnet browser proxy Telnet server
  • 12. 失敗。。 client browser web server CGI web2tel Telnet server DB
  • 13. 挫折。。 client browser http.server telnetlib Telnet server ・Clientの識別はcookieで ・Clientからの文字列はURLのクエリで ・TelnetインスタンスはDictに ・Telnetインスタンスの識別はclientのcookieで
  • 14. pywebsocketの使い方のさわり
  • 15. pywebsocketの使い方のさわり(1)handlerに書いておかないといけないもの ● web_socket_do_extra_handshake ● web_socket_transfer_data 詳しいことは、__init__.py standalone.py に書いてあります。
  • 16. pywebsocketの使い方のさわり(2)pywebsocketとのデータの受け方/渡し方 def web_socket_transfer_data(request): while True: data = request.ws_stream.receive_message() #受ける request.ws_stream.send_message(reply_data) #渡す 詳しいことは、__init__.py standalone.py に書いてあります。
  • 17. websocket API のさわり接続と受信 function connect() { socket = new WebSocket(ws://example.com:/sample); socket.onopen = function () {            #接続 ~~~~~~; }; socket.onmessage = function (event) {        #受信 ~~~~~~; };送信 function send() { socket.send(mojiretu); }
  • 18. handlerとhtmlを書いたら ● ファイル名を”hogehoge_wsh.py” にして適当なディレクトリに置いて、 ● 待ちうけポート、ドキュメントルート、handlerのディレクトリ等を指定して、 ● pywebsocketを起動するたとえばこんな感じpython C:pythonmod_pywebsocketstandalone.py -d C:pythonmod_pywebsocketexample 詳しいことは、__init__.py standalone.py に書いてあります。
  • 19. Telnetについて
  • 20. Telnetについて・rfc854 (1983)・文字列データを送ったり受け取ったりします・tcp/23です・送信と受信は同時に行う事ができます・Client → Server の文字列データは1文字ずつ送信しています・リモートエコーです(設定次第ですが)・文字列以外にコマンドを送れます
  • 21. telnetlibについて(1)コネクションの確立、文字列の送信はこんな感じ tn = telnetlib.Telnet(node, 23) tn.write(mojiretu)コマンドはバイト列で送るので、こんな感じになります。 tn.get_socket().send(chr(255)+chr(243)) #これはbreak
  • 22. telnetlibについて(2)Socketに入ってきたデータの取得方法がたくさんあります。・ブロックする read_until() #ある文字列を取得するまでブロックして待つ rea_all() #EOFを取得するまでブロックして待つ read_some() #データがあれば返すが、無い場合ブロックして待つ・ブロックしない read_very_eager() #読み出せるデータを返す read_eager() #読み出せるデータを返し、読み出せるものが無い場合エラー read_sb_data() #サブオプション開始/終了の間に収集されたデータを返す read_lazy() #キューに入っているデータを返す read_very_lazy() #処理済みキューに入っているデータを返す
  • 23. 最後に
  • 24. “何を” のせるか“何と何を” つなぐか
  • 25. ご清聴ありがとうございました!