Tether your unjailbroken iPhone to your desktop computer via USB for free*! This was inspired by iProxy, but I always had trouble getting the damn ad-hoc wifi network to work reliably.
Right now this is mainly proof-of-concept... but it works! It will let you create a SOCKS proxy running on your iPhone and mirror the socket to your local machine over USB via usbmuxd.
Getting the Code
$ git clone email@example.com:chrisballinger/Tether-iOS.git $ cd Tether-iOS $ git submodule update --init --recursive
Installing Tether (iOS)
Tether.xcodeproj and select the
Tether target and install it on your iPhone. This will start a SOCKS proxy on port
8123 on the phone, but be warned that you must keep the app in the foreground to accept new sockets. Currently the app is just a blank white screen. You can theoretically use any other SOCKS proxy app instead but I haven't tested this.
Now build the
TetherMac target and run it on your local machine. This will create a local listening socket on port
8000 that forwards everything to port
8123 on the phone over USB.
Open up Firefox and go to Preferences -> Advanced -> Network -> Manual Proxy Configuration. Important: make sure to delete the entries and ports for HTTP proxy, SSL proxy and FTP proxy or Firefox will use those instead of the SOCKS proxy settings. Enter
127.0.0.1 for SOCKS Host and
8000 for the port and make sure SOCKS v5 is selected.
Now go to
about:config in the address bar and change
true. This will make sure you resolve domain names over the SOCKS proxy instead of on your local machine.
Problems Connecting? Try this.
- Close Tether, TetherMac and Firefox.
- Open up the Tether iOS app and keep it in the foreground.
- Connect your iPhone to your computer with a USB cable.
- Open up TetherMac.
- Open up Firefox and double-check your proxy settings.
Caveats / TODO
- The interface isn't very user friendly, so it would be nice to pretty it up a bit.
- In order to install the iOS app you need a $99/yr iOS Apple Developer account, or a friend with one willing to install it for you.
- It would be nice to also tether your iPhone to your iPad via MultipeerConnectivity framework but I heard it's pretty slow in practice.
- You must keep the iOS app in the foreground to accept new connections. Once a connection has been established you can background the app for short times without interrupting your active connections by pretending to be a VoIP app.
- Not all of your internet traffic can go over a SOCKS proxy. Possible solution to investigate is tun2socks. I made some progress porting it to Mac OS X.
- This shit leaks memory all over the place.
- ProxyKit - Objective-C SOCKS 5 / RFC 1928 proxy server and socket client libraries built upon GCDAsyncSocket.
- libusbmuxd - A client library to multiplex USB connections from and to iOS devices.