79 lines
2.0 KiB
Plaintext
79 lines
2.0 KiB
Plaintext
|
local ipOps = require "ipOps"
|
||
|
local srvloc = require "srvloc"
|
||
|
local stdnse = require "stdnse"
|
||
|
local stringaux = require "stringaux"
|
||
|
local table = require "table"
|
||
|
|
||
|
description = [[
|
||
|
Attempts to use the Service Location Protocol to discover Novell NetWare Core Protocol (NCP) servers.
|
||
|
]]
|
||
|
|
||
|
---
|
||
|
--
|
||
|
--@output
|
||
|
-- Pre-scan script results:
|
||
|
-- | broadcast-novell-locate:
|
||
|
-- | Tree name: CQURE-LABTREE
|
||
|
-- | Server name: linux-l84t
|
||
|
-- | Addresses
|
||
|
-- |_ 192.168.56.33
|
||
|
--
|
||
|
--
|
||
|
|
||
|
-- Version 0.1
|
||
|
-- Created 04/26/2011 - v0.1 - created by Patrik Karlsson
|
||
|
|
||
|
author = "Patrik Karlsson"
|
||
|
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
|
||
|
categories = {"broadcast", "safe"}
|
||
|
|
||
|
|
||
|
prerule = function() return true end
|
||
|
|
||
|
function action()
|
||
|
|
||
|
local helper = srvloc.Helper:new()
|
||
|
|
||
|
local status, bindery = helper:ServiceRequest("bindery.novell", "DEFAULT")
|
||
|
if ( not(status) or not(bindery) ) then
|
||
|
helper:close()
|
||
|
return
|
||
|
end
|
||
|
bindery = bindery[1]
|
||
|
local srvname = bindery:match("%/%/%/(.*)$")
|
||
|
|
||
|
local status, attrib = helper:AttributeRequest(bindery, "DEFAULT", "svcaddr-ws")
|
||
|
helper:close()
|
||
|
attrib = attrib:match("^%(svcaddr%-ws=(.*)%)$")
|
||
|
if ( not(attrib) ) then return end
|
||
|
|
||
|
local attribs = stringaux.strsplit(",", attrib)
|
||
|
if ( not(attribs) ) then return end
|
||
|
|
||
|
local addrs = { name = "Addresses"}
|
||
|
local ips = {}
|
||
|
for _, attr in ipairs(attribs) do
|
||
|
local addr = attr:match("^%d*%-%d*%-%d*%-(........)")
|
||
|
if ( addr ) then
|
||
|
local ip = ipOps.str_to_ip(stdnse.fromhex(addr))
|
||
|
|
||
|
if ( not(ips[ip]) ) then
|
||
|
table.insert(addrs, ip)
|
||
|
ips[ip] = ip
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local output = {}
|
||
|
local status, treename = helper:ServiceRequest("ndap.novell", "DEFAULT")
|
||
|
if ( status ) then
|
||
|
treename = treename[1]
|
||
|
treename = treename:match("%/%/%/(.*)%.$")
|
||
|
table.insert(output, ("Tree name: %s"):format(treename))
|
||
|
end
|
||
|
table.insert(output, ("Server name: %s"):format(srvname))
|
||
|
table.insert(output, addrs)
|
||
|
|
||
|
return stdnse.format_output(true, output)
|
||
|
end
|