Nmap Development mailing list archives

Re: [NSE] firewalk.nse updated


From: Henri Doreau <henri.doreau () gmail com>
Date: Tue, 2 Nov 2010 21:15:03 +0100

2010/9/28 David Fifield <david () bamsoftware com>:
I want to suggest a different structure. Since you handle both TCP and
UDP, many of the functions have the same if/else structure:

       local function func(proto)
               if proto == IPPROTO_TCP then
                       ...
               elseif proto == IPPROTO_UDP then
                       ...
               end
       end

The problem here is that when someone adds a new protocol or makes a
change in one place, they have to remember to change or at least check
all the if/elses in the file. You can centralize the information better
using "protocol objects" that have a list of all their functions.

       tcp_funcs = {
               func = function()
                       ...
               end,
               -- More functions...
       }
       udp_funcs = {
               func = function()
                       ...
               end,
               -- More functions...
       }
       protos = {
               tcp = tcp_funcs,
               udp = udp_funcs,
       }

Then you would make calls like

       protos[proto].func()

And of course you can cache protos[proto] if the protocol stays the same
throughout the script execution.

Hello,

I've followed David's nice advice about firewalk.nse. So please find
attached the patch for this refactoring. Functions that depend of a
given layer 4 protocol are now in separate arrays, broken down per
protocol, and it should be easier to support new protocols.

Regards

--
Henri Doreau

Attachment: firewalk.diff
Description:

_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://seclists.org/nmap-dev/

Current thread: