diff --git a/spec/converters/json_spec.rb b/spec/converters/json_spec.rb new file mode 100644 index 0000000..7cc535f --- /dev/null +++ b/spec/converters/json_spec.rb @@ -0,0 +1,411 @@ +require 'spec_helper' +require 'ronin/nmap/converters/json' +require 'tempfile' +require 'nmap/xml' +require 'nmap/xml/scanner' + +RSpec.describe Ronin::Nmap::Converters::JSON do + let(:fixtures_path) { File.expand_path(File.join(__dir__, '..', 'fixtures')) } + let(:nmap_xml_path) { File.join(fixtures_path, 'nmap.xml') } + let(:json_path) { File.join(fixtures_path, 'nmap.json') } + let(:nmap_file) { Nmap::XML.open(nmap_xml_path) } + let(:expected_json) { File.read(json_path) } + + around(:each) do |example| + original_timezone = ENV['TZ'] + ENV['TZ'] = 'America/New_York' + + example.run + + ENV['TZ'] = original_timezone + end + + describe '.convert' do + let(:tempfile) { ['dest', '.json'] } + + it 'must convert nmap XML to json and write it into output' do + Tempfile.create(tempfile) do |output| + subject.convert(nmap_file, output) + + output.rewind + expect(output.read).to eq(expected_json) + end + end + end + + describe '.xml_to_json' do + let(:tempfile) { ['dest', '.json'] } + + it 'must convert nmap XML to json and write it into output' do + Tempfile.create(tempfile) do |output| + subject.xml_to_json(nmap_file, output) + + output.rewind + expect(output.read).to eq(expected_json) + end + end + end + + describe '.xml_as_json' do + it 'must convert nmap XML to json representation' do + result = subject.xml_as_json(nmap_file) + expect(JSON.dump(result)).to eq(expected_json) + end + end + + describe '.scanner_as_json' do + let(:scanner) do + Nmap::XML::Scanner.new('nmap', + '6.45', + 'nmap -v -sS -sU -A -O -oX scan.xml scanme.nmap.org', + Time.at(1429302190)) + end + let(:expected_json) do + { + name: scanner.name, + version: scanner.version, + args: scanner.arguments, + start: scanner.start_time + } + end + + it 'must convert Scanner into json representation' do + expect(subject.scanner_as_json(scanner)).to eq(expected_json) + end + end + + describe '.scan_info_as_json' do + let(:scan_info) { Nmap::XML::Scan.new('syn', 'tcp', [1,9,13,17]) } + let(:expected_json) do + { + type: scan_info.type, + protocol: scan_info.protocol, + services: scan_info.services + } + end + + it 'must convert ScanInfo into json representation' do + expect(subject.scan_info_as_json(scan_info)).to eq(expected_json) + end + end + + describe '.run_stat_as_json' do + let(:run_stat) { Nmap::XML::RunStat.new(Time.at(1429240388), '21.13', 'summary', 'success') } + let(:expected_json) do + { + end_time: run_stat.end_time, + elapsed: run_stat.elapsed, + summary: run_stat.summary, + exit_status: run_stat.exit_status + } + end + + it 'must convert RunStat into json representation' do + expect(subject.run_stat_as_json(run_stat)).to eq(expected_json) + end + end + + describe '.scan_task_as_json' do + let(:scan_task) { Nmap::XML::ScanTask.new('name', Time.at(1429240388), Time.at(1429240390), '1 total hosts') } + let(:expected_json) do + { + name: scan_task.name, + start_time: scan_task.start_time, + end_time: scan_task.end_time, + extra_info: scan_task.extra_info + } + end + + it 'must convert ScanTask into json representation' do + expect(subject.scan_task_as_json(scan_task)).to eq(expected_json) + end + end + + describe '.host_as_json' do + let(:host) { nmap_file.host } + let(:expected_json) do + { + start_time: host.start_time, + end_time: host.end_time, + status: subject.status_as_json(host.status), + addresses: host.each_address.map { |address| subject.address_as_json(address) }, + hostnames: host.each_hostname.map { |hostname| subject.hostname_as_json(hostname) }, + os: subject.os_as_json(host.os), + uptime: subject.uptime_as_json(host.uptime), + tcp_sequence: subject.tcp_sequence_as_json(host.tcp_sequence), + ip_id_sequence: subject.ip_id_sequence_as_json(host.ip_id_sequence), + tcp_ts_sequence: subject.tcp_ts_sequence_as_json(host.tcp_ts_sequence), + ports: host.each_port.map { |port| subject.port_as_json(port) }, + traceroute: subject.traceroute_as_json(host.traceroute) + } + end + + it 'must convert Host to json representation' do + expect(subject.host_as_json(host)).to eq(expected_json) + end + end + + describe '.status_as_json' do + let(:status) { Nmap::XML::Status.new('up', 'reset', '54') } + let(:expected_json) do + { + state: status.state, + reason: status.reason, + reason_ttl: status.reason_ttl + } + end + + it 'must convert Status into json representation' do + expect(subject.status_as_json(status)).to eq(expected_json) + end + end + + describe '.address_as_json' do + let(:address) { Nmap::XML::Address.new('ipv4', '45.33.32.156', 'vendor') } + let(:expected_json) do + { + type: address.type, + addr: address.addr, + vendor: address.vendor + } + end + + it 'must convert Address into json representation' do + expect(subject.address_as_json(address)).to eq(expected_json) + end + end + + describe '.hostname_as_json' do + let(:hostname) { Nmap::XML::Hostname.new('scanme.nmap.org', 'user') } + let(:expected_json) do + { + type: hostname.type, + name: hostname.name + } + end + + it 'must convert Address into json representation' do + expect(subject.hostname_as_json(hostname)).to eq(expected_json) + end + end + + describe '.os_as_json' do + let(:os) { nmap_file.host.os } + let(:expected_json) do + { + os_classes: os.each_class.map { |os_class| subject.os_class_as_json(os_class) }, + os_matches: os.each_match.map { |os_match| subject.os_match_as_json(os_match) }, + ports_used: os.ports_used + } + end + + it 'must convert OS into json representation' do + expect(subject.os_as_json(os)).to eq(expected_json) + end + end + + describe '.os_class_as_json' do + let(:os_class) { nmap_file.host.os.classes.first } + let(:expected_json) do + { + type: os_class.type, + vendor: os_class.vendor, + family: os_class.family, + gen: os_class.gen, + accuracy: os_class.accuracy + } + end + + it 'must convert OSClass into json representation' do + expect(subject.os_class_as_json(os_class)).to eq(expected_json) + end + end + + describe '.os_match_as_json' do + let(:os_match) { Nmap::XML::OSMatch.new('Linux 3.0', '94') } + let(:expected_json) do + { + name: os_match.name, + accuracy: os_match.accuracy + } + end + + it 'must convert OSMatch into json representation' do + expect(subject.os_match_as_json(os_match)).to eq(expected_json) + end + end + + describe '.uptime_as_json' do + let(:uptime) { Nmap::XML::Uptime.new('142510', 'Wed Apr 15 22:08:02 2015') } + let(:expected_json) do + { + seconds: uptime.seconds, + last_boot: uptime.last_boot + } + end + + it 'must convert Uptime into json representation' do + expect(subject.uptime_as_json(uptime)).to eq(expected_json) + end + end + + describe '.tcp_sequence_as_json' do + let(:sequence) { nmap_file.host.tcp_sequence } + let(:expected_json) do + { + description: sequence.description, + values: sequence.values, + index: sequence.index, + difficulty: sequence.difficulty + } + end + + it 'must convert TcpSequence into json representation' do + expect(subject.tcp_sequence_as_json(sequence)).to eq(expected_json) + end + end + + describe '.ip_id_sequence_as_json' do + let(:sequence) { nmap_file.host.ip_id_sequence } + let(:expected_json) do + { + description: sequence.description, + values: sequence.values + } + end + + it 'must convert IpIdSequence into json representation' do + expect(subject.ip_id_sequence_as_json(sequence)).to eq(expected_json) + end + end + + describe '.tcp_ts_sequence_as_json' do + let(:sequence) { nmap_file.host.tcp_ts_sequence } + let(:expected_json) do + { + description: sequence.description, + values: sequence.values + } + end + + it 'must convert TcpTsSequence into json representation' do + expect(subject.tcp_ts_sequence_as_json(sequence)).to eq(expected_json) + end + end + + describe '.sequence_as_json' do + let(:sequence) { nmap_file.host.tcp_sequence } + let(:expected_json) do + { + description: sequence.description, + values: sequence.values + } + end + + it 'must convert Sequence into json representation' do + expect(subject.sequence_as_json(sequence)).to eq(expected_json) + end + end + + describe '.port_as_json' do + let(:port) { nmap_file.host.ports.first } + let(:expected_json) do + { + protocol: port.protocol, + number: port.number, + state: port.state, + reason: port.reason, + reason_ttl: port.reason_ttl, + scripts: subject.scripts_as_json(port), + service: subject.service_as_json(port.service) + } + end + + it 'converts nmap Port into json representation' do + expect(subject.port_as_json(port)).to eq(expected_json) + end + end + + describe '.service_as_json' do + let(:service) { nmap_file.host.ports.first.service } + let(:expected_json) do + { + name: service.name, + ssl: service.ssl?, + protocol: service.protocol, + product: service.product, + version: service.version, + extra_info: service.extra_info, + hostname: service.hostname, + os_type: service.os_type, + device_type: service.device_type, + fingerprint_method: service.fingerprint_method, + fingerprint: service.fingerprint, + confidence: service.confidence + } + end + + it 'converts nmap Service into json representation' do + expect(subject.service_as_json(service)).to eq(expected_json) + end + end + + describe '.scripts_as_json' do + let(:has_scripts) { nmap_file.host.ports.first } + let(:expected_json) do + has_scripts.scripts.transform_values do |script| + subject.script_as_json(script) + end + end + + it 'must convert Script into json representation' do + expect(subject.scripts_as_json(has_scripts)).to eq(expected_json) + end + end + + describe '.script_as_json' do + let(:script) { nmap_file.host.ports.first.scripts.first[1] } + let(:expected_json) do + { + id: script.id, + output: script.output, + data: script.data + } + end + + it 'must convert Script into json representation' do + expect(subject.script_as_json(script)).to eq(expected_json) + end + end + + describe '.traceroute_as_json' do + let(:traceroute) { nmap_file.host.traceroute } + let(:expected_json) do + { + port: traceroute.port, + protocol: traceroute.protocol, + traceroute: traceroute.map { |hop| subject.hop_as_json(hop) } + } + end + + it 'must convert Traceroute into json representation' do + expect(subject.traceroute_as_json(traceroute)).to eq(expected_json) + end + end + + describe '.hop_as_json' do + let(:hop) { Nmap::XML::Hop.new('10.0.0.1', 'router4-fmt.linode.com', '1', '0.67') } + let(:expected_json) do + { + addr: hop.addr, + host: hop.host, + ttl: hop.ttl, + rtt: hop.rtt + } + end + + it 'must convert Hop into json representation' do + expect(subject.hop_as_json(hop)).to eq(expected_json) + end + end +end diff --git a/spec/fixtures/nmap.json b/spec/fixtures/nmap.json new file mode 100644 index 0000000..75681e1 --- /dev/null +++ b/spec/fixtures/nmap.json @@ -0,0 +1 @@ +{"scanner":{"name":"nmap","version":"6.45","args":"nmap -v -sS -sU -A -O --script ssh2-enum-algos,ssh-hostkey -oX spec/fixtures/scan.xml scanme.nmap.org","start":"2015-04-17 16:23:10 -0400"},"version":"1.04","scan_info":[{"type":"syn","protocol":"tcp","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]},{"type":"udp","protocol":"udp","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]}],"run_stats":[{"end_time":"2015-04-17 16:43:12 -0400","elapsed":"1202.42","summary":"Nmap done at Fri Apr 17 13:43:12 2015; 1 IP address (1 host up) scanned in 1202.42 seconds","exit_status":"success"}],"verbose":1,"debugging":0,"tasks":[{"name":"Ping Scan","start_time":"2015-04-17 16:23:10 -0400","end_time":"2015-04-17 16:23:10 -0400","extra_info":"1 total hosts"},{"name":"Parallel DNS resolution of 1 host.","start_time":"2015-04-17 16:23:10 -0400","end_time":"2015-04-17 16:23:21 -0400","extra_info":null},{"name":"SYN Stealth Scan","start_time":"2015-04-17 16:23:21 -0400","end_time":"2015-04-17 16:23:23 -0400","extra_info":"1000 total ports"},{"name":"UDP Scan","start_time":"2015-04-17 16:23:23 -0400","end_time":"2015-04-17 16:40:59 -0400","extra_info":"1000 total ports"},{"name":"Service scan","start_time":"2015-04-17 16:40:59 -0400","end_time":"2015-04-17 16:42:21 -0400","extra_info":"20 services on 1 host"},{"name":"Traceroute","start_time":"2015-04-17 16:42:25 -0400","end_time":"2015-04-17 16:42:28 -0400","extra_info":null},{"name":"Parallel DNS resolution of 10 hosts.","start_time":"2015-04-17 16:42:28 -0400","end_time":"2015-04-17 16:42:42 -0400","extra_info":null},{"name":"NSE","start_time":"2015-04-17 16:42:42 -0400","end_time":"2015-04-17 16:43:12 -0400","extra_info":null},{"name":"NSE","start_time":"2015-04-17 16:43:12 -0400","end_time":"2015-04-17 16:43:12 -0400","extra_info":null}],"hosts":[{"start_time":"2015-04-17 16:23:10 -0400","end_time":"2015-04-17 16:43:12 -0400","status":{"state":"up","reason":"reset","reason_ttl":54},"addresses":[{"type":"ipv4","addr":"45.33.32.156","vendor":null}],"hostnames":[{"type":"user","name":"scanme.nmap.org"},{"type":"PTR","name":"li982-156.members.linode.com"}],"os":{"os_classes":[{"type":"general purpose","vendor":"Linux","family":"Linux","gen":"3.X","accuracy":94},{"type":"general purpose","vendor":"Linux","family":"Linux","gen":"2.6.X","accuracy":94},{"type":"general purpose","vendor":"Linux","family":"Linux","gen":"3.X","accuracy":94},{"type":"general purpose","vendor":"Linux","family":"Linux","gen":"2.6.X","accuracy":93},{"type":"general purpose","vendor":"Linux","family":"Linux","gen":"2.6.X","accuracy":92},{"type":"WAP","vendor":"Netgear","family":"embedded","accuracy":91},{"type":"media device","vendor":"Western Digital","family":"embedded","accuracy":91},{"type":"general purpose","vendor":"Linux","family":"Linux","gen":"2.6.X","accuracy":91},{"type":"general purpose","vendor":"Linux","family":"Linux","gen":"3.X","accuracy":91},{"type":"general purpose","vendor":"Linux","family":"Linux","gen":"2.6.X","accuracy":91},{"type":"storage-misc","vendor":"HP","family":"embedded","accuracy":91},{"type":"general purpose","vendor":"Linux","family":"Linux","gen":"2.6.X","accuracy":90}],"os_matches":[{"name":"Linux 3.0","accuracy":94},{"name":"Linux 2.6.26 - 2.6.35","accuracy":94},{"name":"Linux 3.0 - 3.9","accuracy":94},{"name":"Linux 2.6.23 - 2.6.38","accuracy":93},{"name":"Linux 2.6.32","accuracy":92},{"name":"Netgear DG834G WAP or Western Digital WD TV media player","accuracy":91},{"name":"Linux 2.6.32 - 3.9","accuracy":91},{"name":"Linux 2.6.8 - 2.6.27","accuracy":91},{"name":"HP P2000 G3 NAS device","accuracy":91},{"name":"Linux 2.6.22","accuracy":90}],"ports_used":[22,1,2]},"uptime":{"seconds":142510,"last_boot":"2015-04-15 22:08:02 -0400"},"tcp_sequence":{"description":null,"values":[2003789810,2551658239,3896849460,2640469570,432386215,656392704],"index":262,"difficulty":"Good luck!"},"ip_id_sequence":{"description":"All zeros","values":[0,0,0,0,0,0]},"tcp_ts_sequence":{"description":"other","values":[42168890,42168918,42168949,42168982,42169010,42169038]},"ports":[{"protocol":"tcp","number":22,"state":"open","reason":"syn-ack","reason_ttl":"syn-ack","service":{"name":"ssh","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":"protocol 2.0","hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"probed","fingerprint":"SF-Port22-TCP:V=6.45%I=7%D=4/17%Time=55316FE1%P=x86_64-redhat-linux-gnu%r(NULL,29,\"SSH-2\\.0-OpenSSH_6\\.6\\.1p1\\x20Ubuntu-2ubuntu2\\r\\n\");","confidence":10},"scripts":{"ssh-hostkey":{"id":"ssh-hostkey","output":"\n 1024 ac:00:a0:1a:82:ff:cc:55:99:dc:67:2b:34:97:6b:75 (DSA)\nssh-dss AAAAB3NzaC1kc3MAAACBAOe8o59vFWZGaBmGPVeJBObEfi1AR8yEUYC/Ufkku3sKhGF7wM2m2ujIeZDK5vqeC0S5EN2xYo6FshCP4FQRYeTxD17nNO4PhwW65qAjDRRU0uHFfSAh5wk+vt4yQztOE++sTd1G9OBLzA8HO99qDmCAxb3zw+GQDEgPjzgyzGZ3AAAAFQCBmE1vROP8IaPkUmhM5xLFta/xHwAAAIEA3EwRfaeOPLL7TKDgGX67Lbkf9UtdlpCdC4doMjGgsznYMwWH6a7Lj3vi4/KmeZZdix6FMdFqq+2vrfT1DRqx0RS0XYdGxnkgS+2g333WYCrUkDCn6RPUWR/1TgGMPHCj7LWCa1ZwJwLWS2KX288Pa2gLOWuhZm2VYKSQx6NEDOIAAACBANxIfprSdBdbo4Ezrh6/X6HSvrhjtZ7MouStWaE714ByO5bS2coM9CyaCwYyrE5qzYiyIfb+1BG3O5nVdDuN95sQ/0bAdBKlkqLFvFqFjVbETF0ri3v97w6MpUawfF75ouDrQ4xdaUOLLEWTso6VFJcM6Jg9bDl0FA0uLZUSDEHL\n 2048 20:3d:2d:44:62:2a:b0:5a:9d:b5:b3:05:14:c2:a6:b2 (RSA)\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6afooTZ9mVUGFNEhkMoRR1Btzu64XXwElhCsHw/zVlIx/HXylNbb9+11dm2VgJQ21pxkWDs+L6+EbYyDnvRURTrMTgHL0xseB0EkNqexs9hYZSiqtMx4jtGNtHvsMxZnbxvVUk2dasWvtBkn8J5JagSbzWTQo4hjKMOI1SUlXtiKxAs2F8wiq2EdSuKw/KNk8GfIp1TA+8ccGeAtnsVptTJ4D/8MhAWsROkQzOowQvnBBz2/8ecEvoMScaf+kDfNQowK3gENtSSOqYw9JLOza6YJBPL/aYuQQ0nJ74Rr5vL44aNIlrGI9jJc2x0bV7BeNA5kVuXsmhyfWbbkB8yGd\n 256 96:02:bb:5e:57:54:1c:4e:45:2f:56:4c:4a:24:b2:57 (ECDSA)\necdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMD46g67x6yWNjjQJnXhiz/TskHrqQ0uPcOspFrIYW382uOGzmWDZCFV8FbFwQyH90u+j0Qr1SGNAxBZMhOQ8pc=","data":[{"fingerprint":"ac00a01a82ffcc5599dc672b34976b75","key":"QUFBQUIzTnphQzFrYzNNQUFBQ0JBT2U4bzU5dkZXWkdhQm1HUFZlSkJPYkVmaTFBUjh5RVVZQy9VZmtrdTNzS2hHRjd3TTJtMnVqSWVaREs1dnFlQzBTNUVOMnhZbzZGc2hDUDRGUVJZZVR4RDE3bk5PNFBod1c2NXFBakRSUlUwdUhGZlNBaDV3ayt2dDR5UXp0T0UrK3NUZDFHOU9CTHpBOEhPOTlxRG1DQXhiM3p3K0dRREVnUGp6Z3l6R1ozQUFBQUZRQ0JtRTF2Uk9QOElhUGtVbWhNNXhMRnRhL3hId0FBQUlFQTNFd1JmYWVPUExMN1RLRGdHWDY3TGJrZjlVdGRscENkQzRkb01qR2dzem5ZTXdXSDZhN0xqM3ZpNC9LbWVaWmRpeDZGTWRGcXErMnZyZlQxRFJxeDBSUzBYWWRHeG5rZ1MrMmczMzNXWUNyVWtEQ242UlBVV1IvMVRnR01QSENqN0xXQ2ExWndKd0xXUzJLWDI4OFBhMmdMT1d1aFptMlZZS1NReDZORURPSUFBQUNCQU54SWZwclNkQmRibzRFenJoNi9YNkhTdnJoanRaN01vdVN0V2FFNzE0QnlPNWJTMmNvTTlDeWFDd1l5ckU1cXpZaXlJZmIrMUJHM081blZkRHVOOTVzUS8wYkFkQktsa3FMRnZGcUZqVmJFVEYwcmkzdjk3dzZNcFVhd2ZGNzVvdURyUTR4ZGFVT0xMRVdUc282VkZKY002Smc5YkRsMEZBMHVMWlVTREVITA==","type":"ssh-dss","bits":"1024"},{"fingerprint":"203d2d44622ab05a9db5b30514c2a6b2","key":"QUFBQUIzTnphQzF5YzJFQUFBQURBUUFCQUFBQkFRQzZhZm9vVFo5bVZVR0ZORWhrTW9SUjFCdHp1NjRYWHdFbGhDc0h3L3pWbEl4L0hYeWxOYmI5KzExZG0yVmdKUTIxcHhrV0RzK0w2K0ViWXlEbnZSVVJUck1UZ0hMMHhzZUIwRWtOcWV4czloWVpTaXF0TXg0anRHTnRIdnNNeFpuYnh2VlVrMmRhc1d2dEJrbjhKNUphZ1NieldUUW80aGpLTU9JMVNVbFh0aUt4QXMyRjh3aXEyRWRTdUt3L0tOazhHZklwMVRBKzhjY0dlQXRuc1ZwdFRKNEQvOE1oQVdzUk9rUXpPb3dRdm5CQnoyLzhlY0V2b01TY2FmK2tEZk5Rb3dLM2dFTnRTU09xWXc5SkxPemE2WUpCUEwvYVl1UVEwbko3NFJyNXZMNDRhTklsckdJOWpKYzJ4MGJWN0JlTkE1a1Z1WHNtaHlmV2Jia0I4eUdk","type":"ssh-rsa","bits":"2048"},{"fingerprint":"9602bb5e57541c4e452f564c4a24b257","key":"QUFBQUUyVmpaSE5oTFhOb1lUSXRibWx6ZEhBeU5UWUFBQUFJYm1semRIQXlOVFlBQUFCQkJNRDQ2ZzY3eDZ5V05qalFKblhoaXovVHNrSHJxUTB1UGNPc3BGcklZVzM4MnVPR3ptV0RaQ0ZWOEZiRndReUg5MHUrajBRcjFTR05BeEJaTWhPUThwYz0=","type":"ecdsa-sha2-nistp256","bits":"256"}]},"ssh2-enum-algos":{"id":"ssh2-enum-algos","output":"\n kex_algorithms: (8)\n curve25519-sha256@libssh.org\n ecdh-sha2-nistp256\n ecdh-sha2-nistp384\n ecdh-sha2-nistp521\n diffie-hellman-group-exchange-sha256\n diffie-hellman-group-exchange-sha1\n diffie-hellman-group14-sha1\n diffie-hellman-group1-sha1\n server_host_key_algorithms: (4)\n ssh-rsa\n ssh-dss\n ecdsa-sha2-nistp256\n ssh-ed25519\n encryption_algorithms: (16)\n aes128-ctr\n aes192-ctr\n aes256-ctr\n arcfour256\n arcfour128\n aes128-gcm@openssh.com\n aes256-gcm@openssh.com\n chacha20-poly1305@openssh.com\n aes128-cbc\n 3des-cbc\n blowfish-cbc\n cast128-cbc\n aes192-cbc\n aes256-cbc\n arcfour\n rijndael-cbc@lysator.liu.se\n mac_algorithms: (19)\n hmac-md5-etm@openssh.com\n hmac-sha1-etm@openssh.com\n umac-64-etm@openssh.com\n umac-128-etm@openssh.com\n hmac-sha2-256-etm@openssh.com\n hmac-sha2-512-etm@openssh.com\n hmac-ripemd160-etm@openssh.com\n hmac-sha1-96-etm@openssh.com\n hmac-md5-96-etm@openssh.com\n hmac-md5\n hmac-sha1\n umac-64@openssh.com\n umac-128@openssh.com\n hmac-sha2-256\n hmac-sha2-512\n hmac-ripemd160\n hmac-ripemd160@openssh.com\n hmac-sha1-96\n hmac-md5-96\n compression_algorithms: (2)\n none\n zlib@openssh.com","data":{"kex_algorithms":["curve25519-sha256@libssh.org","ecdh-sha2-nistp256","ecdh-sha2-nistp384","ecdh-sha2-nistp521","diffie-hellman-group-exchange-sha256","diffie-hellman-group-exchange-sha1","diffie-hellman-group14-sha1","diffie-hellman-group1-sha1"],"server_host_key_algorithms":["ssh-rsa","ssh-dss","ecdsa-sha2-nistp256","ssh-ed25519"],"encryption_algorithms":["aes128-ctr","aes192-ctr","aes256-ctr","arcfour256","arcfour128","aes128-gcm@openssh.com","aes256-gcm@openssh.com","chacha20-poly1305@openssh.com","aes128-cbc","3des-cbc","blowfish-cbc","cast128-cbc","aes192-cbc","aes256-cbc","arcfour","rijndael-cbc@lysator.liu.se"],"mac_algorithms":["hmac-md5-etm@openssh.com","hmac-sha1-etm@openssh.com","umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com","hmac-ripemd160-etm@openssh.com","hmac-sha1-96-etm@openssh.com","hmac-md5-96-etm@openssh.com","hmac-md5","hmac-sha1","umac-64@openssh.com","umac-128@openssh.com","hmac-sha2-256","hmac-sha2-512","hmac-ripemd160","hmac-ripemd160@openssh.com","hmac-sha1-96","hmac-md5-96"],"compression_algorithms":["none","zlib@openssh.com"]}}}},{"protocol":"tcp","number":80,"state":"open","reason":"syn-ack","reason_ttl":"syn-ack","service":{"name":"http","ssl":false,"protocol":null,"product":"Apache httpd","version":"2.4.7","extra_info":"(Ubuntu)","hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"probed","fingerprint":null,"confidence":10},"scripts":{}},{"protocol":"tcp","number":9929,"state":"open","reason":"syn-ack","reason_ttl":"syn-ack","service":{"name":"nping-echo","ssl":false,"protocol":null,"product":"Nping echo","version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"probed","fingerprint":null,"confidence":10},"scripts":{}},{"protocol":"tcp","number":31337,"state":"open","reason":"syn-ack","reason_ttl":"syn-ack","service":{"name":"ncat-chat","ssl":true,"protocol":null,"product":"Ncat chat","version":null,"extra_info":"users: nobody","hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"probed","fingerprint":null,"confidence":10},"scripts":{}},{"protocol":"udp","number":68,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"dhcpc","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":113,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"auth","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":123,"state":"open","reason":"udp-response","reason_ttl":"udp-response","service":{"name":"ntp","ssl":false,"protocol":null,"product":"NTP","version":"v4","extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"probed","fingerprint":null,"confidence":10},"scripts":{}},{"protocol":"udp","number":135,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"msrpc","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":136,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"profile","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":137,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"netbios-ns","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":138,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"netbios-dgm","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":139,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"netbios-ssn","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":161,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"snmp","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":445,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"microsoft-ds","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":520,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"route","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":1214,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"fasttrack","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":4666,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"edonkey","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":4672,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"rfa","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":5555,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"rplay","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}},{"protocol":"udp","number":6346,"state":"open|filtered","reason":"no-response","reason_ttl":"no-response","service":{"name":"gnutella","ssl":false,"protocol":null,"product":null,"version":null,"extra_info":null,"hostname":null,"os_type":null,"device_type":null,"fingerprint_method":"table","fingerprint":null,"confidence":3},"scripts":{}}],"traceroute":{"port":80,"protocol":"tcp","traceroute":[{"addr":"10.0.0.1","host":null,"ttl":"1","rtt":"0.67"},{"addr":"68.87.218.65","host":"xe-3-1-2-0-sur04.troutdale.or.bverton.comcast.net","ttl":"3","rtt":"21.22"},{"addr":"68.87.216.253","host":"et-5-0-0-0-0-ar03.troutdale.or.bverton.comcast.net","ttl":"4","rtt":"19.93"},{"addr":"68.86.93.25","host":"he-0-4-0-0-11-cr02.seattle.wa.ibone.comcast.net","ttl":"5","rtt":"21.56"},{"addr":"68.86.85.62","host":"he-0-10-0-1-pe04.seattle.wa.ibone.comcast.net","ttl":"6","rtt":"18.52"},{"addr":"65.19.191.137","host":"10ge1-20.core1.sea1.he.net","ttl":"7","rtt":"29.30"},{"addr":"72.52.92.157","host":"10ge13-4.core1.sjc2.he.net","ttl":"8","rtt":"33.93"},{"addr":"184.105.222.13","host":"10ge3-2.core3.fmt2.he.net","ttl":"9","rtt":"34.66"},{"addr":"64.71.132.138","host":"router4-fmt.linode.com","ttl":"10","rtt":"35.65"},{"addr":"45.33.32.156","host":"li982-156.members.linode.com","ttl":"11","rtt":"35.92"}]}}]} \ No newline at end of file