isinetaddr/README.md

113 lines
2.4 KiB
Markdown
Raw Normal View History

2023-08-25 20:57:09 +02:00
## About
2024-03-20 01:13:14 +01:00
isinetaddr is a clang library that provides a set of functions for
IP address validation. The library is guided by [testcases](test/)
that help verify safety and correctness.
2023-08-25 20:57:09 +02:00
## Examples
2024-03-20 01:13:14 +01:00
### isinetaddr4
2023-08-25 20:57:09 +02:00
2024-03-20 01:13:14 +01:00
The `isinetaddr4` function returns `true` when given a valid IPv4 address:
2023-08-25 20:57:09 +02:00
```C
#include <isinetaddr.h>
#include <stdio.h>
#include <stdlib.h>
2024-03-20 01:13:14 +01:00
const char *ipv4[] = {
2024-09-13 04:56:46 +02:00
/* valid */
"127.0.0.1", "1.1.1.1", "0.0.0.0",
/* invalid */
"0.0.0.0.0", "foobar"
2024-03-20 01:13:14 +01:00
};
2023-08-25 20:57:09 +02:00
int
main(void)
{
2024-09-13 04:56:46 +02:00
for (int i = 0; i < 5; i++) {
if (isinetaddr4(ipv4[i])) {
printf("%s is a valid IPv4 address.\n", ipv4[i]);
} else {
printf("%s is an invalid IPv4 address.\n", ipv4[i]);
}
2024-03-20 01:13:14 +01:00
}
2024-09-13 04:56:46 +02:00
return (EXIT_SUCCESS);
2023-08-25 20:57:09 +02:00
}
```
2024-03-20 01:13:14 +01:00
### iscidraddr4
2023-08-26 21:25:52 +02:00
2024-03-20 01:13:14 +01:00
The `iscidraddr4` function supports the same features as `isinetaddr4` plus
2023-08-26 21:25:52 +02:00
[CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation).
The following example builds on the previous example:
```C
#include <isinetaddr.h>
#include <stdio.h>
#include <stdlib.h>
2024-03-20 01:13:14 +01:00
const char *ipv4[] = {
2024-09-13 04:56:46 +02:00
/* valid */
"127.0.0.1", "192.168.2.1/32", "192.168.2.1/0",
/* invalid */
"192.168.2.1/33", "foobar"
2024-03-20 01:13:14 +01:00
};
2023-08-26 21:25:52 +02:00
int
main(void)
{
2024-09-13 04:56:46 +02:00
for (int i = 0; i < 5; i++) {
if (iscidraddr4(ipv4[i])) {
printf("%s is a valid IPv4 address.\n", ipv4[i]);
} else {
printf("%s is an invalid IPv4 address.\n", ipv4[i]);
}
2024-03-20 01:13:14 +01:00
}
2024-09-13 04:56:46 +02:00
return (EXIT_SUCCESS);
2023-09-15 05:20:57 +02:00
}
2023-08-26 21:25:52 +02:00
```
2024-03-20 01:13:14 +01:00
### isinetaddr6
2023-08-26 21:25:52 +02:00
2024-03-20 01:13:14 +01:00
The `isinetaddr6` function returns `true` when given a valid IPv6 address:
2023-09-12 03:37:25 +02:00
```C
#include <isinetaddr.h>
#include <stdio.h>
#include <stdlib.h>
2024-03-20 01:13:14 +01:00
const char *ipv6[] = {
2024-09-13 04:56:46 +02:00
/* valid */
"::", "::1", "0000:0000:0000:0000:0000:0000:0000:0000",
/* invalid */
"foobar", "00:::0"
2024-03-20 01:13:14 +01:00
};
2023-09-12 03:37:25 +02:00
int
main(void)
{
2024-09-13 04:56:46 +02:00
for (int i = 0; i < 5; i++) {
if (isinetaddr6(ipv6[i])) {
printf("%s is a valid IPv4 address.\n", ipv6[i]);
} else {
printf("%s is an invalid IPv4 address.\n", ipv6[i]);
}
2024-03-20 01:13:14 +01:00
}
2024-09-13 04:56:46 +02:00
return (EXIT_SUCCESS);
2023-09-15 05:20:57 +02:00
}
2023-09-12 03:37:25 +02:00
```
2023-08-25 20:57:09 +02:00
## Sources
2024-03-20 01:13:14 +01:00
* [GitHub](https://github.com/0x1eef/isinetaddr#readme)
* [GitLab](https://gitlab.com/0x1eef/isinetaddr#about)
2024-09-13 04:35:10 +02:00
* [brew.bsd.cafe/@0x1eef](https://brew.bsd.cafe/0x1eef/isinetaddr#about)
2023-08-25 20:57:09 +02:00
## <a id="license"> License </a>
2024-09-13 04:35:10 +02:00
[BSD Zero Clause](https://choosealicense.com/licenses/0bsd/)
2023-08-25 20:57:09 +02:00
<br>
2024-09-13 04:35:10 +02:00
See [LICENSE](./LICENSE)