Nmap Development mailing list archives
[NSE] New nmap.fetchfile() and updated rpcinfo.nse
From: Kris Katterjohn <katterjohn () gmail com>
Date: Fri, 21 Dec 2007 15:41:49 -0600
Hi everyone! I've attached two patches: 1) Adds a nmap.fetchfile() method for use in scripts. It basically wraps nmap_fetchfile() to return the path of the file (or nil if not found or is a directory). This gives scripts easy access to the nmap-* data files. 2) Uses the new fetchfile() to shorten the recently added rpcinfo.nse down to almost 1/4th it's size. The output of the original and modified script are the same for me. My function for parsing the file includes RPC names with underscores, which seemed to be left out of the list Fyodor put in. I'm certainly no Lua expert, so if you can shorten and/or simplify my fillrpc() function (rpcinfo.nse), please do! Also, this is my first real experience with the lua_* C functions (aside from adding nmap.verbosity() and nmap.debugging() which was simple). I think I did it right: the lua_tostring() returns a pointer inside the actual stack, so I don't lua_pop() until after it's finished being used. And then I push the string (or nil, depending). Please let me know what you think! Thanks, Kris Katterjohn
Index: nse_nmaplib.cc =================================================================== --- nse_nmaplib.cc (revision 6624) +++ nse_nmaplib.cc (working copy) @@ -3,6 +3,7 @@ #include "nse_macros.h" #include "nse_debug.h" +#include "nmap.h" #include "nmap_error.h" #include "osscan.h" #include "NmapOps.h" @@ -39,6 +40,7 @@ static int l_get_verbosity(lua_State *); static int l_get_debugging(lua_State *); static int l_get_have_ssl(lua_State *l); +static int l_fetchfile(lua_State *l); int l_clock_ms(lua_State* l); @@ -59,6 +61,7 @@ {"verbosity", l_get_verbosity}, {"debugging", l_get_debugging}, {"have_ssl", l_get_have_ssl}, + {"fetchfile", l_fetchfile}, {NULL, NULL} }; @@ -526,3 +529,24 @@ #endif return 1; } + +static int l_fetchfile(lua_State *l) +{ + char buf[FILENAME_MAX]; + const char *req = lua_tostring(l, -1); + + if (!req) + goto err; + + if (nmap_fetchfile(buf, sizeof buf, (char *) req) != 1) + goto err; + + lua_pop(l, 1); + lua_pushstring(l, buf); + return 1; +err: + lua_pop(l, 1); + lua_pushnil(l); + return 0; +} +
Index: scripts/rpcinfo.nse =================================================================== --- scripts/rpcinfo.nse (revision 6624) +++ scripts/rpcinfo.nse (working copy) @@ -7,386 +7,41 @@ require "shortport" require "bit" +require "stdnse" --- rpc program numbers generated from nmap-rpc with a command like: --- perl -ne 'if (/^([a-z0-9]+)\s+(\d+)\s/i) { print " [$2] = $1,\n"; }' nmap-rpc | sed "s/= /= '/" | sed "s/,/',/" --- then the comma was removed from final line -local rpc_numbers = { - [100000] = 'rpcbind', - [100001] = 'rstatd', - [100002] = 'rusersd', - [100003] = 'nfs', - [100004] = 'ypserv', - [100005] = 'mountd', - [100007] = 'ypbind', - [100008] = 'walld', - [100009] = 'yppasswdd', - [100010] = 'etherstatd', - [100011] = 'rquotad', - [100012] = 'sprayd', - [100017] = 'rexd', - [100018] = 'alis', - [100019] = 'sched', - [100020] = 'llockmgr', - [100021] = 'nlockmgr', - [100023] = 'statmon', - [100024] = 'status', - [100026] = 'bootparam', - [100027] = 'mazewars', - [100028] = 'ypupdated', - [100029] = 'keyserv', - [100030] = 'securelogin', - [100035] = 'database', - [100037] = 'tfsd', - [100038] = 'nsed', - [100039] = 'nsemntd', - [100043] = 'showfhd', - [100044] = 'mvsmount', - [100055] = 'ioadmd', - [100059] = 'showattrd', - [100062] = 'NETlicense', - [100065] = 'sunisamd', - [100068] = 'cmsd', - [100069] = 'ypxfrd', - [100071] = 'bugtraqd', - [100078] = 'kerbd', - [100083] = 'ttdbserverd', - [100087] = 'admind', - [100099] = 'autofsd', - [100101] = 'event', - [100102] = 'logger', - [100104] = 'sync', - [100105] = 'diskinfo', - [100106] = 'iostat', - [100107] = 'hostperf', - [100109] = 'activity', - [100111] = 'lpstat', - [100112] = 'hostmem', - [100113] = 'sample', - [100114] = 'x25', - [100115] = 'ping', - [100116] = 'rpcnfs', - [100117] = 'hostif', - [100118] = 'etherif', - [100119] = 'ippath', - [100120] = 'iproutes', - [100121] = 'layers', - [100122] = 'snmp', - [100123] = 'traffic', - [100124] = 'DNInode', - [100131] = 'layers2', - [100135] = 'etherif2', - [100136] = 'hostmem2', - [100137] = 'iostat2', - [100138] = 'snmpv2', - [100139] = 'sender', - [100146] = 'amiserv', - [100147] = 'amiaux', - [100150] = 'ocfserv', - [100153] = 'sunvts', - [100155] = 'smserverd', - [100229] = 'metad', - [100230] = 'metamhd', - [100231] = 'nfsauth', - [100232] = 'sadmind', - [100233] = 'ufsd', - [100234] = 'gssd', - [100235] = 'cachefsd', - [100249] = 'snmpXdmid', - [100300] = 'nisd', - [100303] = 'nispasswd', - [100304] = 'fnsypd', - [100422] = 'mdcommd', - [100424] = 'stfsloader', - [150001] = 'pcnfsd', - [200000] = 'PyramidLock', - [200001] = 'PyramidSys5', - [200005] = 'pdbDA', - [200020] = 'SWG', - [200023] = 'exportmap', - [200034] = 'Gqsrv', - [200035] = 'Ppt', - [200036] = 'Pmt', - [200037] = 'Msgt', - [200038] = 'Walerts', - [200039] = 'Mgt', - [200040] = 'Pft', - [200041] = 'Msgq', - [200042] = 'Smpsrv', - [200043] = 'Dexsrv', - [200044] = 'Statussrv', - [200046] = 'SessionServer', - [200047] = 'SessionDaemon', - [200048] = 'Pmsgq', - [200049] = 'Filesrv', - [200050] = 'Magfetch', - [200051] = 'Optfetch', - [200052] = 'Securitysrv', - [200100] = 'bundle', - [200201] = 'ecodisc', - [200202] = 'ecolic', - [200203] = 'eamon', - [200205] = 'ecoad', - [300001] = 'ADTFileLock', - [300006] = 'fmclient', - [300007] = 'fmeditor', - [300009] = 'fmserver', - [300019] = 'amd', - [300021] = 'Steering', - [300030] = 'UpdtAuditsS', - [300091] = 'Dbpass', - [300145] = 'clms', - [300301] = 'acuserve', - [300375] = 'rmd', - [300376] = 'agcd', - [300433] = 'bssd', - [300434] = 'drdd', - [300483] = 'cnxmond', - [300484] = 'cnxagentd', - [300516] = 'mcserv', - [300527] = 'cluinfod', - [300598] = 'dmispd', - [300632] = 'prpasswd', - [300664] = 'ks', - [344444] = 'sfs', - [351455] = 'mapsvc', - [351457] = 'berkeleydb', - [351473] = 'caasalert', - [395644] = 'caservd', - [395645] = 'calqserver', - [395646] = 'camediadsvr', - [395647] = 'caldbserver', - [395648] = 'caauthd', - [395649] = 'cadiscovd', - [395650] = 'caloggerd', - [390101] = 'rap', - [390102] = 'rapserv', - [390103] = 'nsrd', - [390104] = 'nsrmmd', - [390105] = 'nsrindexd', - [390107] = 'nsrmmdbd', - [390109] = 'nsrstat', - [390110] = 'nsrjb', - [390113] = 'nsrexec', - [390115] = 'lgtolmd', - [390400] = 'nsrnotd', - [390600] = 'arserverd', - [390601] = 'ntserverd', - [390602] = 'ntclientd', - [390603] = 'aresclsrv', - [390604] = 'arservtcd', - [390610] = 'flashservd', - [390619] = 'arflashbd', - [390620] = 'arfastsrv', - [390621] = 'arfastsrv', - [390622] = 'arfastsrv', - [390623] = 'arfastsrv', - [390624] = 'arfastsrv', - [390625] = 'arfastsrv', - [390626] = 'arfastsrv', - [390627] = 'arfastsrv', - [390628] = 'arfastsrv', - [390629] = 'arfastsrv', - [390630] = 'arfastsrv', - [390631] = 'arfastsrv', - [390632] = 'arfastsrv', - [390633] = 'arfastsrv', - [390634] = 'arfastsrv', - [390635] = 'arlistsrv', - [390636] = 'arlistsrv', - [390637] = 'arlistsrv', - [390638] = 'arlistsrv', - [390639] = 'arlistsrv', - [390640] = 'arlistsrv', - [390641] = 'arlistsrv', - [390642] = 'arlistsrv', - [390643] = 'arlistsrv', - [390644] = 'arlistsrv', - [390645] = 'arlistsrv', - [390646] = 'arlistsrv', - [390647] = 'arlistsrv', - [390648] = 'arlistsrv', - [390649] = 'arlistsrv', - [391434] = 'ingsqld', - [391200] = 'afsd', - [391201] = 'dhc', - [391202] = 'cmsd', - [391203] = 'xxx2trif', - [391204] = 'trif2xxx', - [391205] = 'dx', - [391206] = 'licd', - [395175] = 'asedirector', - [395176] = 'aseagent', - [395177] = 'asehsm', - [395179] = 'aselogger', - [395250] = 'pnictl', - [450000] = 'EnsignAgent', - [900101] = 'drac', - [1000002] = 'AdoIfServer', - [2000004] = 'notifServer', - [20000000] = 'retherif', - [20000001] = 'genagnt', - [20000114] = 'acedb', - [20000115] = 'aboutdb', - [20000116] = 'aatdb', - [20000777] = 'seagent', - [21000023] = 'dbsrvr', - [28000205] = 'egts', - [28000220] = 'ers', - [28000230] = 'sas', - [200100001] = 'netinfobind', - [200100002] = 'renderd', - [536870915] = 'uidd', - [536870916] = 'vtsk', - [536870917] = 'bondd', - [536870918] = 'staticd', - [536870919] = 'curved', - [536870920] = 'msglogd', - [536870921] = 'aliasd', - [536870922] = 'ticketd', - [536870923] = 'glossd', - [536870924] = 'futured', - [536870928] = 'priced', - [536870929] = 'ladderd', - [536870937] = 'optiond', - [536870944] = 'ndbportmgr', - [536870945] = 'ndbserver1', - [536870946] = 'ndbserver2', - [536870947] = 'ndbserver3', - [536870948] = 'ndbserver4', - [536870949] = 'ndbserver5', - [536870950] = 'ndbserver6', - [536870951] = 'ndbserver7', - [536870952] = 'ndbserver8', - [536870953] = 'ndbserver9', - [536870954] = 'ndbserver10', - [536870955] = 'ndbserver11', - [536870956] = 'ndbserver12', - [536870957] = 'ndbserver13', - [536870958] = 'ndbserver14', - [536870959] = 'ndbserver15', - [536870960] = 'ndbserver16', - [536870961] = 'ndbserver17', - [536870962] = 'ndbserver18', - [536870963] = 'ndbserver19', - [536870964] = 'ndbserver20', - [536870965] = 'ndbserver21', - [536870966] = 'ndbserver22', - [536870967] = 'ndbserver23', - [536870968] = 'ndbserver24', - [536870969] = 'ndbserver25', - [536870970] = 'ndbserver26', - [536870971] = 'ndbserver27', - [536870972] = 'ndbserver28', - [536870973] = 'ndbserver29', - [536870974] = 'ndbserver30', - [536870975] = 'ndbserver31', - [536870976] = 'ndbserver32', - [536870977] = 'ndbserver33', - [536870978] = 'ndbserver34', - [536870979] = 'ndbserver35', - [536870980] = 'ndbserver36', - [536870981] = 'ndbserver37', - [536870982] = 'ndbserver38', - [536870983] = 'ndbserver39', - [536870984] = 'ndbserver40', - [536870985] = 'ndbserver41', - [536870986] = 'ndbserver42', - [536870987] = 'ndbserver43', - [536870988] = 'ndbserver44', - [536870989] = 'ndbserver45', - [536870990] = 'ndbserver46', - [536870991] = 'ndbserver47', - [536870992] = 'ndbserver48', - [536870993] = 'ndbserver49', - [536870994] = 'ndbserver50', - [536870995] = 'ndbserver51', - [536870996] = 'ndbserver52', - [536870997] = 'ndbserver53', - [536870998] = 'ndbserver54', - [536870999] = 'ndbserver55', - [536871000] = 'ndbserver56', - [536871001] = 'ndbserver57', - [536871002] = 'ndbserver58', - [536871003] = 'ndbserver59', - [536871004] = 'ndbserver60', - [536871005] = 'ndbserver61', - [536871006] = 'ndbserver62', - [536871007] = 'ndbserver63', - [536871008] = 'ndbserver64', - [536871009] = 'ndbserver65', - [536871010] = 'ndbserver66', - [536871011] = 'ndbserver67', - [536871012] = 'ndbserver68', - [536871013] = 'ndbserver69', - [536871014] = 'ndbserver70', - [536871015] = 'ndbserver71', - [536871016] = 'ndbserver72', - [536871017] = 'ndbserver73', - [536871018] = 'ndbserver74', - [536871019] = 'ndbserver75', - [536871020] = 'ndbserver76', - [536871021] = 'ndbserver77', - [536871022] = 'ndbserver78', - [536871023] = 'ndbserver79', - [536871024] = 'ndbserver80', - [536871025] = 'ndbserver81', - [536871026] = 'ndbserver82', - [536871027] = 'ndbserver83', - [536871028] = 'ndbserver84', - [536871029] = 'ndbserver85', - [536871030] = 'ndbserver86', - [536871031] = 'ndbserver87', - [536871032] = 'ndbserver88', - [536871033] = 'ndbserver89', - [536871034] = 'ndbserver90', - [536871035] = 'ndbserver91', - [536871036] = 'ndbserver92', - [536871037] = 'ndbserver93', - [536871038] = 'ndbserver94', - [536871039] = 'ndbserver95', - [536871040] = 'ndbserver96', - [536871041] = 'ndbserver97', - [536871042] = 'ndbserver98', - [536871043] = 'ndbserver99', - [536871044] = 'ndbserver100', - [536871680] = 'gnbk', - [541414217] = 'fcagent', - [591751041] = 'pnmd', - [545580417] = 'ugidd', - [555555555] = 'inetray', - [555555556] = 'inetray', - [555555557] = 'inetray', - [555555558] = 'inetray', - [555555559] = 'inetray', - [555555560] = 'inetray', - [600000001] = 'collectd', - [600000002] = 'xycomd', - [600000003] = 'motord', - [600000004] = 'fitsd', - [600100069] = 'fypxfrd', - [611319808] = 'rdbx', - [630474513] = 'bminrd', - [788585389] = 'bwnfsd', - [805306368] = 'dmispd', - [805898569] = 'rdict', - [822087681] = 'testpoint', - [822087682] = 'awg', - [822087683] = 'cgdsrtdd', - [822087684] = 'gdsd', - [822087685] = 'chnconfd', - [822087686] = 'leapconfd', - [822087687] = 'rlaunchd', - [824395111] = 'cfsd', - [912680550] = 'cns', - [1073741824] = 'fmproduct', - [1092830567] = 'cfsd', - [1145324612] = 'rdb', - [1289637086] = 'dtcm', - [1289637087] = 'ttsession', - [1342177279] = 'ttsession' -} +local rpc_numbers = {} +-- Fills rpc_numbers with values read from RPC file - Kris Katterjohn +local fillrpc = function() + local path = nmap.fetchfile("nmap-rpc") + local file + + if path == nil then + return false + end + + file = io.open(path, "r") + + local data = file:read("*all") + + file:close() + + for l in data:gmatch("[^\n]+\n") do + l = l:gsub("%s*#.*", "") + + if l:len() ~= 0 then + local m = l:gsub("^([%a%d_]+)%s+(%d+).*", "%2=%1") + + if m:match("=") then + local t = stdnse.strsplit("=", m) + rpc_numbers[tonumber(t[1])] = t[2] + end + end + end + + return true +end + portrule = shortport.port_or_service(111, "rpcbind") action = function(host, port) @@ -395,6 +50,11 @@ local socket = nmap.new_socket() local result = "" + if not fillrpc() then + stdnse.print_debug("rpcinfo: Can't read from RPC file!") + return + end + catch = function() socket:close() end try = nmap.new_try( catch )
_______________________________________________ Sent through the nmap-dev mailing list http://cgi.insecure.org/mailman/listinfo/nmap-dev Archived at http://SecLists.Org
Current thread:
- [NSE] New nmap.fetchfile() and updated rpcinfo.nse Kris Katterjohn (Dec 21)
- Re: [NSE] New nmap.fetchfile() and updated rpcinfo.nse Kris Katterjohn (Dec 21)
- Re: [NSE] New nmap.fetchfile() and updated rpcinfo.nse Fyodor (Dec 21)
- Re: [NSE] New nmap.fetchfile() and updated rpcinfo.nse Kris Katterjohn (Dec 21)