As developers working in networked environments, we often encounter situations where network performance suddenly degrades. The first troubleshooting step is identifying which machine is consuming excessive bandwidth. This becomes particularly crucial in:
- Development environments with multiple VMs
- Continuous integration servers
- Microservices architectures
- Local testing networks
While Zenmap (the GUI version of Nmap) provides useful network mapping capabilities, it's not specifically designed for real-time bandwidth monitoring. More specialized tools include:
1. ntopng
A powerful web-based traffic analysis tool that provides real-time monitoring:
# Install on Ubuntu
sudo apt-get install ntopng
# Basic configuration
sudo ntopng -i eth0 -w 3000
2. iftop
Command-line tool that shows bandwidth usage by host:
sudo iftop -n -P
# -n disables DNS resolution (faster)
# -P shows ports
3. Wireshark
The ultimate packet analyzer for deep inspection:
# Capture filter for top talkers
ip.addr == 192.168.1.0/24 && !arp
# Then use Statistics -> Conversations
For developers needing programmatic access, here's a Python script using psutil:
import psutil
import time
def get_network_usage(interval=1):
io_before = psutil.net_io_counters()
time.sleep(interval)
io_after = psutil.net_io_counters()
return {
'bytes_sent': io_after.bytes_sent - io_before.bytes_sent,
'bytes_recv': io_after.bytes_recv - io_before.bytes_recv
}
while True:
usage = get_network_usage()
print(f"Upload: {usage['bytes_sent']/1024:.2f} KB/s")
print(f"Download: {usage['bytes_recv']/1024:.2f} KB/s")
When analyzing bandwidth usage patterns, consider:
- Sustained high usage vs spikes
- Protocol distribution (TCP/UDP)
- Destination IPs (internal vs external)
- Port numbers (identify applications)
For production environments, setting up automated alerts is crucial. Here's a Bash script using iftop that triggers when bandwidth exceeds a threshold:
#!/bin/bash
THRESHOLD=10000 # 10MB
INTERFACE="eth0"
ALERT_EMAIL="admin@example.com"
while true; do
USAGE=$(iftop -i $INTERFACE -t -s 1 -n -N 2>/dev/null | \
grep "Total send rate" | \
awk '{print $4}' | \
sed 's/[^0-9.]//g')
if (( $(echo "$USAGE > $THRESHOLD" | bc -l) )); then
echo "High bandwidth detected: $USAGE KB/s" | \
mail -s "Bandwidth Alert" $ALERT_EMAIL
fi
sleep 30
done
When your network slows to a crawl, the first troubleshooting step is identifying which device is consuming excessive bandwidth. This could be caused by various scenarios:
- Malware-infected machines generating traffic
- Unauthorized P2P file sharing
- Backup processes running during peak hours
- Streaming media devices consuming bandwidth
While Zenmap (the GUI version of Nmap) can provide some network insights, it's not primarily designed for bandwidth monitoring. Here are more appropriate tools:
# Example using iftop (Linux) to monitor bandwidth in real-time
sudo iftop -n -i eth0
Windows Network Monitoring
For Windows environments, consider these approaches:
:: PowerShell command to get network statistics
Get-NetTCPConnection | Select-Object LocalAddress,RemoteAddress,State,OwningProcess | Sort-Object OwningProcess
Linux/Unix Solutions
On Linux systems, these tools provide detailed bandwidth analysis:
# Install and run nethogs to see per-process bandwidth
sudo apt install nethogs
sudo nethogs eth0
For enterprise networks, SNMP provides comprehensive monitoring:
# Sample snmpwalk command to check interface statistics
snmpwalk -v 2c -c public router_ip IF-MIB::ifHCInOctets
Here's a Python example using psutil to monitor network usage:
import psutil
import time
def monitor_network(interval=1):
last_stats = psutil.net_io_counters(pernic=True)
while True:
time.sleep(interval)
current_stats = psutil.net_io_counters(pernic=True)
for interface in current_stats:
sent = current_stats[interface].bytes_sent - last_stats[interface].bytes_sent
recv = current_stats[interface].bytes_recv - last_stats[interface].bytes_recv
print(f"{interface}: Sent {sent} bytes, Received {recv} bytes")
last_stats = current_stats
For deep packet inspection, use Wireshark with these capture filters:
# Capture top talkers by IP
ip.src == 192.168.1.0/24 and tcp.port != 443