CTFのGuerrilla Programmingも、PythonではなくRubyで(Socket編)
CTF(Capture The Flag)のジャンルのひとつであるGuerrilla Programming。DEFCONやSECCONのWrite upは、ほぼPythonで書かれています。しかし日本人である私にとっては、Rubyの方が得意です。
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だと最後の行まで読み込めない場合がある。