ku is fast, async, modern, little tcp man-in-the-middle proxy library, written in pure Python 3
Project description
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
Docs
Check out the latest documentation: ku-proxy.seeklay.pp.ua
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
Close
Hashes for ku_proxy-0.2.2rc0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 81bd5521f34763f19458d631f4c27ae268fca036acb8cb6f7c259fcca2bdaf97 |
|
MD5 | 3e5a07c41e8d9a292e69c62992e5af59 |
|
BLAKE2b-256 | 1ace886d6a13e4dd2bdcfe8889e23805d0d518d710552cc56a22eace087c6095 |