-
-
Notifications
You must be signed in to change notification settings - Fork 350
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2520 from jimklimov/issue-2511
Teach `nut-scanner` to parallelize scans across many IP address ranges
- Loading branch information
Showing
23 changed files
with
1,233 additions
and
376 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
NUTSCAN_ADD_IP_RANGE(3) | ||
======================= | ||
|
||
NAME | ||
---- | ||
|
||
nutscan_add_ip_range - Add an entry with IP address range (starting | ||
and ending addresses) to a `nutscan_ip_range_list_t` structure. | ||
|
||
SYNOPSIS | ||
-------- | ||
|
||
#include <nut-scan.h> | ||
|
||
/* One IP address range: */ | ||
typedef struct nutscan_ip_range_s { | ||
char * start_ip; | ||
char * end_ip; | ||
struct nutscan_ip_range_s * next; | ||
} nutscan_ip_range_t; | ||
|
||
/* List of IP address ranges and helper data: */ | ||
typedef struct nutscan_ip_range_list_s { | ||
nutscan_ip_range_t * ip_ranges; /* Actual linked list of entries, first entry */ | ||
nutscan_ip_range_t * ip_ranges_last; /* Pointer to end of list for quicker additions */ | ||
size_t ip_ranges_count; /* Counter of added entries */ | ||
} nutscan_ip_range_list_t; | ||
|
||
|
||
size_t nutscan_add_ip_range( | ||
nutscan_ip_range_list_t *irl, | ||
char * start_ip, | ||
char * end_ip); | ||
|
||
DESCRIPTION | ||
----------- | ||
|
||
The *nutscan_add_ip_range()* function can create and add a `nutscan_ip_range_t` | ||
entry based on provided inputs to the specified `nutscan_ip_range_list_t` | ||
structure. The resulting amount of entries in the structure is returned, | ||
or 0 in case of non-fatal errors. | ||
|
||
This function skips work if: | ||
|
||
* the structure pointer is `NULL` (0 is returned); | ||
* neither `start_ip` nor `end_ip` were provided, i.e. they have `NULL` values | ||
(current list length from the structure is returned); | ||
* failed to allocate the entry (fatal). | ||
|
||
If only one of `start_ip` or `end_ip` values was provided (not `NULL`), a | ||
single-address range is created with both addresses set to the same pointer | ||
value. | ||
|
||
The structure should be initialized before use by `nutscan_init_ip_ranges()`. | ||
|
||
The caller must free the contents of the structure after completing its use | ||
by calling `nutscan_free_ip_ranges()` (after which the structure can be | ||
re-used for a new list), and explicitly `free()` the structure object itself if | ||
it was allocated dynamically (e.g. by calling `nutscan_init_ip_ranges(NULL)`). | ||
|
||
NOTES | ||
----- | ||
|
||
Technically, the function is currently defined in 'nutscan-ip.h' file. | ||
|
||
Currently there are no checks for duplicate or overlapping entries, so the | ||
same IP addresses and whole IP address ranges can be added to the list (and | ||
would eventually be scanned) many times. | ||
|
||
SEE ALSO | ||
-------- | ||
|
||
linkman:nutscan_init_ip_ranges[3], linkman:nutscan_free_ip_ranges[3], | ||
linkman:nutscan_stringify_ip_ranges[3], | ||
linkman:nutscan_cidr_to_ip[3], | ||
linkman:nutscan_ip_ranges_iter_init[3], | ||
linkman:nutscan_ip_ranges_iter_inc[3] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
NUTSCAN_FREE_IP_RANGES(3) | ||
========================= | ||
|
||
NAME | ||
---- | ||
|
||
nutscan_free_ip_ranges - Free contents of a `nutscan_ip_range_list_t` | ||
structure populated (and optionally created) by `nutscan_init_ip_ranges()` | ||
and, more importantly, filled by a series of `nutscan_add_ip_range()` calls. | ||
|
||
SYNOPSIS | ||
-------- | ||
|
||
#include <nut-scan.h> | ||
|
||
void nutscan_free_ip_ranges(nutscan_ip_range_list_t *irl); | ||
|
||
DESCRIPTION | ||
----------- | ||
|
||
The *nutscan_free_ip_ranges()* function can free a `nutscan_ip_range_list_t` | ||
structure. Doing so, it frees the whole linked list of `nutscan_ip_range_t` | ||
entries, and zeroes out helper properties. | ||
|
||
The structure itself is not freed (as it can be a statically allocated | ||
variable on the stack), and can be re-used for a new list if needed. | ||
|
||
The caller must free the structure object if it was allocated dynamically | ||
(e.g. by calling `nutscan_init_ip_ranges(NULL)`). | ||
|
||
NOTES | ||
----- | ||
|
||
Technically, the function is currently defined in 'nutscan-ip.h' file. | ||
|
||
SEE ALSO | ||
-------- | ||
|
||
linkman:nutscan_init_ip_ranges[3], linkman:nutscan_add_ip_range[3], | ||
linkman:nutscan_stringify_ip_ranges[3], | ||
linkman:nutscan_cidr_to_ip[3], | ||
linkman:nutscan_ip_ranges_iter_init[3], | ||
linkman:nutscan_ip_ranges_iter_inc[3] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
NUTSCAN_INIT_IP_RANGES(3) | ||
========================= | ||
|
||
NAME | ||
---- | ||
|
||
nutscan_init_ip_ranges - Initialize contents of a `nutscan_ip_range_list_t` | ||
structure (and optionally create one in the first place). | ||
|
||
SYNOPSIS | ||
-------- | ||
|
||
#include <nut-scan.h> | ||
|
||
nutscan_ip_range_list_t * nutscan_init_ip_ranges(nutscan_ip_range_list_t *irl); | ||
|
||
DESCRIPTION | ||
----------- | ||
|
||
The *nutscan_init_ip_ranges()* function can prepare a `nutscan_ip_range_list_t` | ||
structure by zeroing out its fields. If the argument is `NULL`, the structure | ||
is dynamically allocated. Either way, a pointer to it is returned. | ||
|
||
A structure passed by caller is not assumed to have any valid contents to free, | ||
as it may have garbage from stack after allocation. | ||
|
||
The caller must free the contents of the structure after completing its use | ||
by calling `nutscan_free_ip_ranges` (after which the structure can be re-used), | ||
and explicitly `free()` the structure object itself if it was allocated | ||
dynamically (e.g. by calling `nutscan_init_ip_ranges(NULL)`). | ||
|
||
NOTES | ||
----- | ||
|
||
Technically, the function is currently defined in 'nutscan-ip.h' file. | ||
|
||
SEE ALSO | ||
-------- | ||
|
||
linkman:nutscan_free_ip_ranges[3], linkman:nutscan_add_ip_range[3], | ||
linkman:nutscan_stringify_ip_ranges[3], | ||
linkman:nutscan_cidr_to_ip[3], | ||
linkman:nutscan_ip_ranges_iter_init[3], | ||
linkman:nutscan_ip_ranges_iter_inc[3] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
NUTSCAN_IP_RANGES_ITER_INC(3) | ||
============================= | ||
|
||
NAME | ||
---- | ||
|
||
nutscan_ip_ranges_iter_inc - Proceed with iteration of an IP address range | ||
using a `nutscan_ip_range_list_iter_t` structure. | ||
|
||
SYNOPSIS | ||
-------- | ||
|
||
#include <nut-scan.h> | ||
|
||
char * nutscan_ip_ranges_iter_inc(nutscan_ip_range_list_iter_t *irliter); | ||
|
||
DESCRIPTION | ||
----------- | ||
|
||
The *nutscan_ip_ranges_iter_inc()* function can prepare an iterator from | ||
the specified `nutscan_ip_range_list_t` structure. | ||
|
||
This function skips work if: | ||
|
||
* the structure pointer is `NULL` (`NULL` is returned); | ||
* the structure pointer's `ip_range` list is `NULL` (`NULL` is returned), | ||
* the structure pointer's `ip_range_iter` pointer is `NULL` (`NULL` is | ||
returned). | ||
|
||
Returns the next IP address from the currently iterated registered IP | ||
address range, or switches iteration to the next range if no addresses | ||
remained in the current one. | ||
|
||
NOTES | ||
----- | ||
|
||
Technically, the function is currently defined in 'nutscan-ip.h' file. | ||
|
||
SEE ALSO | ||
-------- | ||
|
||
linkman:nutscan_init_ip_ranges[3], linkman:nutscan_free_ip_ranges[3], | ||
linkman:nutscan_cidr_to_ip[3], | ||
linkman:nutscan_ip_ranges_iter_init[3] |
Oops, something went wrong.