1
0
mirror of https://github.com/nmap/nmap.git synced 2026-01-03 13:19:04 +00:00

Script now outputs spaced tables (NmapOutputTable style) instead of tab separated tables so large varying zone transfers line up properly (for an example see cvs.openbsd.org)

This commit is contained in:
ejlbell
2008-01-15 19:52:55 +00:00
parent bee7421e19
commit 5e8504f445

View File

@@ -22,6 +22,7 @@ require('strbuf')
require('stdnse')
require('listop')
require('bit')
require('tab')
id = 'zone-transfer'
author = 'Eddie Bell <ejlbell@gmail.com>'
@@ -187,18 +188,17 @@ function get_rdata(data, offset, ttype)
end
-- get a single answer record from the current offset
function get_answer_record(data, offset)
local line, record, rdlen, ttype
record = strbuf.new()
function get_answer_record(table, data, offset)
local line, rdlen, ttype
-- answer domain
offset, line = parse_domain(data, offset)
record = record .. line
tab.add(table, 1, line)
-- answer record type
ttype = bto16(data, offset)
if not(typetab[ttype] == nil) then
record = record .. typetab[ttype]
tab.add(table, 2, typetab[ttype])
end
-- length of type specific data
@@ -209,26 +209,24 @@ function get_answer_record(data, offset)
if(line == '') then
offset = offset + rdlen
else
record = record .. line
tab.add(table, 3, line)
end
return offset, strbuf.dump(record, '\t')
return offset, tab
end
function parse_records(number, data, results, offset)
local record
function parse_records(number, data, table, offset)
while number > 0 do
offset, record = get_answer_record(data, offset)
results = results .. record
offset = get_answer_record(table, data, offset)
number = number - 1
if number > 0 then tab.nextrow(table) end
end
return offset
end
function dump_zone_info(data, offset)
local results, answers, line
function dump_zone_info(table, data, offset)
local answers, line
local questions, auth_answers, add_answers
results = strbuf.new()
-- number of available records
questions = bto16(data, offset+6)
@@ -254,11 +252,10 @@ function dump_zone_info(data, offset)
end
-- parse all available resource records
offset = parse_records(answers, data, results, offset)
offset = parse_records(auth_answers, data, results, offset)
offset = parse_records(add_answers, data, results, offset)
return offset, strbuf.dump(results, '\n')
offset = parse_records(answers, data, table, offset)
offset = parse_records(auth_answers, data, table, offset)
offset = parse_records(add_answers, data, table, offset)
return offset
end
action = function(host, port)
@@ -274,7 +271,8 @@ action = function(host, port)
try(soc:connect(host.ip, port.number))
local req_id = '\222\173'
local results = strbuf.new()
local table = tab.new(3)
local offset = 1
local name = build_domain(string.lower(host.name))
local pkt_len = string.len(name) + 16
@@ -304,12 +302,10 @@ action = function(host, port)
end
-- parse zone information from all returned packets
local offset = 1
while(offset < length) do
offset, data = dump_zone_info(response_str, offset)
results = results .. data
offset = dump_zone_info(table, response_str, offset)
end
soc:close()
return '\r\n' .. strbuf.dump(results, '\n')
return ' \n' .. tab.dump(table)
end