Skip to content

Commit

Permalink
upgrade pymobiledevice3 2.39.2-> 2.46.2, add command relay
Browse files Browse the repository at this point in the history
  • Loading branch information
codeskyblue committed Mar 18, 2024
1 parent 73d21fd commit cf5f70a
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 4 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ $ t3 install <URL or LocalIPA>
# screenrecord
$ t3 screenrecord out.mp4

# relay (like iproxy LOCAL_PORT DEVICE_PORT)
$ t3 relay 8100 8100
$ t3 relay 8100 8100 --source 0.0.0.0 --daemonize

# show help
$ t3 --help
```
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ readme = "README.md"

[tool.poetry.dependencies]
python = "^3.8"
pymobiledevice3 = "^2.39.2"
pymobiledevice3 = "^2.46.2"
click = "*"
pydantic = "^2.5.3"
fastapi = "*"
Expand Down
2 changes: 1 addition & 1 deletion tidevice3/cli/cli_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,6 @@ def new_func(ctx, *args, **kwargs):
return update_wrapper(new_func, func)


CLI_GROUPS = ["list", "info", "developer", "screenshot", "screenrecord", "install", "fsync", "app", "reboot", "tunneld", "runwda", "exec"]
CLI_GROUPS = ["list", "info", "developer", "screenshot", "screenrecord", "install", "fsync", "app", "reboot", "tunneld", "runwda", "relay", "exec"]
for group in CLI_GROUPS:
__import__(f"tidevice3.cli.{group}")
46 changes: 46 additions & 0 deletions tidevice3/cli/relay.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""Created on Mon Mar 18 2024 14:03:09 by codeskyblue
Ref: https://github.com/doronz88/pymobiledevice3/blob/master/pymobiledevice3/cli/usbmux.py#L32
"""

from functools import partial
import logging
import tempfile
import threading
import click
from pymobiledevice3.lockdown import LockdownClient
from pymobiledevice3.tcp_forwarder import UsbmuxTcpForwarder

from tidevice3.cli.cli_common import cli, pass_service_provider

logger = logging.getLogger(__name__)

@cli.command('relay')
@click.argument("local_port", type=click.IntRange(1, 0xffff))
@click.argument("device_port", type=click.IntRange(1, 0xffff))
@click.option('-s', '--source', default='127.0.0.1', help="source address for listening socket", show_default=True)
@click.option('-d', '--daemonize', is_flag=True)
@pass_service_provider
def relay(service_provider: LockdownClient, local_port: int, device_port: int, source: str, daemonize: bool):
"""Relay tcp connection from local to device"""
listening_event = threading.Event()
forwarder = UsbmuxTcpForwarder(service_provider.udid, device_port, local_port, listening_event=listening_event)
logger.info("Relay from %s:%d to device:%d", source, local_port, device_port)
if daemonize:
try:
from daemonize import Daemonize
except ImportError:
raise NotImplementedError('daemonizing is only supported on unix platforms')

with tempfile.NamedTemporaryFile('wt') as pid_file:
daemon = Daemonize(
app=f'forwarder {local_port}->{device_port}',
pid=pid_file.name,
action=partial(forwarder.start, source),
verbose=True)
daemon.start()
else:
forwarder.start(source)
5 changes: 3 additions & 2 deletions tidevice3/cli/tunneld.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from fastapi import FastAPI
from packaging.version import Version
from pymobiledevice3.exceptions import MuxException
from pymobiledevice3.cli.cli_common import is_admin_user

from tidevice3.cli.cli_common import cli
from tidevice3.cli.list import list_devices
Expand Down Expand Up @@ -156,8 +157,8 @@ def run_forever(self):
@click.option("--port", "port", help="listen port", default=5555)
def tunneld(pmd3_path: str, port: int):
"""start server for iOS >= 17 auto start-tunnel, function like pymobiledevice3 remote tunneld"""
if os.getuid() != 0:
logger.error("Please run as root")
if not is_admin_user():
logger.error("Please run as root(Mac) or administrator(Windows)")
sys.exit(1)

manager = DeviceManager()
Expand Down

0 comments on commit cf5f70a

Please sign in to comment.