ku
ku is fast, async, modern, little tcp man-in-the-middle proxy library, written in pure Python 3.
Features
- Dump data between clients and server
- Spoof data in both directions
- Drop data selectively
- IPv6 Ready (pass upstream_6 for upstreaming ipv6 or enclose ipv6 addr in brackets like [::1] for listening addrs
Is this proxy fast?
Proxy speed comparison results
TODO
- Tcp mitm proxy library
- Proxy executable script (kun (alpha))
Installation
pip install -U ku-proxy
Author
License
Simple proxy usage:
Try to run this script and open http://localhost:80 in you browser
from ku import ku, tcpsession
from time import sleep
proxy = ku(("localhost", 80, "[::1]", 80), ("g.co", 80))
while 7:
try:
sleep(0.07)
except KeyboardInterrupt:
proxy.shutdown() #proxy creates a thread to async poll for socket events
break #we need to call shutdown() to break the thread loop
Advanced proxy usage:
from ku import ku, tcpsession, Pass, Reject
from time import sleep
class conn(tcpsession):
def __init__(self, client, server, proxy):
self.client = client
self.server = server
self.proxy = proxy
self.id = id(self)
print(F"#{self.id} new conn {client.getpeername()}->{client.getsockname()}::{server.getsockname()}->{server.getpeername()}")
def clientbound(self, data):
print(F"#{self.id} server->client {len(data)}")
print(data)
return Pass
def serverbound(self, data):
print(F"#{self.id} client->server {len(data)}")
print(data)
#return None
#in python None is returned by default, None == Pass
def connection_made(self):
print(F"#{self.id} connection_made")
def connection_lost(self, side, err):
side = 'client' if side is self.client else 'server' if side is not None else 'proxy'
print(F"#{self.id} connection_lost by {side} due to {err}")
print("Starting...")
proxy = ku(("localhost", 80), ("api.ipify.org", 80), conn)
print("Started")
while 1:
try:
sleep(0.07)
except KeyboardInterrupt:
print("Shutting down...")
proxy.shutdown()
print("Exiting...")
break
See examples/ for more
Metadata
Release files for ku-proxy 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ku_proxy-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for ku_proxy-0.2.1-py3-none-any.whl |
Release files / ku_proxy-0.2.1-py3-none-any.whl
| Download URL | ku_proxy-0.2.1-py3-none-any.whl |
|---|---|
| Size | 10.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9408683a53e4767b5aa0d4f8e11778f53135c2b9474128db2b4bbd6cd9876079
|
|
BLAKE2b-256 checksum How to use checksums |
8cd5c74f308ac5e18b33c23a42e55ba316b7b98406681259d2f7a501ab99ad84
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.7.9
|
Security for ku-proxy 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.