| @@ -1,72 +0,0 @@ | |||||
| # aiosocks | |||||
| SOCKS proxy client for asyncio and aiohttp (python 3.5+) | |||||
| # Features | |||||
| - SOCKS4, SOCKS4a and SOCKS5 version | |||||
| - SocksConnector for aiohttp | |||||
| - SOCKS "CONNECT" command | |||||
| # TODO | |||||
| - UDP associate | |||||
| - TCP port binding | |||||
| # Usage | |||||
| ### direct usage | |||||
| ``` | |||||
| import asyncio | |||||
| from aiosocks import ( | |||||
| Socks4Addr, Socks5Addr, Socks4Auth, Socks5Auth, create_connection | |||||
| ) | |||||
| async def connect(): | |||||
| socks5_addr = Socks5Addr('127.0.0.1', 1080) | |||||
| socks4_addr = Socks4Addr('127.0.0.1', 1080) | |||||
| socks5_auth = Socks5Auth('login', 'pwd') | |||||
| socks4_auth = Socks4Auth('ident') | |||||
| dst = ('github.com', 80) | |||||
| # socks5 connect | |||||
| transport, protocol = await create_connection( | |||||
| lambda: Protocol, proxy=socks5_addr, proxy_auth=socks5_auth, dst=dst) | |||||
| # socks4 connect | |||||
| transport, protocol = await create_connection( | |||||
| lambda: Protocol, proxy=socks4_addr, proxy_auth=socks4_auth, dst=dst) | |||||
| # socks4 without auth and local domain name resolving | |||||
| transport, protocol = await create_connection( | |||||
| lambda: Protocol, proxy=socks4_addr, proxy_auth=None, dst=dst, remote_resolve=False) | |||||
| if __name__ == '__main__': | |||||
| loop = asyncio.get_event_loop() | |||||
| loop.run_until_complete(connect()) | |||||
| loop.close() | |||||
| ``` | |||||
| ### aiohttp usage | |||||
| ``` | |||||
| import asyncio | |||||
| import aiohttp | |||||
| from aiosocks import Socks5Addr, Socks5Auth | |||||
| from aiosocks.connector import SocksConnector | |||||
| async def load_github_main(): | |||||
| addr = Socks5Addr('127.0.0.1', 1080) | |||||
| auth = Socks5Auth('proxyuser1', password='pwd') | |||||
| conn = SocksConnector(proxy=addr, proxy_auth=auth, remote_resolve=False) | |||||
| with aiohttp.ClientSession(connector=conn) as ses: | |||||
| async with session.get('http://github.com/') as resp: | |||||
| if resp.status == 200: | |||||
| return await resp.text() | |||||
| if __name__ == '__main__': | |||||
| loop = asyncio.get_event_loop() | |||||
| loop.run_until_complete() | |||||
| loop.close() | |||||
| ``` | |||||
| @@ -0,0 +1,79 @@ | |||||
| SOCKS proxy client for asyncio and aiohttp | |||||
| ========================================== | |||||
| Features | |||||
| -------- | |||||
| - SOCKS4, SOCKS4a and SOCKS5 version | |||||
| - SocksConnector for aiohttp | |||||
| - SOCKS "CONNECT" command | |||||
| TODO | |||||
| ---- | |||||
| - UDP associate | |||||
| - TCP port binding | |||||
| Usage | |||||
| ----- | |||||
| direct usage | |||||
| ^^^^^^^^^^^^ | |||||
| .. code-block:: python | |||||
| import asyncio | |||||
| from aiosocks import ( | |||||
| Socks4Addr, Socks5Addr, Socks4Auth, Socks5Auth, create_connection | |||||
| ) | |||||
| async def connect(): | |||||
| socks5_addr = Socks5Addr('127.0.0.1', 1080) | |||||
| socks4_addr = Socks4Addr('127.0.0.1', 1080) | |||||
| socks5_auth = Socks5Auth('login', 'pwd') | |||||
| socks4_auth = Socks4Auth('ident') | |||||
| dst = ('github.com', 80) | |||||
| # socks5 connect | |||||
| transport, protocol = await create_connection( | |||||
| lambda: Protocol, proxy=socks5_addr, proxy_auth=socks5_auth, dst=dst) | |||||
| # socks4 connect | |||||
| transport, protocol = await create_connection( | |||||
| lambda: Protocol, proxy=socks4_addr, proxy_auth=socks4_auth, dst=dst) | |||||
| # socks4 without auth and local domain name resolving | |||||
| transport, protocol = await create_connection( | |||||
| lambda: Protocol, proxy=socks4_addr, proxy_auth=None, dst=dst, remote_resolve=False) | |||||
| if __name__ == '__main__': | |||||
| loop = asyncio.get_event_loop() | |||||
| loop.run_until_complete(connect()) | |||||
| loop.close() | |||||
| aiohttp usage | |||||
| ^^^^^^^^^^^^^ | |||||
| .. code-block:: python | |||||
| import asyncio | |||||
| import aiohttp | |||||
| from aiosocks import Socks5Addr, Socks5Auth | |||||
| from aiosocks.connector import SocksConnector | |||||
| async def load_github_main(): | |||||
| addr = Socks5Addr('127.0.0.1', 1080) | |||||
| auth = Socks5Auth('proxyuser1', password='pwd') | |||||
| conn = SocksConnector(proxy=addr, proxy_auth=auth, remote_resolve=False) | |||||
| with aiohttp.ClientSession(connector=conn) as ses: | |||||
| async with session.get('http://github.com/') as resp: | |||||
| if resp.status == 200: | |||||
| return await resp.text() | |||||
| if __name__ == '__main__': | |||||
| loop = asyncio.get_event_loop() | |||||
| loop.run_until_complete() | |||||
| loop.close() | |||||
| @@ -32,6 +32,6 @@ setup( | |||||
| url='https://github.com/nibrag/aiosocks', | url='https://github.com/nibrag/aiosocks', | ||||
| description='SOCKS proxy client for asyncio and aiohttp', | description='SOCKS proxy client for asyncio and aiohttp', | ||||
| long_description=open("README.md").read(), | |||||
| long_description=open("README.rst").read(), | |||||
| packages=['aiosocks'] | packages=['aiosocks'] | ||||
| ) | ) | ||||