From 0d47952611198ef6b1163f366dc03922d20b1475 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 09:42:04 +0200 Subject: Adding upstream version 7.94+git20230807.3be01efb1+dfsg. Signed-off-by: Daniel Baumann --- nselib/match.lua | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 nselib/match.lua (limited to 'nselib/match.lua') diff --git a/nselib/match.lua b/nselib/match.lua new file mode 100644 index 0000000..a514cf8 --- /dev/null +++ b/nselib/match.lua @@ -0,0 +1,62 @@ +--- +-- Buffered network I/O helper functions. +-- +-- The functions in this module can be used for delimiting data received by the +-- nmap.receive_buf function in the Network I/O API (which see). +-- @copyright Same as Nmap--See https://nmap.org/book/man-legal.html + +local stdnse = require "stdnse" +local find = (require "string").find +_ENV = stdnse.module("match", stdnse.seeall) + +--various functions for use with NSE's nsock:receive_buf - function + +-- e.g. +-- sock:receive_buf(numbytes(80), true) - is the buffered version of +-- sock:receive_bytes(80) - i.e. it +-- returns exactly 80 bytes and no more + +--- Return a function that allows delimiting at a certain number of bytes. +-- +-- This function can be used to get a buffered version of +-- sock:receive_bytes(n) in case a script requires more than one +-- fixed-size chunk, as the unbuffered version may return more bytes than +-- requested and thus would require you to do the parsing on your own. +-- +-- The keeppattern parameter to receive_buf should be set to +-- true, otherwise the string returned will be 1 less than +-- num +-- @param num Number of bytes. +-- @usage sock:receive_buf(match.numbytes(80), true) +-- @see nmap.receive_buf +numbytes = function(num) + local n = num + return function(buf) + if(#buf >=n) then + return n, n + end + return nil + end +end + +--- Search for a pattern within a set number of bytes +-- +-- This function behaves just like passing a pattern to receive_buf, but it +-- will only receive a predefined number of bytes before returning the buffer. +-- @param pattern The pattern to search for +-- @param within The number of bytes to consume +-- @usage sock:receive_buf(match.pattern_limit("\r\n", 80), true) +pattern_limit = function (pattern, within) + local n = within + return function(buf) + local left, right = find(buf, pattern) + if left then + return left, right + elseif #buf >= n then + return n, n + end + return nil + end +end + +return _ENV; -- cgit v1.2.3