ronin-web 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,15 @@
1
+ === 0.1.0 / 2009-01-22
2
+
3
+ * Initial release.
4
+ * Provides Web.html and Web.xml methods, which use Nokogiri::HTML and
5
+ Nokogiri::XML respectively, to parse HTML and XML content.
6
+ * Supports custom Proxy and User-Agent strings, through
7
+ the Web.proxy and Web.user_agent methods respectively.
8
+ * Provides Web.agent, Web.get and Weg.post methods which access
9
+ WWW::Mechanize.
10
+ * Integrates Spidr::Agent into Web::Spider.
11
+ * Provides Web::Server, a customizable Rack web server that supports path
12
+ and host-name routing.
13
+ * Web::Server will use Mongrel, only if Mongrel is installed, otherwise
14
+ WEBrick will be used.
15
+
data/Manifest.txt ADDED
@@ -0,0 +1,25 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ lib/ronin/sessions/web.rb
6
+ lib/ronin/web.rb
7
+ lib/ronin/web/extensions.rb
8
+ lib/ronin/web/extensions/nokogiri.rb
9
+ lib/ronin/web/extensions/nokogiri/xml.rb
10
+ lib/ronin/web/extensions/nokogiri/xml/node.rb
11
+ lib/ronin/web/extensions/nokogiri/xml/text.rb
12
+ lib/ronin/web/extensions/nokogiri/xml/attr.rb
13
+ lib/ronin/web/extensions/nokogiri/xml/element.rb
14
+ lib/ronin/web/extensions/nokogiri/xml/document.rb
15
+ lib/ronin/web/server.rb
16
+ lib/ronin/web/spider.rb
17
+ lib/ronin/web/web.rb
18
+ lib/ronin/web/version.rb
19
+ tasks/spec.rb
20
+ spec/spec_helper.rb
21
+ spec/web/helpers/server.rb
22
+ spec/web/helpers/root/index.html
23
+ spec/web/helpers/root/test.txt
24
+ spec/web/extensions/nokogiri_spec.rb
25
+ spec/web/server_spec.rb
data/README.txt ADDED
@@ -0,0 +1,74 @@
1
+ = Ronin Web
2
+
3
+ * http://ronin.rubyforge.org/web/
4
+ * http://github.com/postmodern/ronin-web
5
+ * irc.freenode.net ##ronin
6
+ * Postmodern (postmodern.mod3 at gmail.com)
7
+
8
+ == DESCRIPTION:
9
+
10
+ Ronin Web is a Ruby library for Ronin that provides support for web
11
+ scraping and spidering functionality.
12
+
13
+ Ronin is a Ruby platform designed for information security and data
14
+ exploration tasks. Ronin allows for the rapid development and distribution
15
+ of code over many of the common Source-Code-Management (SCM) systems.
16
+
17
+ === Free
18
+
19
+ All source code within Ronin is licensed under the GPL-2, therefore no user
20
+ will ever have to pay for Ronin or updates to Ronin. Not only is the
21
+ source code free, the Ronin project will not sell enterprise grade security
22
+ snake-oil solutions, give private training classes or later turn Ronin into
23
+ commercial software.
24
+
25
+ === Modular
26
+
27
+ Ronin was not designed as one monolithic framework but instead as a
28
+ collection of libraries which can be individually installed. This allows
29
+ users to pick and choose what functionality they want in Ronin.
30
+
31
+ === Decentralized
32
+
33
+ Ronin does not have a central repository of exploits and payloads which
34
+ all developers contribute to. Instead Ronin has Overlays, repositories of
35
+ code that can be hosted on any CVS/SVN/Git/Rsync server. Users can then use
36
+ Ronin to quickly install or update Overlays. This allows developers and
37
+ users to form their own communities, independent of the main developers
38
+ of Ronin.
39
+
40
+ == FEATURES/PROBLEMS:
41
+
42
+ * Web access (utilizing Mechanize and Hpricot).
43
+ * Integrates Spidr into Ronin::Web::Spider.
44
+ * Provides a custom Rack web-server based on Rack::Builder.
45
+
46
+ == REQUIREMENTS:
47
+
48
+ * nokogiri >= 1.1.0
49
+ * mechanize >= 0.9.0
50
+ * spidr >= 0.1.3
51
+ * rack >= 0.9.1
52
+ * ronin >= 0.1.4
53
+
54
+ == INSTALL:
55
+
56
+ $ sudo gem install ronin-web
57
+
58
+ == LICENSE:
59
+
60
+ Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
61
+
62
+ This program is free software; you can redistribute it and/or modify
63
+ it under the terms of the GNU General Public License as published by
64
+ the Free Software Foundation; either version 2 of the License, or
65
+ (at your option) any later version.
66
+
67
+ This program is distributed in the hope that it will be useful,
68
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
69
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
70
+ GNU General Public License for more details.
71
+
72
+ You should have received a copy of the GNU General Public License
73
+ along with this program; if not, write to the Free Software
74
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require './tasks/spec.rb'
6
+ require './lib/ronin/web/version.rb'
7
+
8
+ Hoe.new('ronin-web', Ronin::Web::VERSION) do |p|
9
+ p.rubyforge_name = 'ronin'
10
+ p.developer('Postmodern', 'postmodern.mod3@gmail.com')
11
+ p.remote_rdoc_dir = 'docs/ronin-web'
12
+ p.extra_deps = [
13
+ ['nokogiri', '>=1.1.0'],
14
+ ['mechanize', '>=0.9.0'],
15
+ ['spidr', '>=0.1.3'],
16
+ ['rack', '>=0.9.1'],
17
+ ['ronin', '>=0.1.4']
18
+ ]
19
+ end
20
+
21
+ # vim: syntax=Ruby
@@ -0,0 +1,80 @@
1
+ #
2
+ #--
3
+ # Ronin Web - A Ruby library for Ronin that provides support for web
4
+ # scraping and spidering functionality.
5
+ #
6
+ # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/sessions/session'
25
+ require 'ronin/web/web'
26
+
27
+ module Ronin
28
+ module Sessions
29
+ module Web
30
+ include Session
31
+
32
+ setup_session do
33
+ parameter :web_proxy,
34
+ :default => lambda { Ronin::Web.proxy },
35
+ :description => 'Web Proxy'
36
+
37
+ parameter :web_user_agent,
38
+ :default => lambda { Ronin::Web.user_agent },
39
+ :description => 'Web User-Agent'
40
+ end
41
+
42
+ protected
43
+
44
+ def web_agent(options={},&block)
45
+ options[:proxy] ||= @web_proxy
46
+ options[:user_agent] ||= @web_user_agent
47
+
48
+ return Ronin::Web.agent(options,&block)
49
+ end
50
+
51
+ def web_get(uri,options={},&block)
52
+ page = web_agent(options).get(uri)
53
+
54
+ block.call(page) if block
55
+ return page
56
+ end
57
+
58
+ def web_get_body(uri,options={},&block)
59
+ body = web_agent(options).get(uri).body
60
+
61
+ block.call(body) if block
62
+ return body
63
+ end
64
+
65
+ def web_post(uri,options={},&block)
66
+ page = web_agent(options).post(uri)
67
+
68
+ block.call(page) if block
69
+ return page
70
+ end
71
+
72
+ def web_post_body(uri,options={},&block)
73
+ body = web_agent(options).post(uri).body
74
+
75
+ block.call(body) if block
76
+ return body
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,13 @@
1
+ require 'nokogiri/xml/attr'
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class Attr < Node
6
+
7
+ def similar?(other)
8
+ super(other) && (self.value == other.value)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ require 'nokogiri/xml/document'
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class Document < Node
6
+
7
+ #
8
+ # Returns the total count of all sub-children of the document.
9
+ #
10
+ def total_children
11
+ return 0 unless root
12
+
13
+ 1 + root.total_children
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ require 'nokogiri/xml/element'
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class Element < Node
6
+
7
+ def similar?(other)
8
+ return false unless super(other)
9
+ return false unless attribute_nodes.length == other.attribute_nodes.length
10
+
11
+ (0...attribute_nodes.length).each do |index|
12
+ attr1 = attribute_nodes[index]
13
+ attr2 = other.attribute_nodes[index]
14
+
15
+ return false unless attr1.similar?(attr2)
16
+ end
17
+
18
+ true
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,47 @@
1
+ require 'nokogiri/xml/node'
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class Node
6
+
7
+ #
8
+ # Returns the total count of all sub-children of the node.
9
+ #
10
+ def total_children
11
+ count = 0
12
+ first = self.child
13
+
14
+ return count unless first
15
+
16
+ while first
17
+ count += (1 + first.total_children)
18
+
19
+ first = first.next
20
+ end
21
+
22
+ count
23
+ end
24
+
25
+ def traverse_text(&block)
26
+ block.call(self) if text?
27
+
28
+ first = self.child
29
+
30
+ while first
31
+ first.traverse_text(&block)
32
+
33
+ first = first.next
34
+ end
35
+
36
+ self
37
+ end
38
+
39
+ def similar?(other)
40
+ return false unless other
41
+
42
+ (self.type == other.type) && (self.name == other.name)
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,13 @@
1
+ require 'nokogiri/xml/text'
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class Text < Node
6
+
7
+ def similar?(other)
8
+ super(other) && (self.content == other.content)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ require 'ronin/web/extensions/nokogiri/xml/node'
2
+ require 'ronin/web/extensions/nokogiri/xml/text'
3
+ require 'ronin/web/extensions/nokogiri/xml/attr'
4
+ require 'ronin/web/extensions/nokogiri/xml/element'
5
+ require 'ronin/web/extensions/nokogiri/xml/document'
@@ -0,0 +1,24 @@
1
+ #
2
+ #--
3
+ # Ronin Web - A Ruby library for Ronin that provides support for web
4
+ # scraping and spidering functionality.
5
+ #
6
+ # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/web/extensions/nokogiri/xml'
@@ -0,0 +1,24 @@
1
+ #
2
+ #--
3
+ # Ronin Web - A Ruby library for Ronin that provides support for web
4
+ # scraping and spidering functionality.
5
+ #
6
+ # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/web/extensions/nokogiri'