CTFのGuerrilla Programmingも、PythonではなくRubyで(Socket編)

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか
CTF(Capture The Flag)のジャンルのひとつであるGuerrilla Programming。DEFCONやSECCONのWrite upは、ほぼPythonで書かれています。しかし日本人である私にとっては、Rubyの方が得意です。

  • Pythonを否定するわけではない
  • Ruby正規表現との親和性が極端に高すぎるため、それに慣れた者にとって同じことをPythonで書くというのはストレス度が高い

Ruby正規表現(言語に型として組み込まれており、演算子もある)

str =~ /(^|\W)[cC]lass\W/

Python正規表現(明示的にライブラリを読み込む必要あり)

import re
regex = Regexp.compile('(^|\W)[cC]lass\W')
regex.match(str)

この正規表現の利用のしやすさは、Guerrilla Programmingにとって強みがあるとおもいます。


次のようにすれば、Pythonのsocketプログラミングとだいたい同じことがRubyでもできます。

#/bin/ruby
require "socket"

s = TCPSocket.new("example.com", 1234)

while str = s.recv(100)
  puts str
  s.puts "hoge"
end

s.close

ポイント:

  • PythonのようにSocket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)ではなく、TCPSocketを用いる。
  • recvを用いる。getsだと最後の行まで読み込めない場合がある。