An attempt at adding UDP support to aiosocks. Untested due to lack of server support.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
nibrag e80c8ba657 Rename variable names in example 10 years ago
aiosocks Socks4Server/Socks5Server renamed on Socks4Addr/Socks5Addr 10 years ago
.gitignore Update .gitignore 10 years ago
LICENSE.txt Create LICENSE.txt 10 years ago
README.md Rename variable names in example 10 years ago

README.md

aiosocks

SOCKS proxy client for asyncio and aiohttp

Requirement

python 3.5+

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()