https://github.com/alextopher/bogon
Rust library for checking whether an IP address is bogus
https://github.com/alextopher/bogon
Last synced: 10 months ago
JSON representation
Rust library for checking whether an IP address is bogus
- Host: GitHub
- URL: https://github.com/alextopher/bogon
- Owner: Alextopher
- License: mit
- Created: 2024-04-30T15:41:56.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-01-25T18:21:17.000Z (about 1 year ago)
- Last Synced: 2025-01-25T19:20:39.371Z (about 1 year ago)
- Language: Rust
- Homepage:
- Size: 73.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Bogon
[](https://github.com/Alextopher/bogon/actions/workflows/rust.yaml)
[](https://crates.io/crates/bogon)
[](https://docs.rs/bogon)
Bogon is a Rust library for checking whether an IP address is considered "bogus" or "bogon", meaning it's not valid for use on the public internet. This includes private IP addresses, loopback addresses, and other reserved addresses.
## Features
- Supports both IPv4 and IPv6 addresses.
- Includes methods for checking bogus IP addresses using extension traits.
- Strives to be as fast as possible. The compiler generates SIMD instructions for both IPv4 and IPv6 address checks.
- IPv6 ranges are generated at build time from the [IANA reserved address registry](https://www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.xhtml).
- The `download` feature can be enabled to download the latest reserved address ranges from the IANA registry at build time.
- No dependencies, `no_std` compatible.
### TODO
- [ ] Updating address ranges at runtime.
## MSRV
Rust 1.80 is the minimum supported rust version due to the use of `to_bits()`. It's unlikely that the MSRV will be increased in the future.
## Examples
```rust
use core::net::{IpAddr, Ipv4Addr, Ipv6Addr};
assert_eq!(bogon::is_bogon_str("127.0.0.1"), Ok(true));
assert_eq!(bogon::is_bogon_str("8.8.8.8"), Ok(false));
assert_eq!(bogon::is_bogon_str("::1"), Ok(true));
assert!(bogon::is_bogon_str("foo").is_err());
assert_eq!(bogon::is_bogon_v4(Ipv4Addr::new(127, 0, 0, 1)), true);
assert_eq!(bogon::is_bogon_v4(Ipv4Addr::new(8, 8, 8, 8)), false);
assert_eq!(bogon::is_bogon_v6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1)), true);
assert_eq!(bogon::is_bogon(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1))), true);
assert_eq!(bogon::is_bogon(IpAddr::V4(Ipv4Addr::new(8, 8, 8, 8))), false);
assert_eq!(bogon::is_bogon(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1))), true);
use bogon::BogonExt;
assert_eq!(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)).is_bogon(), true);
assert_eq!(IpAddr::V4(Ipv4Addr::new(8, 8, 8, 8)).is_bogon(), false);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1)).is_bogon(), true);
```