commit b6fee88aeb0c4789fa9b9a7de5ee5a62f42b573d Author: Christian Klein Date: Fri Jul 17 22:04:41 2026 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a2af45e --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ + +*~ +*.env +docker-compose.yml +*.tar +*.gz + +.vscode/ +*.sublime* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b43bdcf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM alpine:latest + +RUN apk add --no-cache curl wget git openssh bash vim nano socat bind-tools tcpdump python3 jq lldpd lighttpd iperf iperf3 lftp nmap fping pv + +# Set environment variables for init script +ENV HTTP_SERVER_DISABLE=false +ENV HTTP_SERVER_PORT=80 + +RUN mkdir -p /docker-entrypoint-initdb.d +COPY --chown=root:root --chmod=755 src/init.sh /init.sh + +# Additional files +COPY --chown=root:root --chmod=644 src/index.html /var/www/localhost/htdocs/index.html + + +ENTRYPOINT [ "/init.sh" ] diff --git a/README.md b/README.md new file mode 100644 index 0000000..78c3f7b --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +# Network Alpine + +Just an alpine image with common packages for network troubleshooting installed: + +* General Stuff + * bash + * wget + * jq + * pv + * git + * vim + * nano + * python3 +* Querying Common Protocols + * curl + * openssh + * lftp +* Network Serving + * lighttpd + * lldpd +* Network Query + * bind-tools (dig) + * tcpdump + * socat + * iperf, iperf3 + * nmap + * fping + +By default a HTTP Server is available on port 80. Change the port with `HTTP_SERVER_PORT`. + +> [!CAUTION] +> This is only meant to be used inside testing networks. Do NOT use for production! + +## Example Use Cases + +```bash +# See current IP configuration +ip address +ip route + +# Set IP address +ip address add 10.1.1.3/24 dev eth0 +ip address add broadcast 10.1.2.255 dev eth0 + +# Set Gateway +ip route del default +ip route add default 10.1.1.0/24 via 10.1.1.3 + +# Request new IP address via DHCP +ip addr flush dev eth0 +udhcpc -i eth0 -n -q + +# Set DNS +nano /etc/resolv.conf # Update line "namesperver x.x.x.x" + +# Query DNS +dig example.com A @10.1.1.3 + +# List LLDP neighbors +lldpcli show neighbors + +# Ping a host +ping -I eth0 10.1.1.3 + +# Send HTTP Request +curl http://10.1.1.3 -v + +# Connect somewhere via SSH +ssh user@10.1.1.3 -p 22 +# Copy file via SFTP +scp file.txt user@10.1.1.3:~ + +# Interactively browse FTP server +lftp ftp://user@10.1.1.3 + +# Connect to a TCP port +nc 10.1.1.3 80 + +# Scan for open TCP ports +nmap -sT -p 22-10000 10.1.1.3 + +# Ping all IPs in the network +fping -g -r 1 -q -a 10.1.1.0/24 + +# Capture network traffic +tcpdump # Capture ALL traffic +tcpdump -i eth0 icmp # Filter for ICMP traffic +tcpdump -i eth0 -w capture.pcap # Write to file +tcpdump -r capture.pcap # Read from file + +# Test unicast bandwidth +iperf3 -s # Setup server on host 10.1.1.2 +iperf3 -c 10.1.1.2 # Check TCP downlink from 10.1.1.2 +iperf3 -c 10.1.1.2 -u # Check UDP downlink from 10.1.1.2 + +# Test multicast connectivity (with iperf) +iperf -s -u -B 224.0.67.67 -i 1 # Setup multicast receiver +iperf -c 224.0.67.67 -u --ttl 5 -t 10 -b 1M # Send for 10 seconds at 1 MBit/s + +# Test multicast connectivity (with socat) +seq 50 | xargs -Iz echo "Hello World" | pv -qL 2 | socat -u - UDP4-DATAGRAM:239.255.10.10:5000,ip-multicast-ttl=1 # Sender +socat -u UDP4-RECV:5000,ip-add-membership=239.255.10.10:0.0.0.0 - # Receiver + + +``` diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..f2c8627 --- /dev/null +++ b/src/index.html @@ -0,0 +1 @@ +Welcome to lighttp! diff --git a/src/init.sh b/src/init.sh new file mode 100644 index 0000000..0ca9cab --- /dev/null +++ b/src/init.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +# Setup HTTP Server +if [[ "$HTTP_SERVER_DISABLE" == "false" ]]; then + # Set Port + sed -i "s/^.*server\.port.*/server.port = $HTTP_SERVER_PORT/" /etc/lighttpd/lighttpd.conf + + # Start lighttpd + lighttpd -f /etc/lighttpd/lighttpd.conf +fi + +# Start LLDP Deamon +lldpd + +# Work through entrypoint scripts +find /docker-entrypoint-initdb.d/ -type f -executable -exec /bin/sh {} \; + +# Open Shell for User +/bin/sh