From: Zed Shaw Date: 2006-07-07T18:06:26+09:00 Subject: [ANN] RFuzz HTTP Destroyer 0.2 -- Ragel HTTP Client In my constant quest to turn evil activities into useful tools I have started the RFuzz HTTP Destroyer project (or just RFuzz until I can find a better name). RFuzz will eventually become a small framework that lets people write Ruby scripts that destroy web servers. No, not so you can be a script kiddie. So you can harden your web applications and servers against script kiddies. It's based on little bits of Ruby floating around my Mongrel (http://mongrel.rubyforge.org) source that I use to make Mongrel cry. Mongrel is a tough little web server because of these scripts, so I'm now turning them into something everyone can use. == The HttpClient The 0.2 release features a nearly full complete and functioning HTTP client that's only about 183 lines of ruby code, and re-uses parts of the Mongrel HTTP parser. This means that it's a client that can also validate the correctness of HTTP servers. It also means that it's tiny, fast, and requires you to build a C extension. If you can install Mongrel then you can install rfuzz. Features of the HttpClient are: 1. Simple usage that let's you configure the client object once and reduce repetition. 2. No blocks, nested exceptions, inconsistent functions, weird parameters, or unrequested timeouts. It's bare metal and simple. 3. No threads, no timeouts, no exception handling. This is for those who want to feel everything like an aluminum bat fighting a chain saw. 4. Functions to encode and decode much of HTTP outside of the library. 5. A notification plugin Notifier class so you can track the process easily. 6. All parameters are set with "data", meaning you could load it out of a YAML file and replay a client request or serialize the request for later. 7. Dynamically supports any HTTP method, and even those retarded ones that I can't anticipate because RESTafarians decided this was a GoodThing(tm) and broke the protocol by inventing "verbs". 8. Decodes all of the HTTP protocol responses cleanly and reports parsing errors immediately. 9. Tracks cookies between requests to emulate a client (has a reset). 10. Cookies suck, but work well enough to thrash a Rails app. 11. Body payload is supported, but no encoding done (you do this). 12. Response object is just a Hash for headers with a set of additional attributes: http_status, http_body, http_reason, http_version. This is wired hot inside the http11_client extension so it's fast as hell. == Informations Available * http://www.zedshaw.com/projects/rfuzz/ -- Simple project page. * http://www.zedshaw.com/projects/rfuzz/coverage/ -- Source and rcov. * http://pastie.caboo.se/3667 -- The sample script. * http://pastie.caboo.se/3668 -- Sample script output. * http://www.zedshaw.com/projects/rfuzz/rfuzz-0.2.gem * http://www.zedshaw.com/projects/rfuzz/rfuzz-0.2.tgz == !!!! WARNING !!!! This is still kind of "works for me" code. In order for the tests to run you'll have to fire up a rails app on localhost:3000. Doesn't matter what's in it, just any one. I'll be adding more to the test suite so this isn't needed. PS. Yes I'm working on updating my blog so STFU already. -- Zed A. Shaw http://www.zedshaw.com/ http://mongrel.rubyforge.org/ http://www.railsmachine.com/ -- Need Mongrel support?