{ "info": { "author": "Nail Ibragimov", "author_email": "ibragwork@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "SOCKS proxy client for asyncio and aiohttp\n==========================================\n.. image:: https://travis-ci.org/nibrag/aiosocks.svg?branch=master\n :target: https://travis-ci.org/nibrag/aiosocks\n :align: right\n\n.. image:: https://coveralls.io/repos/github/nibrag/aiosocks/badge.svg?branch=master\n :target: https://coveralls.io/github/nibrag/aiosocks?branch=master\n :align: right\n\n.. image:: https://badge.fury.io/py/aiosocks.svg\n :target: https://badge.fury.io/py/aiosocks\n\n\nDependencies\n------------\npython 3.5+\naiohttp 2.3.2+\n\nFeatures\n--------\n- SOCKS4, SOCKS4a and SOCKS5 version\n- ProxyConnector for aiohttp\n- SOCKS \"CONNECT\" command\n\nTODO\n----\n- UDP associate\n- TCP port binding\n\nInstallation\n------------\nYou can install it using Pip:\n\n.. code-block::\n\n pip install aiosocks\n\nIf you want the latest development version, you can install it from source:\n\n.. code-block::\n\n git clone git@github.com:nibrag/aiosocks.git\n cd aiosocks\n python setup.py install\n\nUsage\n-----\ndirect usage\n^^^^^^^^^^^^\n\n.. code-block:: python\n\n import asyncio\n import aiosocks\n\n\n async def connect():\n socks5_addr = aiosocks.Socks5Addr('127.0.0.1', 1080)\n socks4_addr = aiosocks.Socks4Addr('127.0.0.1', 1080)\n \n socks5_auth = aiosocks.Socks5Auth('login', 'pwd')\n socks4_auth = aiosocks.Socks4Auth('ident')\n \n dst = ('github.com', 80)\n \n # socks5 connect\n transport, protocol = await aiosocks.create_connection(\n lambda: Protocol, proxy=socks5_addr, proxy_auth=socks5_auth, dst=dst)\n \n # socks4 connect\n transport, protocol = await aiosocks.create_connection(\n lambda: Protocol, proxy=socks4_addr, proxy_auth=socks4_auth, dst=dst)\n \n # socks4 without auth and local domain name resolving\n transport, protocol = await aiosocks.create_connection(\n lambda: Protocol, proxy=socks4_addr, proxy_auth=None, dst=dst, remote_resolve=False)\n\n # use socks protocol\n transport, protocol = await aiosocks.create_connection(\n None, proxy=socks4_addr, proxy_auth=None, dst=dst)\n \n if __name__ == '__main__':\n loop = asyncio.get_event_loop()\n loop.run_until_complete(connect())\n loop.close()\n\n\n**A wrapper for create_connection() returning a (reader, writer) pair**\n\n.. code-block:: python\n\n # StreamReader, StreamWriter\n reader, writer = await aiosocks.open_connection(\n proxy=socks5_addr, proxy_auth=socks5_auth, dst=dst, remote_resolve=True)\n\n data = await reader.read(10)\n writer.write('data')\n\nerror handling\n^^^^^^^^^^^^^^\n\n`SocksError` is a base class for:\n - `NoAcceptableAuthMethods`\n - `LoginAuthenticationFailed`\n - `InvalidServerVersion`\n - `InvalidServerReply`\n\n.. code-block:: python\n\n try:\n transport, protocol = await aiosocks.create_connection(\n lambda: Protocol, proxy=socks5_addr, proxy_auth=socks5_auth, dst=dst)\n except aiosocks.SocksConnectionError:\n # connection error\n except aiosocks.LoginAuthenticationFailed:\n # auth failed\n except aiosocks.NoAcceptableAuthMethods:\n # All offered SOCKS5 authentication methods were rejected\n except (aiosocks.InvalidServerVersion, aiosocks.InvalidServerReply):\n # something wrong\n except aiosocks.SocksError:\n # something other\n\nor\n\n.. code-block:: python\n\n try:\n transport, protocol = await aiosocks.create_connection(\n lambda: Protocol, proxy=socks5_addr, proxy_auth=socks5_auth, dst=dst)\n except aiosocks.SocksConnectionError:\n # connection error\n except aiosocks.SocksError:\n # socks error\n\naiohttp usage\n^^^^^^^^^^^^^\n\n.. code-block:: python\n\n import asyncio\n import aiohttp\n import aiosocks\n from aiosocks.connector import ProxyConnector, ProxyClientRequest\n\n\n async def load_github_main():\n auth5 = aiosocks.Socks5Auth('proxyuser1', password='pwd')\n auth4 = aiosocks.Socks4Auth('proxyuser1')\n ba = aiohttp.BasicAuth('login')\n\n # remote resolve\n conn = ProxyConnector(remote_resolve=True)\n\n # or locale resolve\n conn = ProxyConnector(remote_resolve=False)\n\n try:\n with aiohttp.ClientSession(connector=conn, request_class=ProxyClientRequest) as session:\n # socks5 proxy\n async with session.get('http://github.com/', proxy='socks5://127.0.0.1:1080',\n proxy_auth=auth5) as resp:\n if resp.status == 200:\n print(await resp.text())\n\n # socks4 proxy\n async with session.get('http://github.com/', proxy='socks4://127.0.0.1:1081',\n proxy_auth=auth4) as resp:\n if resp.status == 200:\n print(await resp.text())\n\n # http proxy\n async with session.get('http://github.com/', proxy='http://127.0.0.1:8080',\n proxy_auth=ba) as resp:\n if resp.status == 200:\n print(await resp.text())\n except aiohttp.ClientProxyConnectionError:\n # connection problem\n except aiohttp.ClientConnectorError:\n # ssl error, certificate error, etc\n except aiosocks.SocksError:\n # communication problem\n\n\n if __name__ == '__main__':\n loop = asyncio.get_event_loop()\n loop.run_until_complete(load_github_main())\n loop.close()\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/nibrag/aiosocks", "keywords": "", "license": "Apache 2", "maintainer": "", "maintainer_email": "", "name": "aiosocks", "package_url": "https://pypi.org/project/aiosocks/", "platform": "", "project_url": "https://pypi.org/project/aiosocks/", "project_urls": { "Homepage": "https://github.com/nibrag/aiosocks" }, "release_url": "https://pypi.org/project/aiosocks/0.2.6/", "requires_dist": null, "requires_python": "", "summary": "SOCKS proxy client for asyncio and aiohttp", "version": "0.2.6" }, "last_serial": 3350128, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "4eddb62ddf82442889706e4dda889f43", "sha256": "7671e512634f74172a5e96ea38bad1e4cd4c7e31b4514188cec26f7327949b63" }, "downloads": -1, "filename": "aiosocks-0.1.2.tar.gz", "has_sig": false, "md5_digest": "4eddb62ddf82442889706e4dda889f43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6107, "upload_time": "2016-05-07T11:37:59", "url": "https://files.pythonhosted.org/packages/34/31/0d0ea6859cdadd0ef72a03b4862874cd7f34d34970ba6d551424a280b91b/aiosocks-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "bef19a10a7cbcfda63d997373156c8ea", "sha256": "1051cc0be8ce34da66c764cb5173e40821725703287e65639734b1eda5c593cc" }, "downloads": -1, "filename": "aiosocks-0.1.3.zip", "has_sig": false, "md5_digest": "bef19a10a7cbcfda63d997373156c8ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11289, "upload_time": "2016-05-10T12:34:52", "url": "https://files.pythonhosted.org/packages/b4/1c/3cfcebe665a425fab36a59abf6b7e36c4c37c6c07a4923eef0332eb695b1/aiosocks-0.1.3.zip" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "d9161c4a3544ed411101ff556c3ec321", "sha256": "d4f7e81bd3dc8ddde4cd9d377a83419a542ae274b4a41557c25bed0e41715cfa" }, "downloads": -1, "filename": "aiosocks-0.1.4.zip", "has_sig": false, "md5_digest": "d9161c4a3544ed411101ff556c3ec321", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12997, "upload_time": "2016-05-17T12:01:21", "url": "https://files.pythonhosted.org/packages/c8/62/e533b0cd4ae73d1e173bf55d9bfb0aac46c5d8176d8f0825dde23aa91dff/aiosocks-0.1.4.zip" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "f4391964cfd411dc4c6ebd09a081c3b6", "sha256": "865836f50fd8196e4ae4e8cc1d43d55681b3bc7af0a4811984c3c01b7cab4cf6" }, "downloads": -1, "filename": "aiosocks-0.1.5.zip", "has_sig": false, "md5_digest": "f4391964cfd411dc4c6ebd09a081c3b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14694, "upload_time": "2016-06-06T10:06:04", "url": "https://files.pythonhosted.org/packages/ef/48/b9882429d95e3d15236bf7f19e502c7ba4bb27a642e17060125b0f42f673/aiosocks-0.1.5.zip" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "e6e1784345905c0cc009c9b93697fbf3", "sha256": "e1a3628b185ac51af75ab7c44854f551cfeb666dca6448f5e4569e9daed08fe0" }, "downloads": -1, "filename": "aiosocks-0.1.6.zip", "has_sig": false, "md5_digest": "e6e1784345905c0cc009c9b93697fbf3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14915, "upload_time": "2016-06-15T15:17:13", "url": "https://files.pythonhosted.org/packages/cc/4f/0dfa6cb33474d1232afdea75a1971e29e8958603c1bf9a59fd0b0b379d41/aiosocks-0.1.6.zip" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "46b2c6564e8af97ce6a8ad66fe632de3", "sha256": "0b783fc6102934ea2ca4ae0fb0d4519d210d763f304803ba8c3fd7d268518b09" }, "downloads": -1, "filename": "aiosocks-0.1.7.zip", "has_sig": false, "md5_digest": "46b2c6564e8af97ce6a8ad66fe632de3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15404, "upload_time": "2016-08-03T18:16:00", "url": "https://files.pythonhosted.org/packages/cd/d5/f522e746a07b0e454dc1d909d1494d55f7da6bc0e4671e27175691046a95/aiosocks-0.1.7.zip" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "3dbc9d5d0d4efc677a0414917061339e", "sha256": "c2c4d8d441fde635d94860ffe0a0ad256d6002fcb7ba64e5fadf60dda6af6277" }, "downloads": -1, "filename": "aiosocks-0.2.1.tar.gz", "has_sig": false, "md5_digest": "3dbc9d5d0d4efc677a0414917061339e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11416, "upload_time": "2017-04-15T17:04:36", "url": "https://files.pythonhosted.org/packages/b8/7c/75dbb35de287ba57a15d1cf5a7699b69381980817971c9e4c0a1bb5601d7/aiosocks-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "f0ca3c09d9690f0e10ba4db6537fb800", "sha256": "6ec5f6f5960c2efafbadac4947371f6ab2e7c7fa5e7328a2935f31352ae1ad94" }, "downloads": -1, "filename": "aiosocks-0.2.2.tar.gz", "has_sig": false, "md5_digest": "f0ca3c09d9690f0e10ba4db6537fb800", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10606, "upload_time": "2017-04-15T21:36:27", "url": "https://files.pythonhosted.org/packages/1a/63/d324b547037f1b7438d1459b23bee19b77b8ca4bee05551526badea1f69f/aiosocks-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "4ce5bcf143971cce387f1705d15d7418", "sha256": "63ea7204839e93bbec162f46c2001d91b1442efbfd26014cc310da8a35c684dc" }, "downloads": -1, "filename": "aiosocks-0.2.3.tar.gz", "has_sig": false, "md5_digest": "4ce5bcf143971cce387f1705d15d7418", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10916, "upload_time": "2017-06-04T16:03:13", "url": "https://files.pythonhosted.org/packages/cf/21/7193dc5fb364c635f032c84b8af61b09fd2862d85c032ba815d353b7c05d/aiosocks-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "f12e7a8abd5a5452ed510df108f4d1c8", "sha256": "5101f09bd0b7cbf6730da2ec4f4aeac65ff01b235126df6e1c5c3a9252c0c270" }, "downloads": -1, "filename": "aiosocks-0.2.4.tar.gz", "has_sig": false, "md5_digest": "f12e7a8abd5a5452ed510df108f4d1c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10918, "upload_time": "2017-07-08T21:40:59", "url": "https://files.pythonhosted.org/packages/2e/2d/c59f47a339c86f6e42b9ce9d0a718488003ec3662f48b9e505128385137a/aiosocks-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "04e2ff4ef4cbdd870eb3f84e32e99555", "sha256": "f0f52b4b651a5cc81c67754537e859f13550167510681de0f3f56029bd1651eb" }, "downloads": -1, "filename": "aiosocks-0.2.5.tar.gz", "has_sig": false, "md5_digest": "04e2ff4ef4cbdd870eb3f84e32e99555", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10897, "upload_time": "2017-11-12T15:41:03", "url": "https://files.pythonhosted.org/packages/4b/07/5778ee54ebc708e2104aec3d6cd212ed9842ba4695829dc44b6ccf1e630d/aiosocks-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "cbe53d1ff7c4537b66d5515d90ac1bc5", "sha256": "94dfb2c3ff2fc646c88629e29872599cc93d9137c2eace68dc89079e6a221277" }, "downloads": -1, "filename": "aiosocks-0.2.6.tar.gz", "has_sig": false, "md5_digest": "cbe53d1ff7c4537b66d5515d90ac1bc5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10898, "upload_time": "2017-11-20T20:20:50", "url": "https://files.pythonhosted.org/packages/c7/60/284a4909410906979ef44a9fa24421072f98b747d9916a3b98d50461abbe/aiosocks-0.2.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cbe53d1ff7c4537b66d5515d90ac1bc5", "sha256": "94dfb2c3ff2fc646c88629e29872599cc93d9137c2eace68dc89079e6a221277" }, "downloads": -1, "filename": "aiosocks-0.2.6.tar.gz", "has_sig": false, "md5_digest": "cbe53d1ff7c4537b66d5515d90ac1bc5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10898, "upload_time": "2017-11-20T20:20:50", "url": "https://files.pythonhosted.org/packages/c7/60/284a4909410906979ef44a9fa24421072f98b747d9916a3b98d50461abbe/aiosocks-0.2.6.tar.gz" } ] }