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
Eros is an expiremental programming language built using simple Python code.

Eros is an expiremental programming language built using simple Python code. Featuring an easy syntax and unique features like type slicing, the language remains an expirement that grows in down time

zxro 2 Nov 21, 2021
Машинное обучение на ФКН ВШЭ

Курс "Машинное обучение" на ФКН ВШЭ Конспекты лекций, материалы семинаров и домашние задания (теоретические, практические, соревнования) по курсу "Маш

Evgeny Sokolov 2.2k Jan 04, 2023
Игра реализована с помощью языке python3.9, библиотеки pygame

Игра в танки Игра реализована с помощью языке python3.9, библиотеки pygame. Игра имеет несколько уровней. Правила: есть танки, которые стреляют, есть

1 Jan 01, 2022
About A python based Apple Quicktime protocol,you can record audio and video from real iOS devices

介绍 本应用程序使用 python 实现,可以通过 USB 连接 iOS 设备进行屏幕共享 高帧率(30〜60fps) 高画质 低延迟(200ms) 非侵入性 支持多设备并行 Mac OSX 安装 python =3.7 brew install libusb pkg-config 如需使用 g

YueC 124 Nov 30, 2022
"Cambio de monedas" Change-making problem with Python, dynamic programming best solutions,

Change-making-problem / Cambio de monedas Entendiendo el problema Dada una cantidad de dinero y una lista de denominaciones de monedas, encontrar el n

Juan Antonio Ayola Cortes 1 Dec 08, 2021
Small Arrow Vortex clipboard processing library

Description Small Arrow Vortex clipboard processing library. Install You can install this library from PyPI with pip install av-clipboard-lib or compi

Delta Epsilon 1 Dec 18, 2021
A code to clean and extract a bib file based on keywords.

These are two scripts I use to generate clean bib files. clean_bibfile.py: Removes superfluous fields (which are not included in fields_to_keep.json)

Antoine Allard 4 May 16, 2022
Mengzhan (John) code for Closed Loop Control system of Sharp Wave Ripples in Hippocampus CA3 region

ClosedLoopControl_Yu Mengzhan (John) code for Closed Loop Control system of Sharp Wave Ripples in Hippocampus CA3 region Creating Python Virtual Envir

Mengzhan (John) Liufu 1 Jan 22, 2022
Reverse the infix string. Note that while reversing the string you must interchange left and right parentheses

Reverse the infix string. Note that while reversing the string you must interchange left and right parentheses. Obtain the postfix expression of the infix expression Step 1.Reverse the postfix expres

Sazzad Hossen 1 Jan 04, 2022
Repo created for the purpose of adding any kind of programs and projects

Programs and Project Repository A repository for adding programs and projects of any kind starting from beginners level to expert ones Contributing to

Unicorn Dev Community 3 Nov 02, 2022
디텍션 유틸 모음

Object detection utils 유틸모음 설명 링크 convert convert 관련코드 https://github.com/AI-infinyx/ob_utils/tree/main/convert crawl 구글, 네이버, 빙 등 크롤링 관련 https://gith

codetest 41 Jan 22, 2021
Traffic flow test platform, especially for reinforcement learning

Traffic Flow Test Platform Traffic flow test platform, especially for reinforcement learning, named TFTP. A traffic signal control framework that can

4 Nov 07, 2022
Collection of script & resources for Foundry's Nuke software.

Author: Liam Collod. Collections of scripting stuff I wrote for Foundry's Nuke software. Utilisation You can have a look at the README.md file in each

Liam Collod 1 May 14, 2022
the classic version Of torrentleechx #Unmaintained #Archived

TorrentleechX-Classic Old Modified Version Repo #Unmaintained #Archived for support join here working example group Leech Here For Any Issues/Imroveme

XcodersHub 18 Jan 30, 2022
Find functions without canary check (or similar)

Ghidra Check Protector Which non-trivial functions don't reference the stack canary checker (or other, user-defined function)? Place your cursor to th

buherator 3 Jan 17, 2022
Dockernized ZeroTierOne controller with zero-ui web interface.

docker-zerotier-controller Dockernized ZeroTierOne controller with zero-ui web interface. 中文讨论 Customize ZeroTierOne's controller planets Modify patch

sbilly 209 Jan 04, 2023
Goddard A collection of small, simple strategies for Freqtrade

Goddard A collection of small, simple strategies for Freqtrade. Simply add the strategy you choose in your strategies folder and run. ⚠️ General Crypt

Shane Jones 118 Dec 14, 2022
A faster Python generator that get function results from multi-process workers

multiyield This package implements a Python generator that get function results from multi-process workers. The faster_fifo Queue (instead of the stan

Xin Du 1 Nov 18, 2021
Keep your company's passwords behind the firewall

TeamVault TeamVault is an open-source web-based shared password manager for behind-the-firewall installation. It requires Python 3.3+ and Postgres (wi

//SEIBERT/MEDIA GmbH 38 Feb 20, 2022
Video Stream is an Advanced Telegram Bot that's allow you to play Video & Music on Telegram Group Video Chat

Video Stream is an Advanced Telegram Bot that's allow you to play Video & Music on Telegram Group Video Chat 📊 Stats 🧪 Get SESSION_NAME from below:

dark phoenix 12 May 08, 2022