ruby-nmap 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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