{"id":13452703,"url":"https://github.com/nils-werner/zget","last_synced_at":"2025-04-12T17:39:23.594Z","repository":{"id":27024881,"uuid":"30489453","full_name":"nils-werner/zget","owner":"nils-werner","description":"Filename based peer to peer file transfer","archived":false,"fork":false,"pushed_at":"2024-06-13T08:31:13.000Z","size":139,"stargazers_count":483,"open_issues_count":3,"forks_count":23,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-04-03T17:14:11.948Z","etag":null,"topics":["file-transfer","peer-to-peer","zeroconf"],"latest_commit_sha":null,"homepage":"https://pypi.python.org/pypi/zget","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nils-werner.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-02-08T11:48:08.000Z","updated_at":"2025-02-16T16:45:11.000Z","dependencies_parsed_at":"2024-11-22T16:15:23.111Z","dependency_job_id":null,"html_url":"https://github.com/nils-werner/zget","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nils-werner%2Fzget","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nils-werner%2Fzget/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nils-werner%2Fzget/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nils-werner%2Fzget/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nils-werner","download_url":"https://codeload.github.com/nils-werner/zget/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248606867,"owners_count":21132430,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["file-transfer","peer-to-peer","zeroconf"],"created_at":"2024-07-31T08:00:20.851Z","updated_at":"2025-04-12T17:39:23.574Z","avatar_url":"https://github.com/nils-werner.png","language":"Python","funding_links":[],"categories":["Utilities","Python"],"sub_categories":[],"readme":"zget\n====\n\n[![Build Status](https://travis-ci.org/nils-werner/zget.svg?branch=master)](https://travis-ci.org/nils-werner/zget)\n[![Build status](https://ci.appveyor.com/api/projects/status/6yrye1hsvw5hvx4l/branch/master?svg=true)](https://ci.appveyor.com/project/nils-werner/zget)\n[![Docs Status](https://readthedocs.org/projects/zget/badge/?version=stable)](https://zget.readthedocs.org/en/stable/)\n[![Latest Version](https://img.shields.io/pypi/v/zget.svg)](https://pypi.python.org/pypi/zget/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/zget.svg)](https://pypi.python.org/pypi/zget/)\n[![License](https://img.shields.io/pypi/l/zget.svg)](https://pypi.python.org/pypi/zget/)\n\nA simple, Zeroconf-based, peer to peer file transfer utility, for situations where you and your peer are sitting next to each other and want to transfer a file quickly (and can shout the filename across the room).\n\nFiles and peers are recognized by the filename they want to transfer, not by their hostnames or IPs.\n\nzget uses the fact that the filename is known to both parties as a basic authentication feature: The sender only advertises the sha1 hash of the filename on the network. Since the receiver must also know the filename, it can look for the sha1 using zeroconf.\n\nIf a match was found, a simple HTTP request is made: For transferring the file the actual filename is then requested from the sender. If this filename wasn't correct, the process is aborted.\n\nInstallation\n------------\n\n    $ pip install zget\n\nI recommend a global [`--user` installation](https://pip.pypa.io/en/stable/user_guide/#user-installs), but you may have to fix [`$PATH` issues](https://github.com/pypa/pip/issues/3813) on your platform.\n\nUsage\n-----\n\nzget works both ways:\n\n - `zput` for sharing a file\n - `zget` for receiving\n\n\n### Sharing\n\nTo share some pictures do:\n\n    $ zput my_holiday_pictures.zip\n\nthen shout\n\n\u003e Hey Tom, I am sending you my_holiday_pictures.zip!\n\nTom will then do\n\n    $ zget my_holiday_pictures.zip\n\nDone.\n\n\n### Receiving\n\nYou want to have some very important data from Tom:\n\n    $ zget annual_reports.xlsx\n\nthen shout\n\n\u003e Hey Tom, can you send me annual_reports.xlsx?\n\nTom then does\n\n    $ zput annual_reports.xlsx\n\nBoom. Done.\n\n\n### Aliases\n\nAlternatively, in case of really complicated filenames, you can use aliases or\nhave `zput` generate one for you:\n\n    $ zput LICENSE\n    Download this file using `zget LICENSE` or `zget C6P3`\n\nAlso `zget` can generate an alias so you can initiate the transfer without knowing\nwhat file will be transferred.\n\n    $ zget\n    Upload a file using `zput \u003cfilename\u003e YHKC`\n\nAs of version 0.10 `zget` will figure out the resulting filename from the transfer metadata, so you won't be stuck with a file `YHKC` on your computer.\n\n\n### Options\n\nYou may inspect the available options using\n\n    $ zput -h\n\nor\n\n    $ zget -h\n\n\nConfiguration\n-------------\n\nBy default zget uses a random open port and the sending party must be able to\naccept incoming connections. This may be a problem when you have\nrestrictive firewall settings or multiple network cards.\n\nYou may create a config file\n\n - `~/.zget.cfg` on Linux/OSX\n - `%APPDATA%/zget/zget.ini` on Windows\n\nto permanently set the port number and/or interface zget uses, e.g.\n\n    [DEFAULT]\n    port = 8080\n    interface = eth0\n\nNote that port numbers below 1024 may require root permissions to be opened.\n\n\nPython Interface\n----------------\n\nAs of zget 0.8, there exists a Python interface for sending and receiving\nfiles as function calls. E.g.:\n\nFor sending:\n\n    import zget\n    zget.put(\"filename\", port=2200)\n\nand for receiving:\n\n    import zget\n    zget.get(\"filename\", \"filename_to_save_to\")\n\nFor more information please see the [API reference](https://zget.readthedocs.org/).\n\n\nSecurity Considerations\n-----------------------\n\nNeither Zeroconf nor HTTP, both technologies used in this tool, should be used\non untrusted networks (like public WiFi at a coffee shop).\n\nAdditonally, `zput` announces the filename and aliases as a simple unsalted\nSHA-1 hash on the network. This means that a malicious party could trivially\nintercept your transfers by simply generating a large enough number of hashes\nand then accepting the transfer on behalf of the desired recipient.\n\nIn this case you should however notice the attack by the recipient never\nreceiving a file while the sender sees an upload happening.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnils-werner%2Fzget","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnils-werner%2Fzget","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnils-werner%2Fzget/lists"}