Opendrop - An open Apple AirDrop implementation written in Python

Overview

OpenDrop: an Open Source AirDrop Implementation

Release Language grade

OpenDrop is a command-line tool that allows sharing files between devices directly over Wi-Fi. Its unique feature is that it is protocol-compatible with Apple AirDrop which allows to share files with Apple devices running iOS and macOS. Currently (and probably also for the foreseeable future), OpenDrop only supports sending to Apple devices that are discoverable by everybody as the default contacts only mode requires Apple-signed certificates. We support contacts-only devices by using extracted AirDrop credentials (keys and certificates) from macOS via our keychain extractor.

Disclaimer

OpenDrop is experimental software and is the result of reverse engineering efforts by the Open Wireless Link project. Therefore, it does not support all features of AirDrop or might be incompatible with future AirDrop versions. OpenDrop is not affiliated with or endorsed by Apple Inc. Use this code at your own risk.

Requirements

To achieve compatibility with Apple AirDrop, OpenDrop requires the target platform to support a specific Wi-Fi link layer. In addition, it requires Python >=3.6 as well as several libraries.

Apple Wireless Direct Link. As AirDrop exclusively runs over Apple Wireless Direct Link (AWDL), OpenDrop is only supported on macOS or on Linux systems running an open re-implementation of AWDL such as OWL.

Libraries. OpenDrop relies on a current version of libarchive. macOS ships with a rather old version, so you will need to install a newer version, for example, via Homebrew:

brew install libarchive

OpenDrop automatically sets DYLD_LIBRARY_PATH to look for the Homebrew version. You may need to update the variable yourself if you install the libraries differently.

Linux distributions should ship with more up-to-date versions, so this won't be necessary.

Installation

Installation of the Python package release is straightforward using pip3:

pip3 install opendrop

You can also install the current development version by first cloning this repository, and then installing it via pip3:

git clone https://github.com/seemoo-lab/opendrop.git
pip3 install ./opendrop

Usage

We briefly explain how to send and receive files using opendrop. To see all command line options, run opendrop -h.

Sending a File or a Link

Sending a file is typically a two-step procedure. You first discover devices in proximity using the find command. Stop the process once you have found the receiver.

$ opendrop find
Looking for receivers. Press Ctrl+C to stop ...
Found  index 0  ID eccb2f2dcfe7  name John’s iPhone
Found  index 1  ID e63138ac6ba8  name Jane’s MacBook Pro

You can then send a file (or link, see below) using

$ opendrop send -r 0 -f /path/to/some/file
Asking receiver to accept ...
Receiver accepted
Uploading file ...
Uploading has been successful

Instead of the index, you can also use ID or name. OpenDrop will try to interpret the input in the order (1) index, (2) ID, and (3) name and fail if no match was found.

Sending a web link. Since v0.13, OpenDrop supports sending web links, i.e., URLs, so that receiving Apple devices will immediately open their browser upon accepting. (Note that OpenDrop receivers still only support receiving regular files.)

$ opendrop send -r 0 -f https://owlink.org --url

Receiving Files

Receiving is much easier. Simply use the receive command. OpenDrop will accept all incoming files automatically and put received files in the current directory.

$ opendrop receive

Current Limitations/TODOs

OpenDrop is the result of a research project and, thus, has several limitations (non-exhaustive list below). I do not have the capacity to work on them myself but am happy to provide assistance if somebody else want to take them on.

  • Triggering macOS/iOS receivers via Bluetooth Low Energy. Apple devices start their AWDL interface and AirDrop server only after receiving a custom advertisement via Bluetooth LE (see USENIX paper for details). This means, that Apple AirDrop receivers may not be discovered even if they are discoverable by everyone.

  • Sender/Receiver authentication and connection state. Currently, there is no peer authentication as in Apple's AirDrop, in particular, (1) OpenDrop does not verify that the TLS certificate is signed by Apple's root and (2) that the Apple ID validation record is correct (see USENIX paper for details). In addition, OpenDrop automatically accepts any file that it receives due to a missing connection state.

  • Sending multiple files. Apple AirDrop supports sending multiple files at once, OpenDrop does not (would require adding more files to the archive, modify HTTP /Ask request, etc.).

Our Papers

  • Alexander Heinrich, Matthias Hollick, Thomas Schneider, Milan Stute, and Christian Weinert. PrivateDrop: Practical Privacy-Preserving Authentication for Apple AirDrop. 30th USENIX Security Symposium (USENIX Security ’21), August 14–16, 2019, virtual Event. Paper Website Code
  • Milan Stute, Sashank Narain, Alex Mariotto, Alexander Heinrich, David Kreitschmann, Guevara Noubir, and Matthias Hollick. A Billion Open Interfaces for Eve and Mallory: MitM, DoS, and Tracking Attacks on iOS and macOS Through Apple Wireless Direct Link. 28th USENIX Security Symposium (USENIX Security ’19), August 14–16, 2019, Santa Clara, CA, USA. Paper

Authors

  • Milan Stute (email, web)
  • Alexander Heinrich

License

OpenDrop is licensed under the GNU General Public License v3.0.

Comments
  • Discovering

    Discovering "Contacts Only" devices

    Not really an issue, but just a question. Possibly a dumb one, as I'm rather inexperienced when it comes to cryptography, certificates and signing keys. Forgive me for that in advance. I should also mention I'm playing with OpenDrop on macOS, running on top or native AWDL, no OWL involved, although I don't think it makes any difference for this particular question.

    If I read correctly, what I can understand from this paper (section 3.3) and OpenDrop source file util.py, (line 94), in order to discover and send files to a device in Contacts Only mode, two certificates are needed. The first one is a device-specific Apple-signed certificate, with subject name something like com.apple.idms.appleid.prd.uuid, where uuid part is an Apple ID account UUID. The certificate is usually placed into user's login Keychain when logging into the device with its Apple ID. The whole purpose of this certificate is to get that UUID (and put it into the record data) and if one can figure out some other way of doing it (e.g. using Apple's private Sharing framework), that certificate is not needed at all.

    The second certificate is used to sign binary plist data of created record data. It is said that "to be accepted by Apple clients, we would need the Apple-owned private key of the signing certificate", and of course we don't have it. When my Apple AirDrop devices in Contacts Only mode are discovered by my Mac, I assume the record data containing my Apple ID UUID and hashed contacts is somehow signed on the Mac and send to those devices when trying to establish an authenticated connection. So, if there are no Apple-owned private keys on my Mac, I wonder how that record data gets signed when the Mac initiates authenticated connection to other AirDrop device.

    Once again, I apologise for potentially dumb question for the reasons I explained in the first paragraph and thanks for clarification.

    enhancement 
    opened by milke 6
  • opendrop won't find an iphone

    opendrop won't find an iphone

    I was able to receive files (although I don't know where the file was put), but opendrop won't find the same iphone when attempting to send a file.

    I only get this message:

    Looking for receivers. Press enter to stop ...

    opened by warpdesign 6
  • Random behaviour with opendrop receive

    Random behaviour with opendrop receive

    Hi, I've tried in multiple virtual machines with the following configuration the "receive" command with no success:

    • Ubuntu 18.04, network card: Alpha AWUS052NH
    • Debian 9, network card: Alpha AWUS052NH
    • Kali Linux 2019, network card: Alpha AWUS052NH

    In all of the environments, I've managed to set up the network with the card in monitor mode, although I have only been able to run the owl process with the -N flag sudo owl -i [iface] -N When i run the process (both with the daemon process or without it) I've been able to use the opendrop find command all the time, discovering all the devices but when i try to run opendrop receive there are some random issues:

    • Most of the time it does not work, freezing and sending random zerconf mdns packets but not receiven anything.
    • Sometimes it captures the devices and my iDevices display the new device created by opendrop with the given name.
    • Sometimes it captures the devices but it does not appear in my iDevices.

    So I don't know what to do to fix those issues. Thanks in advance.

    opened by lucferbux 6
  • Create

    Create "opendrop" package for pip installation

    Currently the command pip3 install opendrop shows that the package is not registered in the PIP repositories yet, therefore it is easy for someone malicious to claim the package and serve arbitrary code with it.

    I suggest the maintainers of this project register it with PIP so it can be installed with above-mentioned command.

    opened by bf 6
  • RuntimeError: Interface awdl0 does not have an IPv6 address. Make sure that `owl` is running.

    RuntimeError: Interface awdl0 does not have an IPv6 address. Make sure that `owl` is running.

    opendrop receive

    Traceback (most recent call last): File "/home/santiago/.local/bin/opendrop", line 8, in sys.exit(main()) File "/home/santiago/.local/lib/python3.6/site-packages/opendrop/cli.py", line 36, in main AirDropCli(sys.argv[1:]) File "/home/santiago/.local/lib/python3.6/site-packages/opendrop/cli.py", line 75, in init self.receive() File "/home/santiago/.local/lib/python3.6/site-packages/opendrop/cli.py", line 156, in receive self.server = AirDropServer(self.config) File "/home/santiago/.local/lib/python3.6/site-packages/opendrop/server.py", line 54, in init 'Make sure that owl is running.'.format(self.config.interface)) RuntimeError: Interface awdl0 does not have an IPv6 address. Make sure that owl is running.

    opendrop find Looking for receivers. Press enter to stop ... Traceback (most recent call last): File "/home/santiago/.local/bin/opendrop", line 8, in sys.exit(main()) File "/home/santiago/.local/lib/python3.6/site-packages/opendrop/cli.py", line 36, in main AirDropCli(sys.argv[1:]) File "/home/santiago/.local/lib/python3.6/site-packages/opendrop/cli.py", line 77, in init self.find() File "/home/santiago/.local/lib/python3.6/site-packages/opendrop/cli.py", line 96, in find self.browser = AirDropBrowser(self.config) File "/home/santiago/.local/lib/python3.6/site-packages/opendrop/client.py", line 44, in init 'Make sure that owl is running.'.format(config.interface)) RuntimeError: Interface awdl0 does not have an IPv6 address. Make sure that owl is running.

    opened by santiagodemierre 5
  • "No buffer space available" on find and receive

    System information: • Operating system: MacOS Catalina 10.15.7 • Device: MacBook Pro (16-inch, 2019)

    Steps to reproduce:

    ~ opendrop find
    Looking for receivers. Press enter to stop ...
    Error sending through socket 4
    Traceback (most recent call last):
      File "/usr/local/lib/python3.8/site-packages/zeroconf/__init__.py", line 2889, in send
        bytes_sent = s.sendto(packet, 0, (real_addr, port))
    OSError: [Errno 55] No buffer space available
    
    ~ opendrop receive
    Announcing service: host 3c22fbf03a1f.ant.amazon.com, address fe80::7446:c4ff:fe51:d986, port 8771
    Error sending through socket 4
    Traceback (most recent call last):
      File "/usr/local/lib/python3.8/site-packages/zeroconf/__init__.py", line 2889, in send
        bytes_sent = s.sendto(packet, 0, (real_addr, port))
    OSError: [Errno 55] No buffer space available
    Starting HTTPS server
    

    Expected results: Find new devices and/or receive incoming payload Actual results: Catching OSError: [Errno 55] No buffer space available errors upon execution.

    Things tried:

    1. Increasing datagram size:
    sudo sysctl -w net.inet.udp.maxdgram=655350
    net.inet.udp.maxdgram: 9216 -> 655350
    

    No effect.

    opened by yeralin 5
  • No image preview when sending images to iPhone

    No image preview when sending images to iPhone

    title^

    debugging shows that FileIcon from this line definitely has some bytes in it, but upon receiving no preview is available, just the plain text

    Expected behavior: this

    Actual behavior: same but without an image

    bug 
    opened by wkpn 5
  • Moved code to src dir & brought setup files to python3 standards

    Moved code to src dir & brought setup files to python3 standards

    Ok great, I made the changes in my fork. I had to change the tree structure, by having an intermediary src folder, otherwise, relative imports would break.

    The cfg file also has support for coverage.rc, doc8.ini files that can be used for testing with Travis

    opened by vinaysb 5
  • 'opendrop send' results in 'Broken pipe' or 'Connection reset by peer' exception

    'opendrop send' results in 'Broken pipe' or 'Connection reset by peer' exception

    I'm working through the Use AirDrop on a Raspberry Pi 3 guide using the suggested setup:

    • Raspberry Pi 3 Model B
    • Raspbian Stretch Lite
    • BCM43430A1 Wi-Fi chip

    When attempting to send a file from the Raspberry Pi to an iPhone, the phone is prompted with the Airdrop Decline/Accept popup. After pressing Accept on the phone, an Alert pops up with the text "AirDrop from "raspberrypi" Failed" and OpenDrop throws either a [Errno 32] Broken pipe or a [Errno 104] Connection reset by peer exception.

    Example stack trace of the [Errno 32] Broken pipe exception:

    pi@raspberrypi:~ $ opendrop send -r 0 -f IMG_0631.jpg 
    Asking receiver to accept ...
    Receiver accepted
    Uploading file ...
    Traceback (most recent call last):
      File "/usr/local/bin/opendrop", line 11, in <module>
        load_entry_point('opendrop==0.10', 'console_scripts', 'opendrop')()
      File "/usr/local/lib/python3.5/dist-packages/opendrop/cli.py", line 38, in main
        AirDropCli(sys.argv[1:])
      File "/usr/local/lib/python3.5/dist-packages/opendrop/cli.py", line 85, in __init__
        self.send()
      File "/usr/local/lib/python3.5/dist-packages/opendrop/cli.py", line 162, in send
        if not self.client.send_upload(self.file):
      File "/usr/local/lib/python3.5/dist-packages/opendrop/client.py", line 201, in send_upload
        success, _ = self.send_POST('/Upload', stream, headers=headers)
      File "/usr/local/lib/python3.5/dist-packages/opendrop/client.py", line 112, in send_POST
        self.http_conn.request('POST', url, body=body, headers=_headers)
      File "/usr/lib/python3.5/http/client.py", line 1107, in request
        self._send_request(method, url, body, headers)
      File "/usr/lib/python3.5/http/client.py", line 1152, in _send_request
        self.endheaders(body)
      File "/usr/lib/python3.5/http/client.py", line 1103, in endheaders
        self._send_output(message_body)
      File "/usr/lib/python3.5/http/client.py", line 936, in _send_output
        self.send(message_body)
      File "/usr/lib/python3.5/http/client.py", line 905, in send
        self.sock.sendall(datablock)
      File "/usr/lib/python3.5/ssl.py", line 899, in sendall
        v = self.send(data[count:])
      File "/usr/lib/python3.5/ssl.py", line 869, in send
        return self._sslobj.write(data)
      File "/usr/lib/python3.5/ssl.py", line 594, in write
        return self._sslobj.write(data)
    BrokenPipeError: [Errno 32] Broken pipe
    

    Example stack trace of the [Errno 104] Connection reset by peer exception:

    pi@raspberrypi:~ $ opendrop send -r 0 -f IMG_0631.jpg 
    Asking receiver to accept ...
    Receiver accepted
    Uploading file ...
    Traceback (most recent call last):
      File "/usr/local/bin/opendrop", line 11, in <module>
        load_entry_point('opendrop==0.10', 'console_scripts', 'opendrop')()
      File "/usr/local/lib/python3.5/dist-packages/opendrop/cli.py", line 38, in main
        AirDropCli(sys.argv[1:])
      File "/usr/local/lib/python3.5/dist-packages/opendrop/cli.py", line 85, in __init__
        self.send()
      File "/usr/local/lib/python3.5/dist-packages/opendrop/cli.py", line 162, in send
        if not self.client.send_upload(self.file):
      File "/usr/local/lib/python3.5/dist-packages/opendrop/client.py", line 201, in send_upload
        success, _ = self.send_POST('/Upload', stream, headers=headers)
      File "/usr/local/lib/python3.5/dist-packages/opendrop/client.py", line 112, in send_POST
        self.http_conn.request('POST', url, body=body, headers=_headers)
      File "/usr/lib/python3.5/http/client.py", line 1107, in request
        self._send_request(method, url, body, headers)
      File "/usr/lib/python3.5/http/client.py", line 1152, in _send_request
        self.endheaders(body)
      File "/usr/lib/python3.5/http/client.py", line 1103, in endheaders
        self._send_output(message_body)
      File "/usr/lib/python3.5/http/client.py", line 936, in _send_output
        self.send(message_body)
      File "/usr/lib/python3.5/http/client.py", line 905, in send
        self.sock.sendall(datablock)
      File "/usr/lib/python3.5/ssl.py", line 899, in sendall
        v = self.send(data[count:])
      File "/usr/lib/python3.5/ssl.py", line 869, in send
        return self._sslobj.write(data)
      File "/usr/lib/python3.5/ssl.py", line 594, in write
        return self._sslobj.write(data)
    ConnectionResetError: [Errno 104] Connection reset by peer
    
    opened by jpatapoff 5
  • Encoder jpeg2k not available

    Encoder jpeg2k not available

    Installed opendrop using pip installation method.

    <Traceback (most recent call last):
      File "/usr/lib/python3/dist-packages/PIL/ImageFile.py", line 498, in _save
        fh = fp.fileno()
    io.UnsupportedOperation: fileno
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/usr/lib/python3/dist-packages/PIL/Image.py", line 476, in _getencoder
        encoder = getattr(core, encoder_name + "_encoder")
    AttributeError: module 'PIL._imaging' has no attribute 'jpeg2k_encoder'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/usr/local/bin/opendrop", line 10, in <module>
        sys.exit(main())
      File "/usr/local/lib/python3.7/dist-packages/opendrop/cli.py", line
    36, in main
        AirDropCli(sys.argv[1:])
      File "/usr/local/lib/python3.7/dist-packages/opendrop/cli.py", line
    87, in __init__
        self.send()
      File "/usr/local/lib/python3.7/dist-packages/opendrop/cli.py", line
    166, in send
        if not self.client.send_ask(self.file):
      File "/usr/local/lib/python3.7/dist-packages/opendrop/client.py",
    line 151, in send_ask
        icon = AirDropUtil.generate_file_icon(f.name)
      File "/usr/local/lib/python3.7/dist-packages/opendrop/util.py", line
    175, in generate_file_icon
        im.save(imgByteArr, format='JPEG2000')
      File "/usr/lib/python3/dist-packages/PIL/Image.py", line 2084, in save
        save_handler(self, fp, filename)
      File "/usr/lib/python3/dist-packages/PIL/Jpeg2KImagePlugin.py", line
    294, in _save
        ImageFile._save(im, fp, [("jpeg2k", (0, 0) + im.size, 0, kind)])
      File "/usr/lib/python3/dist-packages/PIL/ImageFile.py", line 503, in _save
        e = Image._getencoder(im.mode, e, a, im.encoderconfig)
      File "/usr/lib/python3/dist-packages/PIL/Image.py", line 479, in _getencoder
        raise IOError("encoder %s not available" % encoder_name)
    OSError: encoder jpeg2k not available
    

    I've tried everything that I could think of to install jpeg2k (too many things to list, mostly making sure that all of the openjpeg stuff was installed)

    question 
    opened by CaptainStabs 4
  • TypeError: inet_aton() argument 1 must be str, not IPv4Address

    TypeError: inet_aton() argument 1 must be str, not IPv4Address

    Traceback (most recent call last):
      File "/usr/local/bin/opendrop", line 11, in <module>
        load_entry_point('opendrop==0.10.3', 'console_scripts', 'opendrop')()
      File "/usr/local/lib/python3.6/site-packages/opendrop/cli.py", line 38, in main
        AirDropCli(sys.argv[1:])
      File "/usr/local/lib/python3.6/site-packages/opendrop/cli.py", line 77, in __init__
        self.find()
      File "/usr/local/lib/python3.6/site-packages/opendrop/cli.py", line 96, in find
        self.browser = AirDropBrowser(self.config)
      File "/usr/local/lib/python3.6/site-packages/opendrop/client.py", line 49, in __init__
        self.zeroconf = Zeroconf(interfaces=[self.ip_addr], ipv6_interface_name=config.interface)
      File "/usr/local/lib/python3.6/site-packages/opendrop/zeroconf.py", line 1779, in __init__
        socket.inet_aton(_MDNS_ADDR) + socket.inet_aton(i))
    TypeError: inet_aton() argument 1 must be str, not IPv4Address
    
    opened by yurivict 4
  • Can't discover devices

    Can't discover devices

    i have the following problem related to the os i use i am running chromeos and used homecrew to install owl i have a strange poblem with opendrop although new devices are found in owl but i can't discover them or finding them with the following error message

    `/usr/local/lib64/python3.10/site-packages/zeroconf/_services/browser.py:179: FutureWarning: <opendrop.client.AirDropBrowser object at 0x7ae7ba49ef20> has no update_service method. Provide one (it can be empty if you don't care about the updates), it'll become mandatory. warnings.warn(

    Exception in thread Thread-3 (_send_discover): Traceback (most recent call last): File "/usr/local/lib64/python3.10/threading.py", line 1016, in _bootstrap_inner self.run() File "/usr/local/lib64/python3.10/threading.py", line 953, in run self._target(*self._args, **self._kwargs) File "/usr/local/lib/python3.10/site-packages/opendrop/cli.py", line 156, in _send_discover receiver_name = client.send_discover() File "/usr/local/lib/python3.10/site-packages/opendrop/client.py", line 141, in send_discover _, response_bytes = self.send_POST("/Discover", discover_plist_binary) File "/usr/local/lib/python3.10/site-packages/opendrop/client.py", line 115, in send_POST self.http_conn.request("POST", url, body=body, headers=_headers) File "/usr/local/lib64/python3.10/http/client.py", line 1282, in request self._send_request(method, url, body, headers, encode_chunked) File "/usr/local/lib64/python3.10/http/client.py", line 1328, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/usr/local/lib64/python3.10/http/client.py", line 1277, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/usr/local/lib64/python3.10/http/client.py", line 1037, in _send_output self.send(msg) File "/usr/local/lib64/python3.10/http/client.py", line 975, in send self.connect() File "/usr/local/lib64/python3.10/http/client.py", line 1447, in connect super().connect() File "/usr/local/lib64/python3.10/http/client.py", line 941, in connect self.sock = self._create_connection( File "/usr/local/lib/python3.10/site-packages/opendrop/client.py", line 318, in create_connection_awdl raise err File "/usr/local/lib/python3.10/site-packages/opendrop/client.py", line 308, in create_connection_awdl sock.connect(sa) OSError: [Errno 101] Network is unreachable ^Cmunmap_chunk(): invalid pointer`

    how to solve it

    opened by midozalouk 0
  • Network is unreachable

    Network is unreachable

    when i start opendrop find it through this error although owl is still running !!!!

    `Looking for receivers. Press Ctrl+C to stop ... /usr/local/lib/python3.8/site-packages/zeroconf/_services/browser.py:168: FutureWarning: <opendrop.client.AirDropBrowser object at 0x7d797418be80> has no update_service method. Provide one (it can be empty if you don't care about the updates), it'll become mandatory. warnings.warn(

    Error with socket 4 (('fe80::eb8:2aff:fe00:5aa6', 5353, 0, 21))): [Errno 101] Network is unreachable Traceback (most recent call last): File "/usr/local/lib/python3.8/asyncio/selector_events.py", line 1048, in sendto self._sock.sendto(data, addr) OSError: [Errno 101] Network is unreachable `

    do you have any clue for that ?

    opened by midozalouk 0
  • Incomplete file transfer.

    Incomplete file transfer.

    I am trying to transfer a text file between two mac books.

    Opendrop find works as expected -- ./opendrop find Looking for receivers. Press Ctrl+C to stop ... /Users/haimonti/Library/Python/3.9/lib/python/site-packages/zeroconf/_services/browser.py:168: FutureWarning: <opendrop.client.AirDropBrowser object at 0x1043857c0> has no update_service method. Provide one (it can be empty if you don't care about the updates), it'll become mandatory. warnings.warn( Found index 0 ID 242435eddd0c name Haimonti Dutta’s iPhone Found index 1 ID bb3502543837 name jac325p-duttaOLD

    But opendrop send gives an error after asking the receiver to accept, receiver accepted, and uploading file (airdrop is cancelled eventually). In particular, here is the error:

    ./opendrop send -r 1 -f /Users/haimonti/Research/DDM/DistMomMethods/test.txt Asking receiver to accept ... Receiver accepted Uploading file ... Exception ignored in: <function ArchiveEntry.del at 0x102dd1c10> Traceback (most recent call last): File "/Users/haimonti/Library/Python/3.9/lib/python/site-packages/libarchive/entry.py", line 51, in del ffi.entry_free(self._entry_p) AttributeError: _entry_p Traceback (most recent call last): File "/Users/haimonti/Library/Python/3.9/bin/./opendrop", line 8, in sys.exit(main()) File "/Users/haimonti/Library/Python/3.9/lib/python/site-packages/opendrop/cli.py", line 36, in main AirDropCli(sys.argv[1:]) File "/Users/haimonti/Library/Python/3.9/lib/python/site-packages/opendrop/cli.py", line 112, in init self.send() File "/Users/haimonti/Library/Python/3.9/lib/python/site-packages/opendrop/cli.py", line 196, in send if not self.client.send_upload(self.file, is_url=self.is_url): File "/Users/haimonti/Library/Python/3.9/lib/python/site-packages/opendrop/client.py", line 214, in send_upload archive.add_abs_file(f, os.path.join(".", ff)) File "/Users/haimonti/Library/Python/3.9/lib/python/site-packages/opendrop/util.py", line 184, in add_abs_file entry = ArchiveEntry(None, entry_p) TypeError: init() takes from 1 to 2 positional arguments but 3 were given

    Any suggestions would be very helpful. Thanks much in advance.

    opened by Haimonti 0
  • Keeps looking for receivers

    Keeps looking for receivers

    I think I have installed opendrop correctly (I just did it through the pip command). Whenever I run the opendrop find command, my terminal (MacOS) keeps searching for receivers but none are ever found.

    Do I have to add specific settings to my iPhone in order for it to work?

    opened by LowieAnt 1
  • Add CodeQL workflow for GitHub code scanning

    Add CodeQL workflow for GitHub code scanning

    Hi seemoo-lab/opendrop!

    This is a one-off automatically generated pull request from LGTM.com :robot:. You might have heard that we’ve integrated LGTM’s underlying CodeQL analysis engine natively into GitHub. The result is GitHub code scanning!

    With LGTM fully integrated into code scanning, we are focused on improving CodeQL within the native GitHub code scanning experience. In order to take advantage of current and future improvements to our analysis capabilities, we suggest you enable code scanning on your repository. Please take a look at our blog post for more information.

    This pull request enables code scanning by adding an auto-generated codeql.yml workflow file for GitHub Actions to your repository — take a look! We tested it before opening this pull request, so all should be working :heavy_check_mark:. In fact, you might already have seen some alerts appear on this pull request!

    Where needed and if possible, we’ve adjusted the configuration to the needs of your particular repository. But of course, you should feel free to tweak it further! Check this page for detailed documentation.

    Questions? Check out the FAQ below!

    FAQ

    Click here to expand the FAQ section

    How often will the code scanning analysis run?

    By default, code scanning will trigger a scan with the CodeQL engine on the following events:

    • On every pull request — to flag up potential security problems for you to investigate before merging a PR.
    • On every push to your default branch and other protected branches — this keeps the analysis results on your repository’s Security tab up to date.
    • Once a week at a fixed time — to make sure you benefit from the latest updated security analysis even when no code was committed or PRs were opened.

    What will this cost?

    Nothing! The CodeQL engine will run inside GitHub Actions, making use of your unlimited free compute minutes for public repositories.

    What types of problems does CodeQL find?

    The CodeQL engine that powers GitHub code scanning is the exact same engine that powers LGTM.com. The exact set of rules has been tweaked slightly, but you should see almost exactly the same types of alerts as you were used to on LGTM.com: we’ve enabled the security-and-quality query suite for you.

    How do I upgrade my CodeQL engine?

    No need! New versions of the CodeQL analysis are constantly deployed on GitHub.com; your repository will automatically benefit from the most recently released version.

    The analysis doesn’t seem to be working

    If you get an error in GitHub Actions that indicates that CodeQL wasn’t able to analyze your code, please follow the instructions here to debug the analysis.

    How do I disable LGTM.com?

    If you have LGTM’s automatic pull request analysis enabled, then you can follow these steps to disable the LGTM pull request analysis. You don’t actually need to remove your repository from LGTM.com; it will automatically be removed in the next few months as part of the deprecation of LGTM.com (more info here).

    Which source code hosting platforms does code scanning support?

    GitHub code scanning is deeply integrated within GitHub itself. If you’d like to scan source code that is hosted elsewhere, we suggest that you create a mirror of that code on GitHub.

    How do I know this PR is legitimate?

    This PR is filed by the official LGTM.com GitHub App, in line with the deprecation timeline that was announced on the official GitHub Blog. The proposed GitHub Action workflow uses the official open source GitHub CodeQL Action. If you have any other questions or concerns, please join the discussion here in the official GitHub community!

    I have another question / how do I get in touch?

    Please join the discussion here to ask further questions and send us suggestions!

    opened by lgtm-com[bot] 0
Releases(v0.13.0)
Owner
Secure Mobile Networking Lab
Secure Mobile Networking Lab
Bad Apple printed out on the console with Python!

bad-apple Bad Apple printed out on the console with Python! Preface A word of disclaimer, while the final code is somewhat original, this project is a

CalvinLoke 186 Dec 1, 2022
🍏 Make Thinc faster on macOS by calling into Apple's native Accelerate library

?? Make Thinc faster on macOS by calling into Apple's native Accelerate library

Explosion 81 Nov 26, 2022
Process RunGap output file of a workout and load data into Apple Numbers Spreadsheet and my website with API calls

BSD 3-Clause License Copyright (c) 2020, Mike Bromberek All rights reserved. ProcessWorkout Exercise data is exported in JSON format to iCloud using

Mike Bromberek 1 Jan 3, 2022
Automatically skip sponsor segments in YouTube videos playing on Apple TV.

iSponsorBlockTV Skip sponsor segments in YouTube videos playing on an Apple TV. This project is written in asycronous python and should be pretty quic

David 64 Dec 17, 2022
Singularity Containers on Apple M1 (ARM64)

Singularity Containers on Apple M1 (ARM64) This is a repository containing a ready-to-use environment for singularity in arm64 (M1). It has been prepa

Manuel Parra 4 Nov 14, 2022
Fisherman is a free open source fishing bot written in python.

Fisherman is a free open source fishing bot written in python.

Pure | Cody 33 Jan 29, 2022
PyDy, short for Python Dynamics, is a tool kit written in the Python

PyDy, short for Python Dynamics, is a tool kit written in the Python programming language that utilizes an array of scientific programs to enable the study of multibody dynamics. The goal is to have a modular framework and eventually a physics abstraction layer which utilizes a variety of backends that can provide the user with their desired workflow

PyDy 307 Jan 1, 2023
Msgpack serialization/deserialization library for Python, written in Rust using PyO3 and rust-msgpack. Reboot of orjson. msgpack.org[Python]

ormsgpack ormsgpack is a fast msgpack library for Python. It is a fork/reboot of orjson It serializes faster than msgpack-python and deserializes a bi

Aviram Hassan 139 Dec 30, 2022
Synthetik Python Mod - A save editor tool for the game Synthetik written in python

Synthetik_Python_Mod A save editor tool for the game Synthetik written in python

null 2 Sep 10, 2022
Python Projects is an Open Source to enhance your python skills

Welcome! ???? Python Project is Open Source to enhance your python skills. You're free to contribute. ?? You just need to give us your scripts written

Tristán 6 Nov 28, 2022
MiniJVM is simple java virtual machine written by python language, it can load class file from file system and run it.

MiniJVM MiniJVM是一款使用python编写的简易JVM,能够从本地加载class文件并且执行绝大多数指令。 支持的功能 1.从本地磁盘加载class并解析 2.支持绝大多数指令集的执行 3.支持虚拟机内存分区以及对象的创建 4.支持方法的调用和参数传递 5.支持静态代码块的初始化 不支

keguoyu 60 Apr 1, 2022
Pygments is a generic syntax highlighter written in Python

Welcome to Pygments This is the source of Pygments. It is a generic syntax highlighter written in Python that supports over 500 languages and text for

null 1.2k Jan 6, 2023
Retrying is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just about anything.

Retrying Retrying is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just

Ray Holder 1.9k Dec 29, 2022
A full-featured, hackable tiling window manager written and configured in Python

A full-featured, hackable tiling window manager written and configured in Python Features Simple, small and extensible. It's easy to write your own la

Qtile 3.8k Dec 31, 2022
This is the code of Python enthusiasts collection and written.

I am Python's enthusiast, like to collect Python's programs and code.

cnzb 35 Apr 18, 2022
Reactjs web app written entirely in python, using transcrypt compiler.

Reactjs web app written entirely in python, using transcrypt compiler.

Dan Shai 22 Nov 27, 2022
An Advanced Wordlist Library Written In Python For Acm114

RBAPG ->RBAPG is the abbreviation of "Rule Based Attack Password Generator". ->This module is a wordlist generator module. ->You can generate randomly

Aziz Kaplan 11 Aug 28, 2022
Grail(TM) is a web browser written in Python

Grail is distributed in source form. It requires that you have a Python interpreter and a Tcl/Tk installation, with the Python interpreter configured for Tcl/Tk support.

null 22 Oct 18, 2022