-
Notifications
You must be signed in to change notification settings - Fork 1
Troubleshooting
Common issues and solutions for IndustrialXPL-Forge.
Symptom: pip reports build error or dependency conflict.
Solution:
# Upgrade pip first python -m pip install --upgrade pip # Install with verbose output to see exact error pip install industrialxpl-forge -v # If scapy fails on Windows, install Npcap first # https://npcap.com/ # Python version check python --version # must be 3.9+
Symptom: ixf: command not found or 'ixf' is not recognized
Diagnosis:
# Check if entry point installed pip show industrialxpl-forge | grep -i location # Find the scripts directory python -c "import sys; print(sys.prefix + '/Scripts')" # Windows python -c "import sys; print(sys.prefix + '/bin')" # Linux/macOS
Solution:
# Linux/macOS: add to PATH export PATH="$HOME/.local/bin:$PATH" echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc # Windows: add Scripts folder to PATH in System Environment Variables # Or use the full path: python -m industrialxpl # Or from the repo: python ixf.py
Cause: readline is None on Windows (Unix-only module), and the shell tried to call it.
Fix: Upgrade to v1.0.12+ which guards all readline calls:
pip install --upgrade industrialxpl-forge
If still failing, manually install pyreadline3:
pip install pyreadline3>=3.4Cause: scapy failed to install (common on Windows without Npcap).
Fix:
# Install Npcap first (Windows): https://npcap.com/ # Then: pip install scapy # On Linux if libpcap missing: sudo apt install libpcap-dev # Debian/Ubuntu sudo dnf install libpcap-devel # Fedora/RHEL pip install scapy
Cause: pysnmp not installed or wrong version.
Fix:
pip install "pysnmp>=6.1" # Note: pysnmp v4.x is incompatible with Python 3.12+
Symptom:
RequestsDependencyWarning: urllib3 (2.6.3) or chardet doesn't match a supported version!
Fix:
pip install "requests>=2.31.0,<3.0" "urllib3>=1.26.0,<3.0"
Symptom:
[*] Indexing modules...
[+] 0 modules indexed.
Diagnosis:
python -c " from industrialxpl.core.exploit.utils import index_modules, MODULES_DIR print('MODULES_DIR:', MODULES_DIR) print('Exists:', MODULES_DIR.exists()) mods = index_modules() print('Count:', len(mods)) "
Fix:
# Reinstall package pip install --force-reinstall industrialxpl-forge # Or install from source git clone https://github.com/mrhenrike/IndustrialXPL-Forge.git cd IndustrialXPL-Forge pip install -e .
Symptom:
ixf > use cve/siemens/cve_2021_22681_s7_1200_hardcoded_key
[-] Error loading module: ...
Diagnosis:
python -c " from industrialxpl.core.exploit.utils import import_exploit obj = import_exploit('industrialxpl.modules.cve.siemens.cve_2021_22681_s7_1200_hardcoded_key') print('OK:', obj) "
Common causes:
- Syntax error in module file — check the file for syntax issues
- Missing dependency — the module may require an optional package
- Wrong Python version — some modules use f-strings or walrus operator
Symptom: check shows NOT VULNERABLE even when target should respond.
Diagnosis:
# Test raw connectivity python -c " import socket s = socket.socket() s.settimeout(5) try: s.connect(('192.168.1.100', 502)) print('Port open') s.close() except Exception as e: print('Failed:', e) "
Common causes:
- Firewall blocking the port
- Wrong port number — use
show optionsand verify - Module probe rejected by device — some devices only respond to specific unit IDs
- Network routing issue — can you ping the target?
Cause: Module's run() doesn't call DestructiveGate.print_simulation().
This may be a module bug. Check the module source:
cat industrialxpl/modules/cve/vendor/module_name.py | grep "print_simulation"
If missing, the module only implements live mode. File an issue on GitHub.
Windows: Requires pyreadline3. Install if missing:
pip install pyreadline3
Linux/macOS: readline should be built-in. If not:
pip install readline # macOS sudo apt install python3-readline # Debian/Ubuntu
Symptom: Up-arrow doesn't show previous session commands.
Cause: ~/.ixf_history file not being written (permission issue or readline not available).
Fix:
# Check if file exists ls -la ~/.ixf_history # Check write permissions touch ~/.ixf_history
Symptom: Output shows \x1b[32m[+]\x1b[0m instead of colored text.
Fix: Use Windows Terminal or PowerShell 7:
# Install Windows Terminal from Microsoft Store # Or use PowerShell 7+: https://github.com/PowerShell/PowerShell # Alternative: disable colors (workaround) $env:NO_COLOR = "1" ixf
Fix:
sudo python tools/nse_install.py --install # or sudo ixf # then: nse install
Fix: Run terminal as Administrator:
- Right-click PowerShell → Run as Administrator
- Then run
ixfandnse install
Symptom: nse status shows "Nmap NOT installed" but nmap works in terminal.
Cause: nmap not in PATH for the Python process.
Diagnosis:
import shutil print(shutil.which("nmap")) # Should show path or None
Fix (Linux/macOS):
which nmap # Find nmap path # Add to PATH if needed export PATH="/usr/bin:$PATH"
Fix (Windows):
where.exe nmap # Find nmap path # Add Nmap folder to PATH in System Environment Variables
Run nmap --script-updatedb to refresh the script database:
nmap --script-updatedb # Or use IXF (it runs this automatically after install) ixf > nse install
ixf > sast /path/to/plc/ --mode sast
[-] No LLM API key configured
Fix:
export OPENAI_API_KEY=sk-... export GOOGLE_AI_STUDIO_API_KEY=AIzaSy... ixf
Or inside IXF:
ixf > llm-key gemini AIzaSyBGaoio...
Rate limit exceeded. Wait a few seconds and retry:
ixf > sast /path/to/plc/ --mode sast
Or switch to a different provider:
ixf > llm-key openai sk-...
Symptom: Analysis cuts off mid-sentence.
Cause: Default max_tokens limit.
Workaround: Use a provider with higher token limits (GPT-4o: 128K context, Claude 3.5: 200K).
Cause: Large number of modules (1190+) being indexed.
Workaround: Indexing is cached in memory for the session. Subsequent operations are fast.
Improvement: Use non-interactive mode for single commands:
ixf stats # faster than interactive start + statsCauses:
- Large CIDR range — use
--rate-limitto control pace - High timeout — reduce with
set timeout 3 - Many modules per technique — use
ttp-checkfor faster check-only mode
ixf > ttp T0843 192.168.1.0/24 --rate-limit 100
ixf > set timeout 3
ixf > ttp-check T0843 192.168.1.0/24
- Check this troubleshooting guide
- Run
python tools/env_doctor.pyfor environment diagnostics - Search GitHub Issues: https://github.com/mrhenrike/IndustrialXPL-Forge/issues
- Open a new issue with:
- IXF version:
ixf stats - Python version:
python --version - OS:
uname -a(Linux/macOS) orwinver(Windows) - Full error output
- IXF version:
Back to Index