@@ -9,12 +9,12 @@ python 3.5+ | |||||
``` | ``` | ||||
import asyncio | import asyncio | ||||
from aiosocks import ( | from aiosocks import ( | ||||
Socks4Server, Socks5Server, Socks4Auth, Socks5Auth, create_connection | |||||
Socks4Addr, Socks5Addr, Socks4Auth, Socks5Auth, create_connection | |||||
) | ) | ||||
async def connect(): | async def connect(): | ||||
socks5_serv = Socks5Server('127.0.0.1', 1080) | |||||
socks4_serv = Socks4Server('127.0.0.1', 1080) | |||||
socks5_serv = Socks5Addr('127.0.0.1', 1080) | |||||
socks4_serv = Socks4Addr('127.0.0.1', 1080) | |||||
socks5_auth = Socks5Auth('login', 'pwd') | socks5_auth = Socks5Auth('login', 'pwd') | ||||
socks4_auth = Socks4Auth('ident') | socks4_auth = Socks4Auth('ident') | ||||
@@ -42,11 +42,11 @@ if __name__ == '__main__': | |||||
``` | ``` | ||||
import asyncio | import asyncio | ||||
import aiohttp | import aiohttp | ||||
from aiosocks import Socks5Server, Socks5Auth | |||||
from aiosocks import Socks5Addr, Socks5Auth | |||||
from aiosocks.connector import SocksConnector | from aiosocks.connector import SocksConnector | ||||
async def load_github_main(): | async def load_github_main(): | ||||
serv = Socks5Server('127.0.0.1', 1080) | |||||
serv = Socks5Addr('127.0.0.1', 1080) | |||||
auth = Socks5Auth('proxyuser1', password='pwd') | auth = Socks5Auth('proxyuser1', password='pwd') | ||||
conn = SocksConnector(proxy=serv, proxy_auth=auth, remote_resolve=False) | conn = SocksConnector(proxy=serv, proxy_auth=auth, remote_resolve=False) | ||||
@@ -6,7 +6,7 @@ from .protocols import Socks4Protocol, Socks5Protocol | |||||
__version__ = '0.1a' | __version__ = '0.1a' | ||||
__all__ = ('Socks4Protocol', 'Socks5Protocol', 'Socks4Auth', | __all__ = ('Socks4Protocol', 'Socks5Protocol', 'Socks4Auth', | ||||
'Socks5Auth', 'Socks4Server', 'Socks5Server', 'SocksError', | |||||
'Socks5Auth', 'Socks4Addr', 'Socks5Addr', 'SocksError', | |||||
'NoAcceptableAuthMethods', 'LoginAuthenticationFailed', | 'NoAcceptableAuthMethods', 'LoginAuthenticationFailed', | ||||
'InvalidServerVersion', 'InvalidServerReply', 'create_connection') | 'InvalidServerVersion', 'InvalidServerReply', 'create_connection') | ||||
@@ -15,8 +15,8 @@ async def create_connection(protocol_factory, proxy, proxy_auth, dst, *, remote_ | |||||
loop=None, ssl=None, family=0, proto=0, flags=0, sock=None, | loop=None, ssl=None, family=0, proto=0, flags=0, sock=None, | ||||
local_addr=None, server_hostname=None): | local_addr=None, server_hostname=None): | ||||
assert isinstance(proxy, SocksServer), ( | |||||
'proxy must be Socks4Server() or Socks5Server() tuple' | |||||
assert isinstance(proxy, SocksAddr), ( | |||||
'proxy must be Socks4Addr() or Socks5Addr() tuple' | |||||
) | ) | ||||
assert proxy_auth is None or isinstance(proxy_auth, (Socks4Auth, Socks5Auth)), ( | assert proxy_auth is None or isinstance(proxy_auth, (Socks4Auth, Socks5Auth)), ( | ||||
@@ -26,18 +26,18 @@ async def create_connection(protocol_factory, proxy, proxy_auth, dst, *, remote_ | |||||
'invalid dst format, tuple("dst_host", dst_port))' | 'invalid dst format, tuple("dst_host", dst_port))' | ||||
) | ) | ||||
if (isinstance(proxy, Socks4Server) and not | |||||
if (isinstance(proxy, Socks4Addr) and not | |||||
(proxy_auth is None or isinstance(proxy_auth, Socks4Auth))): | (proxy_auth is None or isinstance(proxy_auth, Socks4Auth))): | ||||
raise ValueError("proxy is Socks4Server but proxy_auth is not Socks4Auth") | |||||
raise ValueError("proxy is Socks4Addr but proxy_auth is not Socks4Auth") | |||||
if (isinstance(proxy, Socks5Server) and not | |||||
if (isinstance(proxy, Socks5Addr) and not | |||||
(proxy_auth is None or isinstance(proxy_auth, Socks5Auth))): | (proxy_auth is None or isinstance(proxy_auth, Socks5Auth))): | ||||
raise ValueError("proxy is Socks5Server but proxy_auth is not Socks5Auth") | |||||
raise ValueError("proxy is Socks5Addr but proxy_auth is not Socks5Auth") | |||||
loop = loop or asyncio.get_event_loop() | loop = loop or asyncio.get_event_loop() | ||||
def socks_factory(): | def socks_factory(): | ||||
if isinstance(proxy, Socks4Server): | |||||
if isinstance(proxy, Socks4Addr): | |||||
socks_proto = Socks4Protocol | socks_proto = Socks4Protocol | ||||
else: | else: | ||||
socks_proto = Socks5Protocol | socks_proto = Socks5Protocol | ||||
@@ -1,6 +1,6 @@ | |||||
from collections import namedtuple | from collections import namedtuple | ||||
__all__ = ('Socks4Auth', 'Socks5Auth', 'Socks4Server', 'Socks5Server', 'SocksServer') | |||||
__all__ = ('Socks4Auth', 'Socks5Auth', 'Socks4Addr', 'Socks5Addr', 'SocksAddr') | |||||
class Socks4Auth(namedtuple('Socks4Auth', ['login', 'encoding'])): | class Socks4Auth(namedtuple('Socks4Auth', ['login', 'encoding'])): | ||||
@@ -24,7 +24,7 @@ class Socks5Auth(namedtuple('Socks5Auth', ['login', 'password', 'encoding'])): | |||||
password.encode(encoding), encoding) | password.encode(encoding), encoding) | ||||
class SocksServer(namedtuple('SocksServer', ['host', 'port'])): | |||||
class SocksAddr(namedtuple('SocksServer', ['host', 'port'])): | |||||
def __new__(cls, host, port): | def __new__(cls, host, port): | ||||
if host is None: | if host is None: | ||||
raise ValueError('None is not allowed as host value') | raise ValueError('None is not allowed as host value') | ||||
@@ -35,9 +35,9 @@ class SocksServer(namedtuple('SocksServer', ['host', 'port'])): | |||||
return super().__new__(cls, host, port) | return super().__new__(cls, host, port) | ||||
class Socks4Server(SocksServer): | |||||
class Socks4Addr(SocksAddr): | |||||
pass | pass | ||||
class Socks5Server(SocksServer): | |||||
class Socks5Addr(SocksAddr): | |||||
pass | pass |
@@ -3,7 +3,7 @@ import socket | |||||
import struct | import struct | ||||
from . import constants as c | from . import constants as c | ||||
from .helpers import ( | from .helpers import ( | ||||
Socks4Server, Socks5Server, Socks5Auth, Socks4Auth | |||||
Socks4Addr, Socks5Addr, Socks5Auth, Socks4Auth | |||||
) | ) | ||||
from .errors import * | from .errors import * | ||||
@@ -67,7 +67,7 @@ class SocksProtocol(asyncio.StreamReaderProtocol): | |||||
class Socks4Protocol(SocksProtocol): | class Socks4Protocol(SocksProtocol): | ||||
def __init__(self, proxy, proxy_auth, dst, remote_resolve=True, loop=None): | def __init__(self, proxy, proxy_auth, dst, remote_resolve=True, loop=None): | ||||
if not isinstance(proxy, Socks4Server): | |||||
if not isinstance(proxy, Socks4Addr): | |||||
raise ValueError('Invalid proxy format') | raise ValueError('Invalid proxy format') | ||||
if proxy_auth is not None and not isinstance(proxy_auth, Socks4Auth): | if proxy_auth is not None and not isinstance(proxy_auth, Socks4Auth): | ||||
@@ -111,7 +111,7 @@ class Socks4Protocol(SocksProtocol): | |||||
class Socks5Protocol(SocksProtocol): | class Socks5Protocol(SocksProtocol): | ||||
def __init__(self, proxy, proxy_auth, dst, remote_resolve=True, loop=None): | def __init__(self, proxy, proxy_auth, dst, remote_resolve=True, loop=None): | ||||
if not isinstance(proxy, Socks5Server): | |||||
if not isinstance(proxy, Socks5Addr): | |||||
raise ValueError('Invalid proxy format') | raise ValueError('Invalid proxy format') | ||||
if proxy_auth is not None and not isinstance(proxy_auth, Socks5Auth): | if proxy_auth is not None and not isinstance(proxy_auth, Socks5Auth): | ||||