BasicSec
A Python library and CLI tool for basic and mostly passive security scanning like DNS and e-mail.
Features
- DNS Security Checks: MX records, SPF, DMARC, DNSSEC validation
- Passive Scanning: DNS-only checks that don't connect to target servers
- Active Scanning: Includes SMTP connection testing and STARTTLS validation
- Batch Processing: Scan multiple domains efficiently
- CLI Tool: Easy-to-use command line interface
- Library API: Integrate security checks into your Python applications
Installation
pip install basicsec
Quick Start
Command Line Usage
# Passive scan of a single domain
basicsec example.com
# Active scan with SMTP tests
basicsec example.com --active
# Scan multiple domains
basicsec example.com google.com --multiple
# Quick checks only
basicsec example.com --quick --checks live mx spf
# JSON output
basicsec example.com --json
Python Library Usage
from basicsec import BasicSecurityScanner
# Initialize scanner
scanner = BasicSecurityScanner()
# Passive scan
result = scanner.passive_scan("example.com")
print(f"SPF Valid: {result['spf_valid']}")
print(f"DMARC Valid: {result['dmarc_valid']}")
print(f"DNSSEC Enabled: {result['dnssec_enabled']}")
# Active scan (includes SMTP tests)
result = scanner.active_scan("example.com")
print(f"SMTP Connection: {result['has_smtp_connection']}")
print(f"STARTTLS Support: {result['supports_starttls']}")
# Quick batch check
result = scanner.quick_domain_check(
["example.com", "google.com"],
check_types=["live", "mx", "spf", "dmarc"]
)
Security Checks
DNS Records
- MX Records: Mail exchange server configuration
- SPF Records: Sender Policy Framework validation
- DMARC Records: Domain-based Message Authentication validation
- DNSSEC: DNS Security Extensions status and validation
SMTP Tests (Active Mode)
- Connection Testing: Verify SMTP server connectivity
- STARTTLS Support: Check for encrypted connection capability
- Multiple Ports: Test common SMTP ports (25, 465, 587)
CLI Options
usage: basicsec [-h] [--active | --passive | --quick] [--multiple]
[--checks {live,mx,spf,dmarc,dnssec} [{live,mx,spf,dmarc,dnssec} ...]]
[--json] [--timeout TIMEOUT] [--verbose]
domains [domains ...]
positional arguments:
domains Domain(s) to scan
optional arguments:
--active Perform active scan (includes SMTP tests)
--passive Perform passive scan (DNS only, default)
--quick Quick check mode (fastest)
--multiple Scan multiple domains
--checks Types of quick checks to perform
--json Output results in JSON format
--timeout TIMEOUT DNS timeout in seconds (default: 5.0)
--verbose, -v Enable verbose logging
Exit Codes
The CLI returns exit codes based on security issues found:
0: No issues detected1-3: Number of security issues found (SPF, DMARC, DNSSEC)
Requirements
- Python 3.8+
- dnspython>=2.3.0
- email-validator>=2.0.0
Development
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linting
flake8 basicsec/
black basicsec/
# Type checking
mypy basicsec/
License
MIT License - see LICENSE file for details.
Contributing
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
Security Considerations
This tool is designed for defensive security analysis only. It performs:
- Passive DNS lookups
- Standard protocol connections (SMTP)
- Public record validation
It does not perform:
- Vulnerability exploitation
- Unauthorized access attempts
- Aggressive scanning techniques
Always ensure you have permission to scan the target domains.
Metadata
Release files for basicsec 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| basicsec-1.1.1.tar.gz | 17.7 kB | Details |
Release files / basicsec-1.1.1.tar.gz
| Download URL | basicsec-1.1.1.tar.gz |
|---|---|
| Size | 17.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d937e67e31c76c9d0c3e2a1ca8977117084cf6fd8dd623d47ed5b477a0d6e3a4
|
|
BLAKE2b-256 checksum How to use checksums |
f6d55592156345432c7d9e872fc6ca16512426cba23677faab0ad4ec4eaabd61
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|