تخطَّ إلى المحتوى

darkstat

sudo apt-get update
sudo apt-get install darkstat
sudo yum install darkstat
cd /tmp
wget https://github.com/emikulic/darkstat/releases/download/3.5.20/darkstat-3.5.20.tar.gz
tar xzf darkstat-3.5.20.tar.gz
cd darkstat-3.5.20
./configure
make
sudo make install
brew install darkstat
darkstat --version
darkstat --help
# Start with default settings (localhost:666)
sudo darkstat -i eth0

# Start on specific interface
sudo darkstat -i wlan0
  • Open browser: http://localhost:666
  • Real-time traffic statistics
  • Bandwidth usage graphs
  • Top hosts and protocols
  • DNS resolution names
# Press Ctrl+C in terminal
# Or kill process
sudo pkill darkstat
# Show all network interfaces
ip link show

# Or use ifconfig
ifconfig

# Or with darkstat
sudo darkstat -l
InterfaceTypeExample Use
eth0EthernetWired connection
wlan0WiFiWireless connection
docker0VirtualDocker network
veth*VirtualContainer interface
tun0VPNVPN tunnel
# Start separate instances on different ports
sudo darkstat -i eth0 -p 666
sudo darkstat -i wlan0 -p 667
# Enable promiscuous mode (captures all traffic)
sudo darkstat -i eth0 -m

# Monitor mode on wireless
sudo darkstat -i wlan0 -m
SectionPurpose
BandwidthReal-time and historical traffic
Top HostsMost active IP addresses
ProtocolsTraffic breakdown by protocol
PortsConnection ports and protocols
DNSResolved hostnames
  1. Graph - Real-time bandwidth graph
  2. Hosts - Connected IP addresses
  3. Ports - TCP/UDP port activity
  4. Protocols - IP, TCP, UDP, ICMP breakdown
  5. Export - Save data as CSV
  • Bandwidth graph updates every second
  • Color-coded incoming/outgoing traffic
  • Historical data retention configurable
  • Peak and average rates shown
# Only monitor traffic to/from specific IP
sudo darkstat -i eth0 -f "host 192.168.1.100"

# Exclude IP address
sudo darkstat -i eth0 -f "not host 192.168.1.1"
# Monitor specific subnet only
sudo darkstat -i eth0 -f "net 192.168.1.0/24"

# Exclude local traffic
sudo darkstat -i eth0 -f "not net 192.168.0.0/16"
# Monitor specific port
sudo darkstat -i eth0 -f "port 80"

# Monitor port range
sudo darkstat -i eth0 -f "port 80 or port 443"

# Exclude common ports
sudo darkstat -i eth0 -f "not (port 22 or port 23)"
# Monitor TCP traffic only
sudo darkstat -i eth0 -f "tcp"

# Monitor UDP traffic only
sudo darkstat -i eth0 -f "udp"

# Monitor ICMP (ping)
sudo darkstat -i eth0 -f "icmp"
# Multiple conditions (AND)
sudo darkstat -i eth0 -f "tcp and port 443"

# Multiple conditions (OR)
sudo darkstat -i eth0 -f "tcp port 80 or tcp port 443"

# Exclude and include
sudo darkstat -i eth0 -f "tcp and not port 22"
# Resolve hostnames (enabled by default)
sudo darkstat -i eth0 -b

# Bind to address (localhost)
sudo darkstat -i eth0 -b 127.0.0.1
  1. Open dashboard
  2. Click Hosts tab
  3. Hostnames shown if DNS resolution succeeds
  4. IP addresses shown if resolution fails
SettingDescription
DNS cacheStores resolved names
Reverse lookupConvert IP to hostname
Local hosts/etc/hosts file usage
TimeoutDNS query timeout (default 2s)
# Resolve IP from command line
nslookup 192.168.1.100
dig -x 192.168.1.100
# Default database directory
~/.darkstat/

# Database file
~/.darkstat/darkstat.db

# Check size
du -h ~/.darkstat/darkstat.db
  1. Open dashboard
  2. Click Export button
  3. Select data type (Hosts, Protocols, Ports)
  4. Save CSV file
# No direct CLI export, but redirect browser download
# Or use sqlite3 to access database directly
sqlite3 ~/.darkstat/darkstat.db ".dump" > backup.sql
# Create backup
cp -r ~/.darkstat/ ~/.darkstat.backup

# Or archive
tar czf darkstat-backup.tar.gz ~/.darkstat/
# Stop darkstat
sudo pkill darkstat

# Remove database
rm -rf ~/.darkstat/

# Restart darkstat
sudo darkstat -i eth0
# Check database size
ls -lh ~/.darkstat/darkstat.db

# Vacuum (optimize) database
sqlite3 ~/.darkstat/darkstat.db "VACUUM;"

# Check database integrity
sqlite3 ~/.darkstat/darkstat.db "PRAGMA integrity_check;"
# Start darkstat service
sudo systemctl start darkstat

# Enable on boot
sudo systemctl enable darkstat

# Check status
sudo systemctl status darkstat

# Stop service
sudo systemctl stop darkstat
# Create config file
sudo nano /etc/darkstat/init.cfg

# Example configuration
INTERFACE="eth0"
PORT="666"
BINDADDR="0.0.0.0"
QUERYINTERFACE="yes"
LOGFILE="/var/log/darkstat.log"
# Run in background
sudo darkstat -i eth0 -d

# Specify PID file
sudo darkstat -i eth0 -d -p /var/run/darkstat.pid

# Log output
sudo darkstat -i eth0 -d 2>&1 | tee darkstat.log
# View darkstat processes
ps aux | grep darkstat

# Check port listening
sudo netstat -lntp | grep 666
sudo ss -lntp | grep 666
# Specify interface and port
sudo darkstat -i eth0 -p 8080

# Bind to specific address
sudo darkstat -i eth0 -b 192.168.1.10

# Filter expression
sudo darkstat -i eth0 -f "tcp port 80"

# Verbose logging
sudo darkstat -i eth0 -v

# Daemonize
sudo darkstat -i eth0 -d

# Chroot (security)
sudo darkstat -i eth0 -c /var/darkstat
# Create /etc/darkstat/init.cfg
INTERFACE="eth0"
PORT="666"
BINDADDR="127.0.0.1"
QUERYINTERFACE="yes"
LOGFILE="/var/log/darkstat.log"
HISTORYLEN="50"
SYSLOG="no"
PCAP_BUFSIZE="0"
BANNER="yes"
OptionDefaultDescription
INTERFACEeth0Network interface to monitor
PORT666Web dashboard port
BINDADDRlocalhostIP address to bind to
QUERYINTERFACEyesEnable interface info queries
HISTORYLEN50History length in entries
BANNERyesShow darkstat banner

Scenario: Monitor Internet Bandwidth Usage

Section titled “Scenario: Monitor Internet Bandwidth Usage”
# 1. Start darkstat on WAN interface
sudo darkstat -i eth0

# 2. Open http://localhost:666
# 3. View Bandwidth graph for total usage
# 4. Check Hosts tab for top consumers
# 5. Monitor historical data
# 1. Filter traffic to server
sudo darkstat -i eth0 -f "host 192.168.1.50"

# 2. Open dashboard
# 3. Monitor Ports tab for active services
# 4. View Protocols breakdown
# 5. Track connection patterns
# 1. Start on WiFi interface
sudo darkstat -i wlan0 -m

# 2. Resolve client hostnames
# 3. View Top Hosts
# 4. Identify heavy users
# 5. Check bandwidth per client
# 1. Let darkstat run overnight
sudo darkstat -i eth0 -d

# 2. Next morning, open dashboard
# 3. Click Export
# 4. Save CSV file
# 5. Analyze with spreadsheet tool
# 1. Start on VPN interface
sudo darkstat -i tun0

# 2. Monitor traffic through tunnel
# 3. View Protocol breakdown
# 4. Track VPN throughput
# 5. Identify data leaks
Featuredarkstatntopng
SizeLightweightHeavy
SetupSimpleComplex
Web UIBasicAdvanced
Resource UsageLowHigh
GeolocationNoYes
AlertsLimitedYes
CostFreeFree/Paid
Learning CurveEasyMedium
Featuredarkstatiftop
InterfaceWebTerminal
StorageDatabaseNone
HistoryYesReal-time only
BandwidthReal-timeReal-time
Drill-downYesLimited
ExportYesNo
ProtocolsTCP/UDPLayer 3/4
Featuredarkstatvnstat
Protocol DetailYesNo
Real-timeYesInterval
Web UIYesNo
DatabaseSQLiteCustom
PortabilityGoodGood
Install SizeSmallSmall
Use CaseReal-time analysisLong-term stats
# Check if darkstat is running
sudo ps aux | grep darkstat

# Verify port is listening
sudo netstat -lntp | grep 666

# Check firewall rules
sudo ufw status
sudo firewall-cmd --list-ports
# Verify correct interface
ip link show

# Check filter syntax
sudo darkstat -i eth0 -f "tcp" -v

# Verify interface has traffic
sudo tcpdump -i eth0 -c 5
# darkstat requires root
sudo darkstat -i eth0

# Or add user to network group
sudo usermod -a -G netdev username
sudo darkstat -i eth0
# Reduce history length
sudo darkstat -i eth0 -n 30

# Simplify filter
sudo darkstat -i eth0 -f "tcp port 80"

# Increase capture buffer size
sudo darkstat -i eth0 -s 32000
# Enable DNS resolution
sudo darkstat -i eth0

# Check DNS settings
cat /etc/resolv.conf

# Test resolution manually
nslookup 192.168.1.100
# Check configuration file
cat /etc/darkstat/init.cfg

# Test manually
sudo darkstat -i eth0 -v

# View system logs
sudo journalctl -xe
sudo tail -f /var/log/darkstat.log
# Increase buffer size
sudo darkstat -i eth0 -s 32000 -n 100

# Use larger history
sudo darkstat -i eth0 -n 100

# Disable DNS resolution if needed
sudo darkstat -i eth0 -l
# Reduce history
sudo darkstat -i eth0 -n 10

# Smaller buffer
sudo darkstat -i eth0 -s 8192

# Filter traffic
sudo darkstat -i eth0 -f "tcp or udp"
# Check process memory
ps -p $(pgrep darkstat) -o rss=

# Monitor over time
watch -n 1 'ps -p $(pgrep darkstat) -o rss='
# Restrict dashboard access to local machine
sudo darkstat -i eth0 -b 127.0.0.1
# Use nginx to add authentication
# nginx listens on :80
# Forwards to darkstat on :666 with auth
# Allow only specific IPs
sudo ufw allow from 192.168.1.0/24 to any port 666

# Block external access
sudo ufw deny to any port 666 from any
# Use nginx/Apache SSL proxy
# Access via https://localhost/darkstat

Monitor Multiple Interfaces Simultaneously

Section titled “Monitor Multiple Interfaces Simultaneously”
# Create systemd service for each interface
sudo nano /etc/systemd/system/darkstat-eth0.service
sudo nano /etc/systemd/system/darkstat-wlan0.service

# Each on different port (666, 667)
# Create cron job for daily backup
crontab -e
# 0 2 * * * tar czf /backup/darkstat-$(date +\%Y\%m\%d).tar.gz ~/.darkstat/
# Query database directly
sqlite3 ~/.darkstat/darkstat.db

# Show tables
.tables

# Query host statistics
SELECT * FROM hosts LIMIT 10;

# Find top hosts by bytes
SELECT * FROM hosts ORDER BY bytes_sent+bytes_recv DESC LIMIT 10;