So I wanted to test the internal LAN speeds of our wireless bridge, switches, and cables in between – from one end of the network to the other. There’s an older iMac running on one side of the bridge and I didn’t want the speed test to slow down due to disk I/O reasons. I wrote a small python based web server which pre-initializes a memory buffer with random data and then sends random chunks inside of it throughout the fake “download” process (jumping around from index to index).
This is just a single stream test but there are other tools available if you want a more advance multi-stream performance testing (tools like iperf and what not). This will give you at least the real world output/speeds of your network setup (not just theoretical, I was able to get 111MB/s through a CAT-6 gigabit TP-Link Archer C7 V5 and nearly 75MB/s over a dedicated Linksys 802.11ac-3×3 WiFi bridge).
curl 'http://192.168.X.Y:8080/download' > /dev/null ; echo
Edit: Trying to maintain a stable and consistent WFH WiFi network setup! (the bridge is limiting clients to 13MBps ~ 104mbps via a iptables hashlimit rule set). It also has a good quality backchannel connection to carry all of the WiFi traffic:
import random,socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(("", 8080)) sock.listen(1) rr = [chr(x) for x in range(0, 256)] * 2048 random.shuffle(rr) rs = "".join(rr) rl = len(rs) rb = (8 * 1024) az = (rl - (rb + 1)) sz = (800 * 1024 * 1024) print("size:",rl,rb,sz) while True: print("loop") (conn, addr) = sock.accept() data = conn.recv(1024) print("[",data,"]") if ("get / " in data.lower()): d = "HTTP/1.1 200 OK\r\ncontent-type: text/html\r\n\r\n hi : "+str(random.randint(0,az))+" : <a href='/download'>link</a>" try: conn.sendall(d) except: pass try: conn.close() except: pass if ("get /download " in data.lower()): d = "HTTP/1.1 200 OK\r\ncontent-type: application/octet-stream\r\n\r\n" try: conn.send(d) except: pass sl = 0 while (sl < sz): i = random.randint(0,az) d = rs[i:i+rb] try: conn.send(d) except: break sl += rb try: conn.close() except: pass
[…] Jon Chiappetta: Small Network Speed Testing Web Server […]