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:

    [email protected]:~ $ 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:

    [email protected]:~ $ 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
Bazel rules to install Python dependencies with Poetry

rules_python_poetry Bazel rules to install Python dependencies from a Poetry project. Works with native Python rules for Bazel. Getting started Add th

Martin Liu 7 Dec 15, 2021
Make your functions return something meaningful, typed, and safe!

Make your functions return something meaningful, typed, and safe! Features Brings functional programming to Python land Provides a bunch of primitives

dry-python 2.5k Jan 03, 2023
Islam - This is a simple python script.In this script I have written all the suras of Al Quran. As a result, by using this script, you can know the number of any sura at the moment.

Introduction: If you want to know sura number of al quran by just typing the name of sura than you can use this script. Usage in termux: $ pkg install

Fazle Rabbi 1 Jan 02, 2022
A pomodoro app written in Python

Pomodoro It's a pomodoro app written in Python. You can minimize it while you're working if you want to, it'll pop up on your screen when the timer is

Yiğit 1 Dec 20, 2021
Easily map device and application controls to a midi controller

pymidicontroller Introduction Easily map device and application controls to a midi controller

Tane Barriball 24 May 16, 2022
Python - Aprendendo Python na ByLearn

PYTHON Identação Escopo Pai Escopo filho Escopo neto Variaveis

Italo Rafael 3 May 31, 2022
Reproducible nvim completion framework benchmarks.

Nvim.Bench Reproducible nvim completion framework benchmarks. Runs inside Docker. Fair and balanced Methodology Note: for all "randomness", they are g

i love my dog 14 Nov 20, 2022
Simple macOS StatusBar app to remind you to unplug your laptop when sufficiently charged

ChargeMon Simple macOS StatusBar app to monitor battery charge status and remind you to unplug your Mac when the battery is sufficiently charged Overv

Rhet Turnbull 5 Jan 25, 2022
EasyBuild is a software build and installation framework that allows you to manage (scientific) software on High Performance Computing (HPC) systems in an efficient way.

EasyBuild is a software build and installation framework that allows you to manage (scientific) software on High Performance Computing (HPC) systems in an efficient way.

EasyBuild community 87 Dec 27, 2022
Linux GUI app to codon optimize many single-fasta files with coding sequences , using many taxonomy ids

codon_optimize_cds_with_many_taxids_singlefasta Linux GUI app to codon optimize many single-fasta files with coding sequences, using many taxonomy ids

Olga Tsiouri 1 Jan 23, 2022
Uma moeda simples e segura!

SecCoin - Documentação A SecCoin foi criada com intuito de ser uma moeda segura, de fácil investimento e mineração. A Criptomoeda está na sua primeira

Sec-Coin Team 5 Dec 09, 2022
HOWTO: Downgrade from nYNAB to YNAB4

HOWTO: Downgrade from nYNAB to YNAB4 This page explains how to move from nYNAB to YNAB4 while retaining as much information as possible. See Appendix

Tobias Kunze 10 Dec 29, 2022
Simple project to learn more about Bézier curves

Python Quadratic Bézier Simple project to learn more about Bézier curves. On this project i used some api's to graphics and gui pygame thorpy in theor

Kenned Ferreira 2 Mar 06, 2022
Fonts used to be an install-and-forget thing, but many of are now updated regularly.

Your font manager. Fonts used to be an install-and-forget thing, but many of are now updated regularly. fontman helps you keep track of the fonts you

Nico Schlömer 20 Feb 07, 2022
This repository contains Python games that I've worked on. You'll learn how to create python games with AI. I try to focus on creating board games without GUI in Jupyter-notebook.

92_Python_Games 🎮 Introduction 👋 This repository contains Python games that I've worked on. You'll learn how to create python games with AI. I try t

Milaan Parmar / Милан пармар / _米兰 帕尔马 166 Jan 01, 2023
A(Sync) Interface for internal Audible API written in pure Python.

Audible Audible is a Python low-level interface to communicate with the non-publicly Audible API. It enables Python developers to create there own Aud

mkb79 192 Jan 03, 2023
IPython: Productive Interactive Computing

IPython: Productive Interactive Computing Overview Welcome to IPython. Our full documentation is available on ipython.readthedocs.io and contains info

IPython 15.6k Dec 31, 2022
A Python wrapper API for operating and working with the Neo4j Graph Data Science (GDS) library

gdsclient NOTE: This is a work in progress and many GDS features are known to be missing or not working properly. This repo hosts the sources for gdsc

Neo4j 100 Dec 20, 2022
Xoroshiro-cairo - A xoroshiro128** pseudorandom number generator implementation in Cairo

xoroshiro-cairo A xoroshiro128** pseudorandom number generator implementation in

Milan Cermak 26 Oct 05, 2022
Cool Bioinformatics Scripts

Cool Bioinformatics Scripts qqplot You can use this script in two ways read tons of millions of P values from stdin # python zcat pval.txt.gz | qqplo

8 Oct 30, 2022