{ "info": { "author": "Nirvik Ghosh", "author_email": "nirvik1993@gmail.com", "bugtrack_url": null, "classifiers": [ "Framework :: Twisted", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Topic :: Communications :: File Sharing", "Topic :: System :: Networking", "Topic :: System :: Operating System" ], "description": "iWant\r\n=====\r\n\r\nCLI based decentralized peer to peer file sharing\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\nWhat is it?\r\n-----------\r\n\r\nA commandline tool for searching and downloading files in LAN network,\r\nwithout any central server.\r\n\r\nFeatures\r\n--------\r\n\r\n- **Decentralized** : There is no central server hosting files.\r\n Therefore, no central point of failure\r\n- **Easy discovery of files**: As easy as searching for something in\r\n Google.\r\n- **File download from multiple peers**: If the seeder fails/leaves the\r\n group, leecher will continue to download from another seeder in the\r\n network\r\n- **Directory download**: Supports downloading directories\r\n- **Resume download**: Resume download from where you left off.\r\n- **Consistent data**: Any changes(modification, deletion, addition)\r\n made to files inside the shared folder will be instantly reflected in\r\n the network\r\n- **Cross Platform**: Works in Linux/Windows/Mac. More testing needs to\r\n be done in Mac\r\n\r\nWhy I built this ?\r\n------------------\r\n\r\n- I like the idea of typing some filename in the terminal and download\r\n it if people around me have it.\r\n- No third party registration.\r\n- No crazy configuration.\r\n- Wanted it to be cross platform.\r\n- Zero downtime.\r\n- No browser.. just terminal\r\n- For fun \u00af\\\\\\ *(\u30c4)*/\u00af\r\n\r\nInstallation\r\n------------\r\n\r\n.. code:: sh\r\n\r\n python setup.py install --user\r\n\r\nSystem Dependencies\r\n-------------------\r\n\r\nMake sure, you have the following system dependencies installed: \\*\r\nlibffi-dev \\* libssl-dev\r\n\r\nUsage\r\n-----\r\n\r\n::\r\n\r\n iWant.\r\n\r\n Usage:\r\n iwanto start\r\n iwanto search \r\n iwanto download \r\n iwanto share \r\n iwanto download to \r\n iwanto view config\r\n iwanto --version\r\n\r\n Options:\r\n -h --help Show this screen.\r\n --version Show version.\r\n start This starts the iwant server in your system\r\n search Discovering files in the network. Example: iwanto search batman\r\n download Downloads the file from the network\r\n share Change your shared folder\r\n view config View shared and download folder\r\n download to Change download folder\r\n\r\n**Note: Shared and Download folder cannot be the same**\r\n\r\nHow to run\r\n----------\r\n\r\nRun ``iwanto start`` (this runs the iwant service).\r\n\r\nRunning client\r\n--------------\r\n\r\nTo run services like, search, download, view config and change config,\r\nopen up another terminal and make sure that iwant server is running.\r\n\r\nRunning server\r\n--------------\r\n\r\nIn windows, admin access is required to run the server\r\n\r\n.. code:: sh\r\n\r\n iwanto start\r\n\r\n\r\n\r\n\r\n\r\n\r\nSearch files\r\n------------\r\n\r\nType the name of file ;) (P.S No need of accurate names)\r\n\r\n.. code:: sh\r\n\r\n iwanto search \r\n\r\nExample:\r\n\r\n.. code:: sh\r\n\r\n iwanto search \"slicon valey\"\r\n\r\n\r\n\r\n\r\n\r\n\r\nDownload files\r\n--------------\r\n\r\nTo download the file , just enter the hash of the file you get after\r\nsearching.\r\n\r\n.. code:: sh\r\n\r\n iwanto download \r\n\r\nExample:\r\n\r\n.. code:: sh\r\n\r\n iwanto download b8f67e90097c7501cc0a9f1bb59e6443\r\n\r\n\r\n\r\n\r\n\r\n\r\nChange shared folder\r\n--------------------\r\n\r\nChange shared folder anytime (Even when iwant service is running)\r\n\r\n.. code:: sh\r\n\r\n iwanto share \r\n\r\nExample:\r\n\r\n.. code:: sh\r\n\r\n iwanto share /home/User/Movies/\r\n\r\nIn windows, give quotes:\r\n\r\n.. code:: sh\r\n\r\n iwanto share \"C:\\Users\\xyz\\books\\\"\r\n\r\n\r\n\r\n\r\n\r\n\r\nChange downloads folder\r\n-----------------------\r\n\r\nChange download folder anytime\r\n\r\n.. code:: sh\r\n\r\n iwanto download to \r\n\r\nExample:\r\n\r\n.. code:: sh\r\n\r\n iwanto download to /home/User/Downloads\r\n\r\nIn windows, give quotes:\r\n\r\n.. code:: sh\r\n\r\n iwanto download to \"C:\\User\\Downloads\"\r\n\r\nView shared/donwload folder\r\n---------------------------\r\n\r\n.. code:: sh\r\n\r\n iwanto view config\r\n\r\nHow does it work ?\r\n------------------\r\n\r\nAs soon as the program starts, it spawns the **election daemon**,\r\n**folder monitoring daemon** and **server daemon**.\r\n\r\n1. The **election daemon** takes care of the following activities\r\n\r\n - Manages the consensus.\r\n - Notifies the **server daemon** as soon as there is a leader\r\n change.\r\n - It coordinates with other peers in the network regarding\r\n contesting elections, leader unavailability, network failure,\r\n split brain situation etc.\r\n - It uses **multicast** for peer discovery. \r\n \r\n \r\n\r\n2. When the **folder monitoring daemon** starts, it performs the\r\n following steps\r\n\r\n - Indexes all the files in the shared folder\r\n - Updates the entries in the database\r\n - Informs the server about the indexed files and folders.\r\n - Any changes made in the shared folder will trigger the **folder\r\n monitoring daemon** to index the modified files, update the\r\n database and then inform the server about the changes\r\n\r\n3. The **iwant client** talks to the **server daemon** when the user\r\n wishes to:\r\n\r\n - search for files\r\n - download files\r\n - change shared folder\r\n - change download folder\r\n\r\n4. The **server daemon** receives commands from **iwant client** and\r\n updates from **file monitoring and election daemon**.\r\n\r\n - Updates received from **folder monitoring daemon** is fowarded to\r\n the leader. For example: indexed files/folders information.\r\n - Updates received from the **election daemon** like\r\n ``leader change`` event, triggers the server to forward the\r\n indexed files/folders information to the new leader\r\n - Queries received from the **iwant client** like ``file search`` is\r\n forwarded to the leader, who then performs fuzzy search on the\r\n metadata it received from other peers and returns a list\r\n containing (filename, size, checksum)\r\n - Queries received from the **iwant client** like ``file download``\r\n is forwarded to the leader, who forwards the roothash of the\r\n file/folder along with the list of peers who have the file. The\r\n **server daemon** then intiates download process with peers\r\n mentioned in the peers list.\r\n - Updates received from the **iwant client** like\r\n ``changing shared folder``, triggers the **server daemon** to make\r\n sure that the **folder monitoring daemon** indexes the new folder\r\n and after indexing is complete, the **server daemon** updates the\r\n leader with the new indexed files/folders meta information.\r\n\r\nTodo\r\n----\r\n\r\n- Create test modules\r\n- Make download faster\r\n- Incorporate tight security mechanisms\r\n- Improve UI for file/folder download progress bar\r\n- Add streaming functionality\r\n\r\nWhy it may not work?\r\n--------------------\r\n\r\n- Firewall\r\n- Multicast not supported in your router.\r\n\r\nErrors\r\n------\r\n\r\nAll logs are present in ``~/.iwant/.iwant.log`` or\r\n``AppData\\Roaming\\.iwant\\.iwant.log``\r\n\r\nLiked the project ?\r\n-------------------\r\n\r\n| |Say Thanks!|\r\n| Any ideas, bugs or modifications required, feel free to me send me a\r\n PR :)\r\n\r\n.. |Say Thanks!| image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg\r\n :target: https://saythanks.io/to/nirvik", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/nirvik/iWant", "keywords": "decentralization, file sharing, peer to peer, p2p, downloading, resume download, directory download", "license": "MIT", "maintainer": "Nirvik Ghosh", "maintainer_email": "nirvik1993@gmail.com", "name": "iwant", "package_url": "https://pypi.org/project/iwant/", "platform": "Cross platform", "project_url": "https://pypi.org/project/iwant/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/nirvik/iWant" }, "release_url": "https://pypi.org/project/iwant/1.0.14/", "requires_dist": null, "requires_python": null, "summary": "CLI based decentralized peer to peer file sharing", "version": "1.0.14" }, "last_serial": 2982759, "releases": { "1.0.14": [ { "comment_text": "", "digests": { "md5": "6dcb4219cc5976c7c62b4bb058d7490a", "sha256": "c969ab2000177322b2b85fc3018ef7b5f4383ad3904f320a53a1aa4f3c058617" }, "downloads": -1, "filename": "iwant-1.0.14.tar.gz", "has_sig": false, "md5_digest": "6dcb4219cc5976c7c62b4bb058d7490a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36255, "upload_time": "2017-06-27T18:23:28", "url": "https://files.pythonhosted.org/packages/0d/82/a8a6efa0a11dd5a2e0b7f427f59253af9f1c00dad61f86e2c93f9ae2aec8/iwant-1.0.14.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6dcb4219cc5976c7c62b4bb058d7490a", "sha256": "c969ab2000177322b2b85fc3018ef7b5f4383ad3904f320a53a1aa4f3c058617" }, "downloads": -1, "filename": "iwant-1.0.14.tar.gz", "has_sig": false, "md5_digest": "6dcb4219cc5976c7c62b4bb058d7490a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36255, "upload_time": "2017-06-27T18:23:28", "url": "https://files.pythonhosted.org/packages/0d/82/a8a6efa0a11dd5a2e0b7f427f59253af9f1c00dad61f86e2c93f9ae2aec8/iwant-1.0.14.tar.gz" } ] }