From: Florian Gross Date: 2004-12-16T20:42:17+09:00 Subject: Re: P2P application in 15 lines of Python posted on slashdot --------------010508040902040105030703 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit slonik AZ wrote: > slashdot published an article on someone's > 15 lines long Peer-2-Peer application > http://developers.slashdot.org/article.pl?sid=04/12/15/1953227 > > Another person followed up with a 9 line equivalent Perl code. > > I wonder what an equivalent Ruby program would look like? I did this 9.5 hours ago. Compared to the python one it is not vulnerable to File stealing attacks (a client can request a file .../foobar and ~/foobar from the python server and will get it back AFAIK) and 6 lines long. It is however vulnerable to the DRb style ..instance_eval exploits. I will fix this shortly, but I might have to use 7 lines then. --------------010508040902040105030703 Content-Type: text/plain; name="p2p.rb" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="p2p.rb" # Server: ruby p2p.rb password server server-uri merge-servers # Sample: ruby p2p.rb foobar server druby://localhost:1337 druby://foo.bar:1337 # Client: ruby p2p.rb password client server-uri download-pattern # Sample: ruby p2p.rb foobar client druby://localhost:1337 *.rb require'drb';F,D,C,P,M,U,*O=File,Class,Dir,*ARGV;def s(p)F.split(p[/[^|].*/])[-1 ]end;def c(u);DRbObject.new((),u)end;def x(u)[P,u].hash;end;M=="client"&&c(U).f( x(U)).each{|n|p,c=x(n),c(n);(c.f(p,O[0],0).map{|f|s f}-D["*"]).each{|f|F.open(f, "w"){|o|o<