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
Myrepo - A tool to create your own Arch Linux repository

myrepo A (experimental) tool to create your own Arch Linux repository Example We

Anton Hvornum 5 Feb 19, 2022
Repository for my Monika Assistant project

Monika_Assistant Repository for my Monika Assistant project Major changes: Added face tracker Added manual daily log to see how long it takes me to fi

3 Jan 10, 2022
En este repositorio pondré archivos graciositos de python que hago de vez en cuando

🐍 Apuntes de python 🐍 ¿Quién soy? 👽 Saludos,mi nombre es Carlos Lara. Pero mi nickname en internet es Hercules Kan. Soy un programador autodidacta

Carlos E. Lara 3 Nov 16, 2021
An application for automation of the mining function in the game Alienworlds.IO

alienautomation A Python script made to automate the tidious job of mining on AlienWorlds This script: Automatically opens the browser Automatically l

anonieXdev 42 Dec 03, 2022
Random Turkish name generator with realistic probabilities.

trnames Random Turkish name generator with realistic probabilities. Based on Trey Hunner's names package. Installation The package can be installed us

Kaan Öztürk 20 Jan 02, 2023
Software that extracts spreadsheets from various .pdf files to .csv

Extração de planilhas de diversos arquivos .pdf para .csv O código inteiro foi desenvolvido em Python. Foi utilizado o pacote "tabula" e a biblioteca

Marcos Silva 2 Jan 09, 2022
A simple method to create strong password.

A simple method to create strong password.

1 Jan 23, 2022
Includes Chapters for Python Crash Course session.

python-crash-course Includes Chapters for Python Crash Course session. What will you learn: Python Essentials Creating Server Writing REST API Writing

Vineet Rao 3 Feb 17, 2021
Arcpy Tool developed for ArcMap 10.x that checks DVOF points against TDS data and creates an output feature class as well as a check database.

DVOF_check_tool Arcpy Tool developed for ArcMap 10.x that checks DVOF points against TDS data and creates an output feature class as well as a check d

3 Apr 18, 2022
Live tracking, flight database and competition framework

SkyLines SkyLines is a web platform where pilots can share their flights with others after, or even during flight via live tracking. SkyLines is a sor

SkyLines 367 Dec 27, 2022
In this repo, I will put all the code related to data science using python libraries like Numpy, Pandas, Matplotlib, Seaborn and many more.

Python-for-DS In this repo, I will put all the code related to data science using python libraries like Numpy, Pandas, Matplotlib, Seaborn and many mo

1 Jan 10, 2022
A simple script that can watch a list of directories for change and does some action

plot_watcher A simple script that can watch a list of directories and does some action when a specific kind of change happens In its current implement

Charaf Errachidi 12 Sep 10, 2021
This is a Python package named - calculator

Calculator Python Package This is a Calculator Package of Python. How To Install The Package? Install calchundred with pip (Package Installer Of Pytho

Arinjoy_Programmer 1 Nov 21, 2021
User management system (UMS), has the primary purpose of connecting to an Active Directory (AD)

💿 Sistema de Gerenciamento de Usuário (SGU) 📚 Sobre o projeto Sistema de gerenciamento de usuários (SGU), tem o objetivo primário de se conectar a u

Patrick Viegas 2 Feb 25, 2022
TMTC Commander Core

This commander application was first developed by KSat for the SOURCE project to test the on-board software but has evolved into a more generic tool for satellite developers to perform TMTC (Telemetr

robamu 8 Dec 14, 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

PyDy 307 Jan 01, 2023
Return-Parity-MDP - Towards Return Parity in Markov Decision Processes

Towards Return Parity in Markov Decision Processes Code for the AISTATS 2022 pap

Jianfeng Chi 3 Nov 27, 2022
Macros in Python: quasiquotes, case classes, LINQ and more!

MacroPy3 1.1.0b2 MacroPy is an implementation of Syntactic Macros in the Python Programming Language. MacroPy provides a mechanism for user-defined fu

Li Haoyi 3.2k Jan 06, 2023
Open-source library for analyzing the results produced by ABINIT

Package Continuous Integration Documentation About AbiPy is a python library to analyze the results produced by Abinit, an open-source program for the

ABINIT 91 Dec 09, 2022
Tools Elit Adalah Sebuah Script Crack Yang Wajib Tap Yes...

Tools Elit Adalah Sebuah Script Crack Yang Wajib Tap Yes...

Risky [ Zero Tow ] 10 Apr 07, 2022