cidr-cli
Version:
CLI wrapper for cidr-tools contains method to check if IP addresses are within CIDR ranges
259 lines (190 loc) โข 6.84 kB
Markdown
# cidr-cli
[](https://badge.fury.io/js/cidr-cli)
[](https://github.com/n-ae/cidr-cli/actions)
[](https://codecov.io/gh/n-ae/cidr-cli)
[](https://opensource.org/licenses/MIT)
A CLI wrapper for the [cidr-tools](https://www.npmjs.com/package/cidr-tools) package, specifically wrapping the `containsCidr` method to check if an IP address is contained within CIDR ranges.
## ๐ Installation
### Global Installation (Recommended)
```bash
npm install -g cidr-cli
```
### Local Installation
```bash
npm install cidr-cli
```
### Using npx (No Installation Required)
```bash
npx cidr-cli contains <cidr-list> <ip>
```
## ๐ Usage
```bash
cidr-cli contains <cidr-list> <ip>
```
### Arguments
- `<cidr-list>`: Comma-separated list of CIDR ranges (e.g., `192.168.1.0/24,10.0.0.0/8`)
- `<ip>`: IP address to check (IPv4 or IPv6)
### Examples
```bash
# Single CIDR range
cidr-cli contains 192.168.1.0/24 192.168.1.100
# Output: true
# Multiple CIDR ranges
cidr-cli contains 10.0.0.0/8,172.16.0.0/12 10.1.2.3
# Output: true
# User's example
cidr-cli contains 1.0.0.0/24,2.0.0.0/24 1.0.0.1
# Output: true
# IPv6 support
cidr-cli contains 2001:db8::/32 2001:db8:0:0:1::1
# Output: true
# IP not in range
cidr-cli contains 1.0.0.0/24,2.0.0.0/24 3.0.0.1
# Output: false
# Help
cidr-cli --help
```
## ๐ Exit Codes
- `0`: IP is contained in one of the CIDR ranges
- `1`: IP is not contained in any of the CIDR ranges
- `2`: Error occurred (invalid arguments, invalid CIDR format, invalid IP, etc.)
## ๐งช Use Cases
### Shell Scripts
```bash
#!/bin/bash
if cidr-cli contains 192.168.0.0/16 $USER_IP; then
echo "User is on local network"
else
echo "User is on external network"
fi
```
### CI/CD Pipelines
```yaml
- name: Check if IP is in allowed range
run: |
if ! cidr-cli contains 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 ${{ env.SERVER_IP }}; then
echo "Server IP not in allowed private ranges"
exit 1
fi
```
### Network Security
```bash
# Check if suspicious IP is in known bad ranges
if cidr-cli contains 1.2.3.0/24,5.6.7.0/24 $SUSPICIOUS_IP; then
echo "IP is in known malicious range - blocking"
# Add blocking logic here
fi
```
## ๐ง Development
### Requirements
- Node.js >= 14.0.0
- npm >= 6.0.0
### Setup
```bash
git clone https://github.com/n-ae/cidr-cli.git
cd cidr-cli
npm install
```
### Testing
```bash
# Run tests (Jest with ES modules)
npm test
# Run tests with coverage (c8 + Jest)
npm run test:coverage
# Run tests in watch mode
npm run test:watch
```
### Linting
```bash
# Check for linting issues
npm run lint
# Fix linting issues automatically
npm run lint:fix
```
### Documentation
```bash
# Generate JSDoc documentation
npm run docs
```
## ๐๏ธ Project Structure
```
cidr-cli/
โโโ index.js # Main CLI implementation (ES modules)
โโโ index.test.js # Jest test suite (13 comprehensive tests)
โโโ package.json # Package configuration
โโโ package-lock.json # Lockfile v2 for CI compatibility
โโโ README.md # This file
โโโ LICENSE # MIT license
โโโ CHANGELOG.md # Version history
โโโ PUBLISHING.md # Publishing guide
โโโ WARP.md # Claude/Warp AI development guide
โโโ .eslintrc.json # ESLint configuration (Standard style)
โโโ .eslintignore # ESLint exclusions
โโโ jest.config.js # Jest configuration (ES modules)
โโโ .c8rc.json # c8 coverage configuration
โโโ jsdoc.conf.json # JSDoc configuration
โโโ .npmignore # npm publish exclusions
โโโ .gitignore # Git exclusions
โโโ .github/
โ โโโ workflows/ # GitHub Actions CI/CD (Node 14-21 matrix)
โโโ docs/ # Generated JSDoc documentation
โโโ coverage/ # c8 coverage reports (HTML + LCOV)
โโโ tests/ # Legacy test files (kept for reference)
```
## ๐ Publishing
This package uses automated publishing via GitHub Actions:
1. **On Push/PR**: Runs full test suite across Node.js 14.x, 16.x, 18.x, 20.x, 21.x
2. **On Tag**: Automatically publishes to npm and creates GitHub release
### Manual Publishing
```bash
npm version patch|minor|major
git push origin main --tags
```
## ๐ Test Coverage
The project maintains **100% test coverage** using c8:
- **13 test cases** covering all functionality and edge cases
- **Integration tests**: End-to-end CLI execution via `child_process.spawn()`
- **Coverage tool**: c8 (Node.js native coverage) instead of Jest built-in
- **Coverage threshold**: 80% minimum, currently achieving 100%
- **Reports**: Text, LCOV (for Codecov), and HTML formats
Test categories:
- โ
CIDR containment checks (IPv4/IPv6)
- โ
Multiple CIDR range support
- โ
Help and usage information
- โ
Error handling (invalid CIDR, invalid IP, malformed arguments)
- โ
Exit code validation
- โ
Whitespace handling in CIDR lists
- โ
Process-level coverage tracking
## ๐ Dependencies
### Runtime Dependencies
- **[cidr-tools](https://www.npmjs.com/package/cidr-tools)** ^11.0.3 - Core CIDR functionality
### Development Dependencies
- **[jest](https://jestjs.io/)** ^29.7.0 - Testing framework
- **[c8](https://github.com/bcoe/c8)** ^10.1.3 - Native Node.js code coverage
- **[eslint](https://eslint.org/)** ^8.57.0 - Code linting
- **[eslint-config-standard](https://standardjs.com/)** ^17.1.0 - Standard style guide
- **[jsdoc](https://jsdoc.app/)** ^4.0.3 - Documentation generation
### Key Features
- **ES Modules**: Modern JavaScript module system
- **Node.js 14+**: Minimum Node.js version support
- **CI/CD**: GitHub Actions with Node.js 14.x-21.x matrix
- **Coverage**: 100% code coverage with c8
- **Lockfile v2**: Enhanced CI compatibility
๐ License
MIT ยฉ [nae](https://github.com/n-ae)
## ๐ค Contributing
1. Fork the repository
2. Create a feature branch: `git checkout -b feature/amazing-feature`
3. Commit your changes: `git commit -am 'Add amazing feature'`
4. Push to the branch: `git push origin feature/amazing-feature`
5. Open a Pull Request
## ๐ Issues
If you find a bug, please file an issue on [GitHub Issues](https://github.com/n-ae/cidr-cli/issues).
## ๐ Roadmap
- [ ] Add support for excluding CIDR ranges
- [ ] Add JSON output format option
- [ ] Add batch processing from file input
- [ ] Add verbose mode with detailed matching information
- [ ] Add support for hostname resolution
---
**Made with โค๏ธ for network administrators and DevOps engineers**