ruby-nmap 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.travis.yml +13 -0
  4. data/ChangeLog.md +24 -0
  5. data/Gemfile +12 -0
  6. data/LICENSE.txt +1 -1
  7. data/README.md +11 -9
  8. data/Rakefile +20 -24
  9. data/gemspec.yml +1 -3
  10. data/lib/nmap/cpe.rb +2 -0
  11. data/lib/nmap/cpe/cpe.rb +45 -0
  12. data/lib/nmap/cpe/url.rb +78 -0
  13. data/lib/nmap/hop.rb +20 -0
  14. data/lib/nmap/host.rb +69 -15
  15. data/lib/nmap/hostname.rb +20 -0
  16. data/lib/nmap/os.rb +2 -17
  17. data/lib/nmap/os_class.rb +65 -1
  18. data/lib/nmap/port.rb +10 -0
  19. data/lib/nmap/run_stat.rb +20 -0
  20. data/lib/nmap/scan_task.rb +4 -19
  21. data/lib/nmap/sequence.rb +6 -18
  22. data/lib/nmap/service.rb +76 -0
  23. data/lib/nmap/tcp_sequence.rb +1 -1
  24. data/lib/nmap/traceroute.rb +67 -0
  25. data/lib/nmap/uptime.rb +20 -0
  26. data/lib/nmap/version.rb +1 -1
  27. data/lib/nmap/xml.rb +134 -17
  28. data/spec/address_spec.rb +14 -0
  29. data/spec/cpe/url_spec.rb +99 -0
  30. data/spec/cpe_examples.rb +11 -0
  31. data/spec/hop_spec.rb +14 -0
  32. data/spec/host_spec.rb +138 -55
  33. data/spec/hostname_spec.rb +15 -0
  34. data/spec/ip_id_sequence_spec.rb +24 -10
  35. data/spec/os_class_spec.rb +31 -0
  36. data/spec/os_match_spec.rb +15 -0
  37. data/spec/os_spec.rb +23 -20
  38. data/spec/port_spec.rb +14 -15
  39. data/spec/run_stat_spec.rb +21 -0
  40. data/spec/scan.xml +137 -0
  41. data/spec/scan_spec.rb +28 -0
  42. data/spec/scan_task_spec.rb +35 -0
  43. data/spec/scanner_spec.rb +24 -0
  44. data/spec/scripts_examples.rb +10 -0
  45. data/spec/sequence_examples.rb +10 -0
  46. data/spec/service_spec.rb +55 -18
  47. data/spec/spec_helper.rb +30 -3
  48. data/spec/status_spec.rb +15 -0
  49. data/spec/tcp_sequence_spec.rb +32 -19
  50. data/spec/tcp_ts_sequence_spec.rb +24 -10
  51. data/spec/traceroute_spec.rb +31 -0
  52. data/spec/uptime_spec.rb +15 -0
  53. data/spec/xml_spec.rb +172 -31
  54. metadata +50 -54
  55. data/.gemtest +0 -0
  56. data/spec/helpers/nse.xml +0 -94
  57. data/spec/helpers/scan.xml +0 -241
  58. data/spec/helpers/xml.rb +0 -5
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ require 'nmap/hostname'
3
+
4
+ describe Hostname do
5
+ describe "#to_s" do
6
+ let(:type) { :user }
7
+ let(:name) { 'scanme.nmap.org' }
8
+
9
+ subject { described_class.new(type, name) }
10
+
11
+ it "should return the hostname" do
12
+ subject.to_s.should == name
13
+ end
14
+ end
15
+ end
@@ -1,20 +1,34 @@
1
1
  require 'spec_helper'
2
+ require 'sequence_examples'
3
+
2
4
  require 'nmap/ip_id_sequence'
3
5
 
4
6
  describe IpIdSequence do
5
- let(:xml) { XML.new(Helpers::SCAN_FILE) }
6
-
7
- subject { xml.hosts.first.ip_id_sequence }
7
+ subject { @xml.hosts.first.ip_id_sequence }
8
8
 
9
- it "should be accessible from host objects" do
10
- subject.should be_kind_of(IpIdSequence)
9
+ describe "#description" do
10
+ it "should parse the description" do
11
+ subject.description.should == "All zeros"
12
+ end
11
13
  end
12
14
 
13
- it "should parse the description" do
14
- subject.description.should == "Incremental"
15
- end
15
+ describe "#to_s" do
16
+ let(:description_regexp) do
17
+ /"[^"]+"/
18
+ end
16
19
 
17
- it "should parse the values" do
18
- subject.values.should == [0x1FB0, 0x1FB2, 0x1FB4, 0x1FB6, 0x1FB8, 0x1FBA]
20
+ let(:values_regexp) do
21
+ /\[\d+(, \d+){5}\]/
22
+ end
23
+
24
+ let(:regexp) do
25
+ /^description=#{description_regexp} values=#{values_regexp}$/
26
+ end
27
+
28
+ it "should contain the description and values" do
29
+ subject.to_s.should =~ regexp
30
+ end
19
31
  end
32
+
33
+ it_should_behave_like "Sequence"
20
34
  end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'cpe_examples'
3
+
4
+ require 'nmap/os'
5
+ require 'cgi'
6
+
7
+ describe OS do
8
+ subject { @xml.hosts.first.os.classes.first }
9
+
10
+ it "should parse the type" do
11
+ subject.type.should == :"general purpose"
12
+ end
13
+
14
+ it "should parse the vendor" do
15
+ subject.vendor.should == 'Linux'
16
+ end
17
+
18
+ it "should parse the family" do
19
+ subject.family.should == :Linux
20
+ end
21
+
22
+ it "should parse the gen" do
23
+ subject.gen.should == :'2.6.X'
24
+ end
25
+
26
+ it "should parse the accuracy" do
27
+ subject.accuracy.should be_between(0,100)
28
+ end
29
+
30
+ it_should_behave_like "CPE"
31
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ require 'nmap/os_match'
3
+
4
+ describe OSMatch do
5
+ describe "#to_s" do
6
+ let(:name) { 'Linux 2.6.39' }
7
+ let(:accuracy) { 97 }
8
+
9
+ subject { described_class.new(name,accuracy) }
10
+
11
+ it "should include the name and accuracy" do
12
+ subject.to_s.should == "#{name} (#{accuracy}%)"
13
+ end
14
+ end
15
+ end
@@ -4,37 +4,40 @@ require 'nmap/os'
4
4
  require 'cgi'
5
5
 
6
6
  describe OS do
7
- let(:xml) { XML.new(Helpers::SCAN_FILE) }
7
+ subject { @xml.hosts.first.os }
8
8
 
9
- subject { xml.hosts.first.os }
9
+ describe "#classes" do
10
+ subject { super().classes }
10
11
 
11
- it "should parse the OS classes" do
12
- classes = subject.classes
12
+ it { should_not be_empty }
13
13
 
14
- classes.length.should == 1
15
- classes[0].type.should == :WAP
16
- classes[0].vendor.should == 'Netgear'
17
- classes[0].family.should == :embedded
18
- classes[0].accuracy.should == 100
14
+ it "should return OSClass objects" do
15
+ subject.should all_be_kind_of(OSClass)
16
+ end
19
17
  end
20
18
 
21
- it "should parse the OS matches" do
22
- matches = subject.matches
19
+ describe "#matches" do
20
+ subject { super().matches.first }
23
21
 
24
- matches.length.should == 2
22
+ it "should parse the name" do
23
+ subject.name.should == 'Linux 2.6.39'
24
+ end
25
25
 
26
- matches[0].name.should == 'Netgear WGR614v6 wireless broadband router'
27
- matches[0].accuracy.should == 100
28
-
29
- matches[1].name.should == 'Netgear WGR614v7 or WPN824v2 wireless broadband router'
30
- matches[1].accuracy.should == 100
26
+ it "should parse the accuracy" do
27
+ subject.accuracy.should be_between(0,100)
28
+ end
31
29
  end
32
30
 
33
- it "should parse the ports used" do
34
- subject.ports_used.should == [443, 21]
31
+ describe "#ports_used" do
32
+ subject { super().ports_used }
33
+
34
+ it { subject.should_not be_empty }
35
+ it { subject.should all_be_between(0,65535) }
35
36
  end
36
37
 
37
38
  it "should parse the OS fingerprints" do
38
- subject.fingerprint.should == CGI.unescapeHTML("SCAN(V=4.68%D=8/16%OT=443%CT=21%CU=%PV=Y%DS=1%G=N%M=001D7E%TM=48A77607%P=i686-pc-linux-gnu)
SEQ(SP=19%GCD=FA00%ISR=9E%TI=I%TS=1)
OPS(O1=M5B4NW0NNT11%O2=M5B4NW0NNT11%O3=M5B4NW0NNT11%O4=M5B4NW0NNT11%O5=M5B4NW0NNT11%O6=M5B4NNT11)
WIN(W1=2000%W2=2000%W3=2000%W4=2000%W5=2000%W6=2000)
ECN(R=Y%DF=N%TG=40%W=2000%O=M5B4NW0%CC=N%Q=)
T1(R=Y%DF=N%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=N)
T4(R=N)
T5(R=Y%DF=N%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=N)
T7(R=N)
U1(R=N)
IE(R=N)
")
39
+ pending "scan.xml does not currently have an osfingerprint" do
40
+ subject.fingerprint.should == CGI.unescapeHTML("SCAN(V=4.68%D=8/16%OT=443%CT=21%CU=%PV=Y%DS=1%G=N%M=001D7E%TM=48A77607%P=i686-pc-linux-gnu)
SEQ(SP=19%GCD=FA00%ISR=9E%TI=I%TS=1)
OPS(O1=M5B4NW0NNT11%O2=M5B4NW0NNT11%O3=M5B4NW0NNT11%O4=M5B4NW0NNT11%O5=M5B4NW0NNT11%O6=M5B4NNT11)
WIN(W1=2000%W2=2000%W3=2000%W4=2000%W5=2000%W6=2000)
ECN(R=Y%DF=N%TG=40%W=2000%O=M5B4NW0%CC=N%Q=)
T1(R=Y%DF=N%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=N)
T4(R=N)
T5(R=Y%DF=N%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=N)
T7(R=N)
U1(R=N)
IE(R=N)
")
41
+ end
39
42
  end
40
43
  end
@@ -2,38 +2,37 @@ require 'spec_helper'
2
2
  require 'nmap/port'
3
3
 
4
4
  describe Port do
5
- let(:xml) { XML.new(Helpers::SCAN_FILE) }
6
-
7
- subject { xml.hosts.first.ports.first }
5
+ subject { @xml.hosts.first.ports.first }
8
6
 
9
7
  it "should parse the protocol" do
10
8
  subject.protocol.should == :tcp
11
9
  end
12
10
 
13
11
  it "should parse the port number" do
14
- subject.number.should == 21
12
+ subject.number.should == 22
15
13
  end
16
14
 
17
15
  it "should parse the state" do
18
- subject.state.should == :closed
16
+ subject.state.should == :open
19
17
  end
20
18
 
21
19
  it "should parse the reason" do
22
- subject.reason.should == 'reset'
20
+ subject.reason.should == 'syn-ack'
23
21
  end
24
22
 
25
- it "should parse the detected service" do
26
- subject.service.name.should == 'ftp'
27
- end
23
+ describe "#service" do
24
+ subject { super().service }
28
25
 
29
- context "when NSE scripts are ran" do
30
- let(:xml) { XML.new(Helpers::NSE_FILE) }
26
+ it "should return a Service object" do
27
+ subject.should be_kind_of(Service)
28
+ end
29
+ end
31
30
 
32
- it "should parse the output of scripts" do
33
- subject.scripts.should_not be_empty
31
+ include_examples "#scripts"
34
32
 
35
- subject.scripts.keys.should_not include(nil)
36
- subject.scripts.values.should_not include(nil)
33
+ describe "#inspect" do
34
+ it "should include the number" do
35
+ subject.inspect.should include(subject.number.to_s)
37
36
  end
38
37
  end
39
38
  end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ require 'nmap/run_stat'
3
+
4
+ describe RunStat do
5
+ subject { @xml.run_stats.first }
6
+
7
+ describe "#to_s" do
8
+ let(:end_time) { Time.parse('2013-07-21 00:14:33 -0700') }
9
+ let(:elapsed) { '1145.71' }
10
+ let(:summary) do
11
+ "Nmap done at Sun Jul 21 00:14:33 2013; 1 IP address (1 host up) scanned in 1145.71 seconds"
12
+ end
13
+ let(:exit_status) { 'success' }
14
+
15
+ subject { described_class.new(end_time,elapsed,summary,exit_status) }
16
+
17
+ it "should convert the RunStat to a String" do
18
+ subject.to_s.should == "#{end_time} #{elapsed} #{exit_status}"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,137 @@
1
+ <?xml version="1.0"?>
2
+ <?xml-stylesheet href="file:///usr/bin/../share/nmap/nmap.xsl" type="text/xsl"?>
3
+ <!-- Nmap 6.01 scan initiated Sat Jul 20 23:55:27 2013 as: nmap -v -sS -sU -A -O -oX spec/scan.xml scanme.nmap.org -->
4
+ <nmaprun scanner="nmap" args="nmap -v -sS -sU -A -O -oX spec/scan.xml scanme.nmap.org" start="1374389727" startstr="Sat Jul 20 23:55:27 2013" version="6.01" xmloutputversion="1.04">
5
+ <scaninfo type="syn" protocol="tcp" numservices="1000" services="1,3-4,6-7,9,13,17,19-26,30,32-33,37,42-43,49,53,70,79-85,88-90,99-100,106,109-111,113,119,125,135,139,143-144,146,161,163,179,199,211-212,222,254-256,259,264,280,301,306,311,340,366,389,406-407,416-417,425,427,443-445,458,464-465,481,497,500,512-515,524,541,543-545,548,554-555,563,587,593,616-617,625,631,636,646,648,666-668,683,687,691,700,705,711,714,720,722,726,749,765,777,783,787,800-801,808,843,873,880,888,898,900-903,911-912,981,987,990,992-993,995,999-1002,1007,1009-1011,1021-1100,1102,1104-1108,1110-1114,1117,1119,1121-1124,1126,1130-1132,1137-1138,1141,1145,1147-1149,1151-1152,1154,1163-1166,1169,1174-1175,1183,1185-1187,1192,1198-1199,1201,1213,1216-1218,1233-1234,1236,1244,1247-1248,1259,1271-1272,1277,1287,1296,1300-1301,1309-1311,1322,1328,1334,1352,1417,1433-1434,1443,1455,1461,1494,1500-1501,1503,1521,1524,1533,1556,1580,1583,1594,1600,1641,1658,1666,1687-1688,1700,1717-1721,1723,1755,1761,1782-1783,1801,1805,1812,1839-1840,1862-1864,1875,1900,1914,1935,1947,1971-1972,1974,1984,1998-2010,2013,2020-2022,2030,2033-2035,2038,2040-2043,2045-2049,2065,2068,2099-2100,2103,2105-2107,2111,2119,2121,2126,2135,2144,2160-2161,2170,2179,2190-2191,2196,2200,2222,2251,2260,2288,2301,2323,2366,2381-2383,2393-2394,2399,2401,2492,2500,2522,2525,2557,2601-2602,2604-2605,2607-2608,2638,2701-2702,2710,2717-2718,2725,2800,2809,2811,2869,2875,2909-2910,2920,2967-2968,2998,3000-3001,3003,3005-3007,3011,3013,3017,3030-3031,3052,3071,3077,3128,3168,3211,3221,3260-3261,3268-3269,3283,3300-3301,3306,3322-3325,3333,3351,3367,3369-3372,3389-3390,3404,3476,3493,3517,3527,3546,3551,3580,3659,3689-3690,3703,3737,3766,3784,3800-3801,3809,3814,3826-3828,3851,3869,3871,3878,3880,3889,3905,3914,3918,3920,3945,3971,3986,3995,3998,4000-4006,4045,4111,4125-4126,4129,4224,4242,4279,4321,4343,4443-4446,4449,4550,4567,4662,4848,4899-4900,4998,5000-5004,5009,5030,5033,5050-5051,5054,5060-5061,5080,5087,5100-5102,5120,5190,5200,5214,5221-5222,5225-5226,5269,5280,5298,5357,5405,5414,5431-5432,5440,5500,5510,5544,5550,5555,5560,5566,5631,5633,5666,5678-5679,5718,5730,5800-5802,5810-5811,5815,5822,5825,5850,5859,5862,5877,5900-5904,5906-5907,5910-5911,5915,5922,5925,5950,5952,5959-5963,5987-5989,5998-6007,6009,6025,6059,6100-6101,6106,6112,6123,6129,6156,6346,6389,6502,6510,6543,6547,6565-6567,6580,6646,6666-6669,6689,6692,6699,6779,6788-6789,6792,6839,6881,6901,6969,7000-7002,7004,7007,7019,7025,7070,7100,7103,7106,7200-7201,7402,7435,7443,7496,7512,7625,7627,7676,7741,7777-7778,7800,7911,7920-7921,7937-7938,7999-8002,8007-8011,8021-8022,8031,8042,8045,8080-8090,8093,8099-8100,8180-8181,8192-8194,8200,8222,8254,8290-8292,8300,8333,8383,8400,8402,8443,8500,8600,8649,8651-8652,8654,8701,8800,8873,8888,8899,8994,9000-9003,9009-9011,9040,9050,9071,9080-9081,9090-9091,9099-9103,9110-9111,9200,9207,9220,9290,9415,9418,9485,9500,9502-9503,9535,9575,9593-9595,9618,9666,9876-9878,9898,9900,9917,9929,9943-9944,9968,9998-10004,10009-10010,10012,10024-10025,10082,10180,10215,10243,10566,10616-10617,10621,10626,10628-10629,10778,11110-11111,11967,12000,12174,12265,12345,13456,13722,13782-13783,14000,14238,14441-14442,15000,15002-15004,15660,15742,16000-16001,16012,16016,16018,16080,16113,16992-16993,17877,17988,18040,18101,18988,19101,19283,19315,19350,19780,19801,19842,20000,20005,20031,20221-20222,20828,21571,22939,23502,24444,24800,25734-25735,26214,27000,27352-27353,27355-27356,27715,28201,30000,30718,30951,31038,31337,32768-32785,33354,33899,34571-34573,35500,38292,40193,40911,41511,42510,44176,44442-44443,44501,45100,48080,49152-49161,49163,49165,49167,49175-49176,49400,49999-50003,50006,50300,50389,50500,50636,50800,51103,51493,52673,52822,52848,52869,54045,54328,55055-55056,55555,55600,56737-56738,57294,57797,58080,60020,60443,61532,61900,62078,63331,64623,64680,65000,65129,65389"/>
6
+ <scaninfo type="udp" protocol="udp" numservices="1000" services="2-3,7,9,13,17,19-23,37-38,42,49,53,67-69,80,88,111-113,120,123,135-139,158,161-162,177,192,199,207,217,363,389,402,407,427,434,443,445,464,497,500,502,512-515,517-518,520,539,559,593,623,626,631,639,643,657,664,682-689,764,767,772-776,780-782,786,789,800,814,826,829,838,902-903,944,959,965,983,989-990,996-1001,1007-1008,1012-1014,1019-1051,1053-1060,1064-1070,1072,1080-1081,1087-1088,1090,1100-1101,1105,1124,1200,1214,1234,1346,1419,1433-1434,1455,1457,1484-1485,1524,1645-1646,1701,1718-1719,1761,1782,1804,1812-1813,1885-1886,1900-1901,1993,2000,2002,2048-2049,2051,2148,2160-2161,2222-2223,2343,2345,2362,2967,3052,3130,3283,3296,3343,3389,3401,3456-3457,3659,3664,3702-3703,4000,4008,4045,4444,4500,4666,4672,5000-5003,5010,5050,5060,5093,5351,5353,5355,5500,5555,5632,6000-6002,6004,6050,6346-6347,6970-6971,7000,7938,8000-8001,8010,8181,8193,8900,9000-9001,9020,9103,9199-9200,9370,9876-9877,9950,10000,10080,11487,16086,16402,16420,16430,16433,16449,16498,16503,16545,16548,16573,16674,16680,16697,16700,16708,16711,16739,16766,16779,16786,16816,16829,16832,16838-16839,16862,16896,16912,16918-16919,16938-16939,16947-16948,16970,16972,16974,17006,17018,17077,17091,17101,17146,17184-17185,17205,17207,17219,17236-17237,17282,17302,17321,17331-17332,17338,17359,17417,17423-17424,17455,17459,17468,17487,17490,17494,17505,17533,17549,17573,17580,17585,17592,17605,17615-17616,17629,17638,17663,17673-17674,17683,17726,17754,17762,17787,17814,17823-17824,17836,17845,17888,17939,17946,17989,18004,18081,18113,18134,18156,18228,18234,18250,18255,18258,18319,18331,18360,18373,18449,18485,18543,18582,18605,18617,18666,18669,18676,18683,18807,18818,18821,18830,18832,18835,18869,18883,18888,18958,18980,18985,18987,18991,18994,18996,19017,19022,19039,19047,19075,19096,19120,19130,19140-19141,19154,19161,19165,19181,19193,19197,19222,19227,19273,19283,19294,19315,19322,19332,19374,19415,19482,19489,19500,19503-19504,19541,19600,19605,19616,19624-19625,19632,19639,19647,19650,19660,19662-19663,19682-19683,19687,19695,19707,19717-19719,19722,19728,19789,19792,19933,19935-19936,19956,19995,19998,20003-20004,20019,20031,20082,20117,20120,20126,20129,20146,20154,20164,20206,20217,20249,20262,20279,20288,20309,20313,20326,20359-20360,20366,20380,20389,20409,20411,20423-20425,20445,20449,20464-20465,20518,20522,20525,20540,20560,20665,20678-20679,20710,20717,20742,20752,20762,20791,20817,20842,20848,20851,20865,20872,20876,20884,20919,21000,21016,21060,21083,21104,21111,21131,21167,21186,21206-21207,21212,21247,21261,21282,21298,21303,21318,21320,21333,21344,21354,21358,21360,21364,21366,21383,21405,21454,21468,21476,21514,21524-21525,21556,21566,21568,21576,21609,21621,21625,21644,21649,21655,21663,21674,21698,21702,21710,21742,21780,21784,21800,21803,21834,21842,21847,21868,21898,21902,21923,21948,21967,22029,22043,22045,22053,22055,22105,22109,22123-22124,22341,22692,22695,22739,22799,22846,22914,22986,22996,23040,23176,23354,23531,23557,23608,23679,23781,23965,23980,24007,24279,24511,24594,24606,24644,24854,24910,25003,25157,25240,25280,25337,25375,25462,25541,25546,25709,25931,26407,26415,26720,26872,26966,27015,27195,27444,27473,27482,27707,27892,27899,28122,28369,28465,28493,28543,28547,28641,28840,28973,29078,29243,29256,29810,29823,29977,30263,30303,30365,30544,30656,30697,30704,30718,30975,31059,31073,31109,31189,31195,31335,31337,31365,31625,31681,31731,31891,32345,32385,32528,32768-32780,32798,32815,32818,32931,33030,33249,33281,33354-33355,33459,33717,33744,33866,33872,34038,34079,34125,34358,34422,34433,34555,34570,34577-34580,34758,34796,34855,34861-34862,34892,35438,35702,35777,35794,36108,36206,36384,36458,36489,36669,36778,36893,36945,37144,37212,37393,37444,37602,37761,37783,37813,37843,38037,38063,38293,38412,38498,38615,39213,39217,39632,39683,39714,39723,39888,40019,40116,40441,40539,40622,40708,40711,40724,40732,40805,40847,40866,40915,41058,41081,41308,41370,41446,41524,41638,41702,41774,41896,41967,41971,42056,42172,42313,42431,42434,42508,42557,42577,42627,42639,43094,43195,43370,43514,43686,43824,43967,44101,44160,44179,44185,44190,44253,44334,44508,44923,44946,44968,45247,45380,45441,45685,45722,45818,45928,46093,46532,46836,47624,47765,47772,47808,47915,47981,48078,48189,48255,48455,48489,48761,49152-49163,49165-49182,49184-49202,49204-49205,49207-49216,49220,49222,49226,49259,49262,49306,49350,49360,49393,49396,49503,49640,49968,50099,50164,50497,50612,50708,50919,51255,51456,51554,51586,51690,51717,51905,51972,52144,52225,52503,53006,53037,53571,53589,53838,54094,54114,54281,54321,54711,54807,54925,55043,55544,55587,56141,57172,57409-57410,57813,57843,57958,57977,58002,58075,58178,58419,58631,58640,58797,59193,59207,59765,59846,60172,60381,60423,61024,61142,61319,61322,61370,61412,61481,61550,61685,61961,62154,62287,62575,62677,62699,62958,63420,63555,64080,64481,64513,64590,64727,65024"/>
7
+ <verbose level="1"/>
8
+ <debugging level="0"/>
9
+ <taskbegin task="Ping Scan" time="1374389727"/>
10
+ <taskend task="Ping Scan" time="1374389728" extrainfo="1 total hosts"/>
11
+ <taskbegin task="Parallel DNS resolution of 1 host." time="1374389728"/>
12
+ <taskend task="Parallel DNS resolution of 1 host." time="1374389728"/>
13
+ <taskbegin task="SYN Stealth Scan" time="1374389728"/>
14
+ <taskend task="SYN Stealth Scan" time="1374389730" extrainfo="1000 total ports"/>
15
+ <taskbegin task="UDP Scan" time="1374389730"/>
16
+ <taskprogress task="UDP Scan" time="1374389761" percent="4.56" remaining="649" etc="1374390410"/>
17
+ <taskprogress task="UDP Scan" time="1374389791" percent="5.97" remaining="961" etc="1374390752"/>
18
+ <taskprogress task="UDP Scan" time="1374389821" percent="9.30" remaining="888" etc="1374390708"/>
19
+ <taskprogress task="UDP Scan" time="1374389890" percent="16.06" remaining="837" etc="1374390726"/>
20
+ <taskprogress task="UDP Scan" time="1374389974" percent="23.72" remaining="785" etc="1374390759"/>
21
+ <taskprogress task="UDP Scan" time="1374390028" percent="29.04" remaining="729" etc="1374390756"/>
22
+ <taskprogress task="UDP Scan" time="1374390076" percent="34.01" remaining="672" etc="1374390747"/>
23
+ <taskprogress task="UDP Scan" time="1374390124" percent="38.89" remaining="620" etc="1374390743"/>
24
+ <taskprogress task="UDP Scan" time="1374390184" percent="44.55" remaining="566" etc="1374390749"/>
25
+ <taskprogress task="UDP Scan" time="1374390232" percent="49.43" remaining="514" etc="1374390746"/>
26
+ <taskprogress task="UDP Scan" time="1374390280" percent="54.31" remaining="463" etc="1374390743"/>
27
+ <taskprogress task="UDP Scan" time="1374390337" percent="59.66" remaining="411" etc="1374390747"/>
28
+ <taskprogress task="UDP Scan" time="1374390391" percent="64.80" remaining="360" etc="1374390750"/>
29
+ <taskprogress task="UDP Scan" time="1374390445" percent="69.94" remaining="308" etc="1374390752"/>
30
+ <taskprogress task="UDP Scan" time="1374390496" percent="75.21" remaining="253" etc="1374390748"/>
31
+ <taskprogress task="UDP Scan" time="1374390550" percent="80.36" remaining="201" etc="1374390750"/>
32
+ <taskprogress task="UDP Scan" time="1374390616" percent="85.81" remaining="147" etc="1374390763"/>
33
+ <taskprogress task="UDP Scan" time="1374390667" percent="91.00" remaining="93" etc="1374390760"/>
34
+ <taskprogress task="UDP Scan" time="1374390724" percent="96.10" remaining="41" etc="1374390764"/>
35
+ <taskend task="UDP Scan" time="1374390781" extrainfo="1000 total ports"/>
36
+ <taskbegin task="Service scan" time="1374390781"/>
37
+ <taskprogress task="Service scan" time="1374390863" percent="26.32" remaining="230" etc="1374391093"/>
38
+ <taskend task="Service scan" time="1374390863" extrainfo="19 services on 1 host"/>
39
+ <taskbegin task="Traceroute" time="1374390867"/>
40
+ <taskend task="Traceroute" time="1374390867"/>
41
+ <taskbegin task="Parallel DNS resolution of 11 hosts." time="1374390867"/>
42
+ <taskend task="Parallel DNS resolution of 11 hosts." time="1374390867"/>
43
+ <taskbegin task="NSE" time="1374390867"/>
44
+ <taskend task="NSE" time="1374390873"/>
45
+ <host starttime="1374389727" endtime="1374390873"><status state="up" reason="reset"/>
46
+ <address addr="74.207.244.221" addrtype="ipv4"/>
47
+ <hostnames>
48
+ <hostname name="scanme.nmap.org" type="user"/>
49
+ <hostname name="scanme.nmap.org" type="PTR"/>
50
+ </hostnames>
51
+ <ports><extraports state="closed" count="1910">
52
+ <extrareasons reason="port-unreaches" count="984"/>
53
+ <extrareasons reason="resets" count="926"/>
54
+ </extraports>
55
+ <extraports state="filtered" count="71">
56
+ <extrareasons reason="no-responses" count="71"/>
57
+ </extraports>
58
+ <port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="52"/><service name="ssh" product="OpenSSH" version="5.3p1 Debian 3ubuntu7" extrainfo="protocol 2.0" ostype="Linux" method="probed" conf="10"><cpe>cpe:/a:openbsd:openssh:5.3p1</cpe><cpe>cpe:/o:linux:kernel</cpe></service><script id="ssh-hostkey" output="1024 8d:60:f1:7c:ca:b7:3d:0a:d6:67:54:9d:69:d9:b9:dd (DSA)&#xa;2048 79:f8:09:ac:d4:e2:32:42:10:49:d3:bd:20:82:85:ec (RSA)"/></port>
59
+ <port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="52"/><service name="http" product="Apache httpd" version="2.2.14" extrainfo="(Ubuntu)" method="probed" conf="10"><cpe>cpe:/a:apache:http_server:2.2.14</cpe></service><script id="http-methods" output="GET HEAD POST OPTIONS"/><script id="http-title" output="Go ahead and ScanMe!"/><script id="http-favicon" output="Unknown favicon MD5: 156515DA3C0F7DC6B2493BD5CE43F795"/></port>
60
+ <port protocol="tcp" portid="9929"><state state="open" reason="syn-ack" reason_ttl="52"/><service name="nping-echo" product="Nping echo" method="probed" conf="10"/></port>
61
+ <port protocol="udp" portid="68"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="dhcpc" method="table" conf="3"/></port>
62
+ <port protocol="udp" portid="113"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="auth" method="table" conf="3"/></port>
63
+ <port protocol="udp" portid="123"><state state="open" reason="udp-response" reason_ttl="52"/><service name="ntp" product="NTP" version="v4" method="probed" conf="10"/><script id="ntp-info" output="&#xa; receive time stamp: Sun Jul 21 00:13:03 2013&#xa;"/></port>
64
+ <port protocol="udp" portid="135"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="msrpc" method="table" conf="3"/></port>
65
+ <port protocol="udp" portid="136"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="profile" method="table" conf="3"/></port>
66
+ <port protocol="udp" portid="137"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="netbios-ns" method="table" conf="3"/></port>
67
+ <port protocol="udp" portid="138"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="netbios-dgm" method="table" conf="3"/></port>
68
+ <port protocol="udp" portid="139"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="netbios-ssn" method="table" conf="3"/></port>
69
+ <port protocol="udp" portid="161"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="snmp" method="table" conf="3"/><script id="snmp-win32-shares" output="TIMEOUT"/></port>
70
+ <port protocol="udp" portid="445"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="microsoft-ds" method="table" conf="3"/></port>
71
+ <port protocol="udp" portid="520"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="route" method="table" conf="3"/></port>
72
+ <port protocol="udp" portid="1214"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="fasttrack" method="table" conf="3"/></port>
73
+ <port protocol="udp" portid="4666"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="edonkey" method="table" conf="3"/></port>
74
+ <port protocol="udp" portid="4672"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="rfa" method="table" conf="3"/></port>
75
+ <port protocol="udp" portid="5555"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="rplay" method="table" conf="3"/></port>
76
+ <port protocol="udp" portid="6346"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="gnutella" method="table" conf="3"/></port>
77
+ </ports>
78
+ <os><portused state="open" proto="tcp" portid="22"/>
79
+ <portused state="closed" proto="tcp" portid="1"/>
80
+ <portused state="closed" proto="udp" portid="2"/>
81
+ <osmatch name="Linux 2.6.39" accuracy="97" line="39326">
82
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="97"><cpe>cpe:/o:linux:kernel:2.6</cpe></osclass>
83
+ </osmatch>
84
+ <osmatch name="Linux 2.6.32 - 2.6.39" accuracy="96" line="38051">
85
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="96"><cpe>cpe:/o:linux:kernel:2.6</cpe></osclass>
86
+ </osmatch>
87
+ <osmatch name="Linux 2.6.22 - 2.6.36" accuracy="96" line="34886">
88
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="96"><cpe>cpe:/o:linux:kernel:2.6</cpe></osclass>
89
+ </osmatch>
90
+ <osmatch name="Linux 2.6.37" accuracy="96" line="38761">
91
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="96"><cpe>cpe:/o:linux:kernel:2.6.37</cpe></osclass>
92
+ </osmatch>
93
+ <osmatch name="Linux 3.0 - 3.1" accuracy="95" line="41380">
94
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="3.X" accuracy="95"><cpe>cpe:/o:linux:kernel:3</cpe></osclass>
95
+ </osmatch>
96
+ <osmatch name="Linux 2.6.38 - 3.0" accuracy="94" line="39203">
97
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="94"><cpe>cpe:/o:linux:kernel:2.6</cpe></osclass>
98
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="3.X" accuracy="94"><cpe>cpe:/o:linux:kernel:3</cpe></osclass>
99
+ </osmatch>
100
+ <osmatch name="HP P2000 G3 NAS device" accuracy="93" line="22329">
101
+ <osclass type="storage-misc" vendor="HP" osfamily="embedded" accuracy="93"/>
102
+ </osmatch>
103
+ <osmatch name="Linux 2.6.23 - 2.6.38" accuracy="93" line="35090">
104
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="93"><cpe>cpe:/o:linux:kernel:2.6</cpe></osclass>
105
+ </osmatch>
106
+ <osmatch name="Linux 2.6.31 - 2.6.35" accuracy="93" line="37093">
107
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="93"><cpe>cpe:/o:linux:kernel:2.6</cpe></osclass>
108
+ </osmatch>
109
+ <osmatch name="Linux 2.6.9 - 2.6.27" accuracy="93" line="40224">
110
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="93"><cpe>cpe:/o:linux:kernel:2.6</cpe></osclass>
111
+ </osmatch>
112
+ </os>
113
+ <uptime seconds="920430" lastboot="Wed Jul 10 08:34:03 2013"/>
114
+ <distance value="11"/>
115
+ <tcpsequence index="205" difficulty="Good luck!" values="411416F9,42069043,4155B0F2,421A04CB,41ACAD47,41D6FD50"/>
116
+ <ipidsequence class="All zeros" values="0,0,0,0,0,0"/>
117
+ <tcptssequence class="1000HZ" values="36DC8B96,36DC8BFB,36DC8C5C,36DC8CC1,36DC8D2A,36DC8D8C"/>
118
+ <trace port="80" proto="tcp">
119
+ <hop ttl="1" ipaddr="10.0.0.1" rtt="3.38"/>
120
+ <hop ttl="2" ipaddr="73.94.140.1" rtt="16.76"/>
121
+ <hop ttl="3" ipaddr="68.85.148.17" rtt="17.66" host="te-0-0-0-2-ur03.troutdale.or.bverton.comcast.net"/>
122
+ <hop ttl="4" ipaddr="68.87.216.13" rtt="18.16" host="ae-4-0-ar03.beaverton.or.bverton.comcast.net"/>
123
+ <hop ttl="5" ipaddr="68.85.243.253" rtt="17.51" host="ae-4-0-ar03.troutdale.or.bverton.comcast.net"/>
124
+ <hop ttl="6" ipaddr="68.86.91.197" rtt="24.30" host="pos-2-4-0-0-cr01.seattle.wa.ibone.comcast.net"/>
125
+ <hop ttl="7" ipaddr="208.178.58.85" rtt="20.78"/>
126
+ <hop ttl="8" ipaddr="64.214.174.246" rtt="39.95" host="Hurrican-Electric-LLC.Port-channel100.ar3.SJC2.gblx.net"/>
127
+ <hop ttl="9" ipaddr="184.105.222.13" rtt="38.44" host="10gigabitethernet3-2.core3.fmt2.he.net"/>
128
+ <hop ttl="10" ipaddr="65.49.10.218" rtt="40.50" host="linode-llc.10gigabitethernet7-6.core3.fmt2.he.net"/>
129
+ <hop ttl="11" ipaddr="74.207.244.221" rtt="37.59" host="scanme.nmap.org"/>
130
+ </trace>
131
+ <times srtt="34309" rttvar="2434" to="100000"/>
132
+ </host>
133
+ <taskbegin task="NSE" time="1374390873"/>
134
+ <taskend task="NSE" time="1374390873"/>
135
+ <runstats><finished time="1374390873" timestr="Sun Jul 21 00:14:33 2013" elapsed="1145.71" summary="Nmap done at Sun Jul 21 00:14:33 2013; 1 IP address (1 host up) scanned in 1145.71 seconds" exit="success"/><hosts up="1" down="0" total="1"/>
136
+ </runstats>
137
+ </nmaprun>
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'nmap/scan'
3
+
4
+ describe Scan do
5
+ let(:type) { :syn }
6
+ let(:protocol) { :tcp }
7
+
8
+ describe "#initialize" do
9
+ subject { described_class.new(type,protocol) }
10
+
11
+ it "should accept a type and protocol" do
12
+ subject.type.should == type
13
+ subject.protocol.should == protocol
14
+ end
15
+
16
+ it "should default services to []" do
17
+ subject.services.should == []
18
+ end
19
+ end
20
+
21
+ describe "#to_s" do
22
+ subject { described_class.new(type,protocol) }
23
+
24
+ it "should include the type and protocol" do
25
+ subject.to_s.should == "#{protocol} #{type}"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+ require 'nmap/scan_task'
3
+
4
+ describe ScanTask do
5
+ let(:name) { 'SYN Stealth Scan' }
6
+ let(:end_time) { Time.now }
7
+ let(:duration) { 10 }
8
+ let(:start_time) { end_time - duration }
9
+ let(:extrainfo) { '1000 total ports' }
10
+
11
+ subject do
12
+ described_class.new(
13
+ name,
14
+ start_time,
15
+ end_time,
16
+ extrainfo
17
+ )
18
+ end
19
+
20
+ describe "#duration" do
21
+ it "should be > 0" do
22
+ subject.duration.should > 0
23
+ end
24
+
25
+ it "should be the time between the start_time and end_time" do
26
+ (subject.start_time + subject.duration).should == subject.end_time
27
+ end
28
+ end
29
+
30
+ describe "#to_s" do
31
+ it "should include the start_time, name and extrainfo" do
32
+ subject.to_s.should == "#{start_time}: #{name} (#{extrainfo})"
33
+ end
34
+ end
35
+ end