mirror of
https://codeberg.org/mclemens/nmap-sqlite-output.git
synced 2024-12-28 03:36:28 -05:00
Create sqlite-output.nse
This commit is contained in:
parent
63f92475c6
commit
dcf6edaae5
71
sqlite-output.nse
Normal file
71
sqlite-output.nse
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
description = [[
|
||||||
|
This plugin stores the following nmap output into a sqlite3 database: Hostname, IP, port number, protocol (tcp/udp), service and version
|
||||||
|
Both, database file name and table name can be passed to the plugin via arguments (see @args or @example), data will always be appended to an existing table. Non-existant database files or table
|
||||||
|
s are created during the scan. Nmap's regular output (-o) will not be modified in any way.
|
||||||
|
]]
|
||||||
|
|
||||||
|
---
|
||||||
|
-- @usage
|
||||||
|
-- nmap --script sqlite-output <target>
|
||||||
|
--
|
||||||
|
-- @example
|
||||||
|
-- $ nmap -sS -A -F --script sqlite-output --script-args=dbname=scan.sqlite,dbtable=scandata scanme.nmap.org
|
||||||
|
-- $ sqlite3 can.sqlite
|
||||||
|
-- sqlite> select * from scandata;
|
||||||
|
-- scanme.nmap.org|74.207.244.221|22|tcp|ssh|OpenSSH5.3p1 Debian 3ubuntu7.1
|
||||||
|
-- scanme.nmap.org|74.207.244.221|80|tcp|http|Apache httpd2.2.14
|
||||||
|
--
|
||||||
|
-- @args
|
||||||
|
-- dbname: name of sqlite database file (default: scan.sqlite)
|
||||||
|
-- dbtable: name of database table in which the output will be written (default: scandata)
|
||||||
|
---
|
||||||
|
|
||||||
|
author = "Michael Clemens"
|
||||||
|
license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
|
||||||
|
categories = {"external", "safe"}
|
||||||
|
|
||||||
|
require "luasql.sqlite3"
|
||||||
|
local nmap = require "nmap"
|
||||||
|
|
||||||
|
portrule = function () return true end
|
||||||
|
postrule = function () return true end
|
||||||
|
|
||||||
|
if (nmap.registry.args.dbname~=nil) then
|
||||||
|
dbname = nmap.registry.args.dbname
|
||||||
|
else
|
||||||
|
dbname = "scan.sqlite"
|
||||||
|
end
|
||||||
|
|
||||||
|
if (nmap.registry.args.dbtable~=nil) then
|
||||||
|
dbtable = nmap.registry.args.dbtable
|
||||||
|
else
|
||||||
|
dbtable = "scandata"
|
||||||
|
end
|
||||||
|
|
||||||
|
env = luasql.sqlite3()
|
||||||
|
con = env:connect(dbname)
|
||||||
|
res = con:execute (string.format("CREATE TABLE '%s' (hostname varchar(100), ip varchar(16), port integer(5), protocol varchar(3), service varchar(100), version varchar(100))", dbtable))
|
||||||
|
|
||||||
|
function portaction (host, port)
|
||||||
|
local version = ""
|
||||||
|
if (port.version.product~=nil) then
|
||||||
|
version = port.version.product
|
||||||
|
end
|
||||||
|
if (port.version.version~=nil) then
|
||||||
|
version = version .. port.version.version
|
||||||
|
end
|
||||||
|
res = con:execute(string.format("INSERT INTO '%s' VALUES ('%s', '%s', '%s', '%s', '%s', '%s')" , dbtable, host.name, host.ip, port.number, port.protocol, port.service, version))
|
||||||
|
end
|
||||||
|
|
||||||
|
function postaction ()
|
||||||
|
con:close()
|
||||||
|
env:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
local ActionsTable = {
|
||||||
|
portrule = portaction,
|
||||||
|
postrule = postaction
|
||||||
|
}
|
||||||
|
|
||||||
|
-- execute the action function corresponding to the current rule
|
||||||
|
action = function(...) return ActionsTable[SCRIPT_TYPE](...) end
|
Loading…
Reference in New Issue
Block a user