The `socket` module is where Python stops being polite and starts speaking raw network πŸ§©πŸ“‘ Here’s a **clean, practical cheat sheet** you’ll actually use when building cyber tools. --- # 🐍 `socket` Cheat Sheet (Cybersecurity Edition) ## πŸ”Œ Create a Socket ```python import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ``` * `AF_INET` β†’ IPv4 * `SOCK_STREAM` β†’ TCP * (use `SOCK_DGRAM` for UDP) --- ## 🌐 Connect to a Target (Client) ```python s.connect(("127.0.0.1", 80)) ``` πŸ‘‰ Used in: * Port scanners * Banner grabbing --- ## πŸ“€ Send Data ```python s.send(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n") ``` * Must be **bytes** (`b""`) --- ## πŸ“₯ Receive Data ```python response = s.recv(1024) print(response.decode()) ``` * `1024` = buffer size --- ## ❌ Close Connection ```python s.close() ``` --- # πŸ” Port Scanner Example (core pattern) ```python import socket target = "127.0.0.1" for port in range(1, 1025): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(2) result = s.connect_ex((target, port)) if result == 0: print(f"Port {port} is open") s.close() ``` πŸ”₯ Key trick: * `connect_ex()` returns `0` if open (no crash, cleaner) --- # ⏱️ Timeout (avoid freezing forever) ```python s.settimeout(1) ``` Without this, your scanner becomes a fossil 🦴 --- # πŸ–₯️ Simple Server (Listener) ```python import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(("0.0.0.0", 4444)) s.listen(1) conn, addr = s.accept() print(f"Connection from {addr}") data = conn.recv(1024) print(data.decode()) conn.close() ``` πŸ‘‰ Used in: * Backdoor simulations * Reverse shells (ethical labs only) --- # πŸ“‘ UDP Socket (connectionless) ```python s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.sendto(b"Hello", ("127.0.0.1", 53)) ``` --- # 🧠 Useful Methods Quick List * `socket()` β†’ create socket * `connect()` β†’ connect to server * `connect_ex()` β†’ safer connect * `send()` / `sendall()` β†’ send data * `recv()` β†’ receive data * `bind()` β†’ attach to IP/port * `listen()` β†’ wait for connections * `accept()` β†’ accept connection * `close()` β†’ close socket --- # ⚠️ Common Mistakes * Forgetting `.close()` β†’ zombie sockets * Not using timeout β†’ slow scans * Sending string instead of bytes β†’ πŸ’₯ error * Scanning too fast β†’ gets blocked