mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Disregard mask when searching for IP addresses #754
Closed
opened 2025-12-29 16:25:30 +01:00 by adam
·
7 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
No Label
type: feature
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#754
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @100Base-TX on GitHub (Mar 8, 2017).
Hi,
The search functionality could use some improvements by adding support for either wildcard or partial searches.
A few examples:
When searching for IP Addresses, it'd be useful to be able to enter a partial IP. For instance "192.168.10" in the search box. It should ideally treat that search as a wildcard. Either as "%192.168.10%" or "192.168.10%".
Similar, but for prefixes. It currently kinda works for /24 boundaries. For instance i can type "192.168.10" in the Prefix search bar, and it will return 192.168.10x.x and any child prefixes. However if i type "192.168" it returns nothing. This seems like weird behavior.
For both of the above, you could certainly search by specifying the parent prefix. But you don't always know what it is from memory. You could find it by drilling down the tree view of prefixes, but that's more steps.
@jeremystretch commented on GitHub (Mar 8, 2017):
This was covered in #787. Wildcards are of limited use when searching for IPs, as they only work along the dotted-decimal boundaries (at 8, 16, and 24 bits). Instead, you can search by covering prefix. For instance, instead of searching for "192.168.10," enter "192.168.10.0/24" in the parent prefix field.
Not only is this approach more efficient at the database level (as compared to casting all prefixes/IPs to strings), it decouples the matching logic from the dotted-decimal format. For example, I can search within 192.168.0.0/21, which cannot be expressed using a simple wildcard (you'd have to resort to using a regular expression).
@100Base-TX commented on GitHub (Mar 8, 2017):
-----------Ignore this post, see next one --------------
Fair enough.
Would it be possible to allow searching by parent prefixes that don't necessarily exist then?
For instance, say there's 10.10.0.0/16 parent prefix. It has an immediate child /28 prefix (10.10.0.64/28 for instance). The current search behavior for the "parent prefix" field is that it will only return results for "10.10.0.0/16" and "10.10.0.64/28". If i try "10.10.0.0/22" for instance, it returns no results. Ideally it should return 10.10.0.64/28, and any prefixes that would be contained by that /22 mask.
Being able to search with arbitrary prefix masks is useful when you don't know the parent prefix, or if you are wanting to quickly test which allocated prefixes would get covered by an ACL.
From an efficiency point of view it should be a cheap query.
@100Base-TX commented on GitHub (Mar 8, 2017):
Actually, the current behavior is different to what i just described.
So it works when searching with bigger masks, but not smaller ones.
For example, say you have this:
10.10.0.0/16
|---10.10.0.0/23
|---10.10.2.0/23
If i search for "10.10.0.0/20", it'll return both 10.10.0.0/23 and 10.10.2.0/23. That seems correct.
If i search for 10.10.3.0/24, it returns no results. I can see why - strictly speaking it doesn't have a parent prefix that is in that range. However i think that the better behavior would be to display any allocated IP addresses that can be matched by a 10.10.3.0/24 mask.
Thoughts?
@jeremystretch commented on GitHub (Mar 8, 2017):
Searching with a parent prefix of 10.10.3.0/24 will return all IP addresses matched by that prefix. It will not return the prefix 10.10.2.0/23, because 10.10.2.0 is not covered by 10.10.3.0/24.
@100Base-TX commented on GitHub (Mar 8, 2017):
But the children IP Addresses kind of are. I guess it just depends on how you look at it. It makes sense to me that "10.10.3.0/24" should return any allocated IP addresses that are in 10.10.3.[0-255], regardless of which prefix they belong to.
Perhaps it'd make sense for the default search field to accept that type of search? Then its like "show me IP addresses that match this search criteria", rather than "show me IP addresses who have a parent subnet that falls within this search criteria".
@jeremystretch commented on GitHub (Mar 8, 2017):
Ok, I think I misunderstood what you were asking. NetBox treats prefixes and IP addresses entirely separately; you're just focused on IP addresses. If I understand correctly, the issue is that searching for 192.168.0.0/24 won't return an IP address 192.168.0.1/23, because its mask is larger than the /24.
This behavior is native to PostgreSQL, but I do see the value in allowing users to search for IPs without regard to their assigned masks. We'd need to read each INET type as though it has a /32 or /128 mask. This can be accomplished either by using
set_masklen()or by recasting thehost()form back to INET. The later is probably preferable as we don't have to worry selecting the correct mask length for the address family.For example, this SQL query would include the IP address 192.168.0.1/23:
@100Base-TX commented on GitHub (Mar 9, 2017):
Thanks for that stretch, champion.