1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-10 09:49:05 +00:00
Files
nmap/scripts/targets-asn.nse
dmiller 31bc2847bd Normalize script author fields
Clean up some typos and differences. Most have been normalized to
whatever form of the name occurred in the largest number of scripts.
Paulino was contacted directly and requested his email be added to all
of his credits.
2013-09-20 18:56:22 +00:00

101 lines
2.7 KiB
Lua

local nmap = require "nmap"
local stdnse = require "stdnse"
local table = require "table"
local target = require "target"
description = [[
Produces a list of IP prefixes for a given routing AS number (ASN).
This script uses a whois server database operated by the Shadowserver
Foundation. We thank them for granting us permission to use this in
Nmap.
Output is in CIDR notation.
http://www.shadowserver.org/wiki/pmwiki.php/Services/IP-BGP
]]
---
-- @args targets-asn.asn The ASN to search.
-- @args targets-asn.whois_server The whois server to use. Default: asn.shadowserver.org.
-- @args targets-asn.whois_port The whois port to use. Default: 43.
--
-- @usage
-- nmap --script targets-asn --script-args targets-asn.asn=32
--
-- @output
-- 53/udp open domain udp-response
-- | targets-asn:
-- | 32
-- | 128.12.0.0/16
-- |_ 171.64.0.0/14
author = "John R. Bond"
license = "Simplified (2-clause) BSD license--See http://nmap.org/svn/docs/licenses/BSD-simplified"
categories = {"discovery", "external", "safe"}
prerule = function()
return true
end
action = function(host, port)
local asns, whois_server, whois_port, err, status, newtargets
local results = {}
asns = stdnse.get_script_args('targets-asn.asn') or stdnse.get_script_args('asn-to-prefix.asn')
whois_server = stdnse.get_script_args('targets-asn.whois_server') or stdnse.get_script_args('asn-to-prefix.whois_server')
whois_port = stdnse.get_script_args('targets-asn.whois_port') or stdnse.get_script_args('asn-to-prefix.whois_port')
if not asns then
return stdnse.format_output(true, "targets-asn.asn is a mandatory parameter")
end
if not whois_server then
whois_server = "asn.shadowserver.org"
end
if not whois_port then
whois_port = 43
end
if type(asns) ~= "table" then
asns = {asns}
end
for _, asn in ipairs(asns) do
local socket = nmap.new_socket()
local prefixes = {}
prefixes['name'] = asn
status, err = socket:connect(whois_server, whois_port)
if ( not(status) ) then
table.insert(prefixes, err)
else
status, err = socket:send("prefix " .. asn .. "\n")
if ( not(status) ) then
table.insert(prefixes, err)
else
while true do
local status, data = socket:receive_lines(1)
if ( not(status) ) then
table.insert(prefixes, err)
break
else
for i, prefix in ipairs(stdnse.strsplit("\n",data)) do
if ( #prefix > 1 ) then
table.insert(prefixes,prefix)
if target.ALLOW_NEW_TARGETS then
stdnse.print_debug("Added targets: "..prefix)
local status,err = target.add(prefix)
end
end
end
end
end
end
end
table.insert(results,prefixes)
end
return stdnse.format_output(true, results)
end