~ubuntu-branches/ubuntu/oneiric/nmap/oneiric

« back to all changes in this revision

Viewing changes to scripts/zoneTrans.nse

  • Committer: Bazaar Package Importer
  • Author(s): LaMont Jones, fyodor, Davide
  • Date: 2008-05-31 22:55:14 UTC
  • mfrom: (1.2.10 upstream) (3.1.2 lenny)
  • Revision ID: james.westby@ubuntu.com-20080531225514-dej22l1clq3nj2o3
Tags: 4.62-1
[fyodor]

* new upstream release

[Davide]

* create an desktop file for zenmap.  Closes: #457799
* remove useless file /usr/bin/uninstall_zenmap.  Closes: #474511

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
require('stdnse')
23
23
require('listop')
24
24
require('bit')
 
25
require('tab')
25
26
 
26
27
id = 'zone-transfer'
27
28
author = 'Eddie Bell <ejlbell@gmail.com>'
28
29
description = 'Request a zone transfer (AXFR) from a DNS server'
29
 
license = 'See nmaps COPYING for licence'
 
30
license = 'Same as Nmap--See http://nmap.org/book/man-legal.html'
30
31
categories = {'intrusive', 'discovery'}
31
32
runlevel = 1.0
32
33
 
187
188
end
188
189
 
189
190
-- get a single answer record from the current offset
190
 
function get_answer_record(data, offset)
191
 
        local line, record, rdlen, ttype
192
 
        record = strbuf.new()
 
191
function get_answer_record(table, data, offset)
 
192
        local line, rdlen, ttype
193
193
        
194
194
        -- answer domain
195
195
        offset, line = parse_domain(data, offset)
196
 
        record = record .. line 
 
196
        tab.add(table, 1, line)
197
197
 
198
198
        -- answer record type
199
199
        ttype = bto16(data, offset)
200
200
        if not(typetab[ttype] == nil) then
201
 
                record = record .. typetab[ttype]
 
201
                tab.add(table, 2, typetab[ttype])
202
202
        end
203
203
 
204
204
        -- length of type specific data
209
209
        if(line == '') then
210
210
                offset = offset + rdlen
211
211
        else
212
 
                record = record .. line
 
212
                tab.add(table, 3, line)
213
213
        end
214
214
 
215
 
        return offset, strbuf.dump(record, '\t')
 
215
        return offset, tab
216
216
end
217
217
 
218
 
function parse_records(number, data, results, offset)
219
 
        local record
 
218
function parse_records(number, data, table, offset)
220
219
        while number > 0 do
221
 
                offset, record = get_answer_record(data, offset)
222
 
                results = results .. record
 
220
                offset = get_answer_record(table, data, offset)
223
221
                number = number - 1
 
222
                if number > 0 then tab.nextrow(table) end
224
223
        end
225
224
        return offset
226
225
end
227
226
 
228
 
function dump_zone_info(data, offset)
229
 
        local results, answers, line
 
227
function dump_zone_info(table, data, offset)
 
228
        local answers, line
230
229
        local questions, auth_answers, add_answers
231
 
        results = strbuf.new()
232
230
        
233
231
        -- number of available records
234
232
        questions = bto16(data, offset+6)
254
252
        end
255
253
                
256
254
        -- parse all available resource records
257
 
        offset = parse_records(answers, data, results, offset)
258
 
        offset = parse_records(auth_answers, data, results, offset)
259
 
        offset = parse_records(add_answers, data, results, offset)
260
 
 
261
 
        return offset, strbuf.dump(results, '\n')
 
255
        offset = parse_records(answers, data, table, offset)
 
256
        offset = parse_records(auth_answers, data, table, offset)
 
257
        offset = parse_records(add_answers, data, table, offset)
 
258
        return offset
262
259
end
263
260
 
264
261
action = function(host, port)
274
271
        try(soc:connect(host.ip, port.number))
275
272
        
276
273
        local req_id = '\222\173'
277
 
        local results = strbuf.new()
 
274
        local table = tab.new(3)
 
275
        local offset = 1 
278
276
        local name = build_domain(string.lower(host.name))
279
277
        local pkt_len = string.len(name) + 16
280
278
 
304
302
        end
305
303
 
306
304
        -- parse zone information from all returned packets
307
 
        local offset = 1 
308
305
        while(offset < length) do
309
 
                offset, data = dump_zone_info(response_str, offset)
310
 
                results = results .. data
 
306
                offset = dump_zone_info(table, response_str, offset)
311
307
        end
312
308
 
313
309
        soc:close()
314
 
        return '\r\n' .. strbuf.dump(results, '\n')
 
310
        return ' \n' .. tab.dump(table)
315
311
end