Skip to main content

ku is fast, async, modern, little tcp man-in-the-middle proxy library, written in pure Python 3

Project description

ku

About

ku is fast, async, modern, little tcp man-in-the-middle proxy library

Author

seeklay

License

MIT

TODO

  • Tcp mitm proxy library
  • Proxy executable script

Features

  • Dump data between clients and server
  • Spoof data in both directions
  • Drop data selectively

Installation

pip install -U ku-proxy

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), ("api.ipify.com", 80))
# now the proxy is already running

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)

    def serverbound(self, data):        
        print(F"#{self.id} client->server  {len(data)}")
        print(data)

    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


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

ku_proxy-0.1.0-py3-none-any.whl (4.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page