{"id":16975254,"url":"https://github.com/matiasinsaurralde/transports","last_synced_at":"2025-03-17T08:38:02.407Z","repository":{"id":64553917,"uuid":"59794664","full_name":"matiasinsaurralde/transports","owner":"matiasinsaurralde","description":"A HTTP proxy that aims to support different transports.","archived":false,"fork":false,"pushed_at":"2017-03-29T13:22:19.000Z","size":301,"stargazers_count":112,"open_issues_count":4,"forks_count":8,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-03-15T07:55:04.041Z","etag":null,"topics":["golang","proxy","security","tor","transport"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matiasinsaurralde.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-05-27T01:32:18.000Z","updated_at":"2024-12-10T09:36:53.000Z","dependencies_parsed_at":"2022-12-16T03:06:19.017Z","dependency_job_id":null,"html_url":"https://github.com/matiasinsaurralde/transports","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matiasinsaurralde%2Ftransports","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matiasinsaurralde%2Ftransports/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matiasinsaurralde%2Ftransports/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matiasinsaurralde%2Ftransports/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matiasinsaurralde","download_url":"https://codeload.github.com/matiasinsaurralde/transports/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243853658,"owners_count":20358454,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","proxy","security","tor","transport"],"created_at":"2024-10-14T01:09:37.089Z","updated_at":"2025-03-17T08:38:02.038Z","avatar_url":"https://github.com/matiasinsaurralde.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# transports\n\n[![wercker status](https://app.wercker.com/status/8e1b0669d07cb25706624d2c2e7619e6/s/master \"wercker status\")](https://app.wercker.com/project/bykey/8e1b0669d07cb25706624d2c2e7619e6)\n[![Join the chat at https://gitter.im/matiasinsaurralde/transports](https://badges.gitter.im/matiasinsaurralde/transports.svg)](https://gitter.im/matiasinsaurralde/transports?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\nA HTTP proxy that aims to support different transports.\n\n## Motivation\n\nI started the [facebook tunnel](https://github.com/matiasinsaurralde/facebook-tunnel) project two years ago and I thought that it could be better to follow a modular approach for supporting other services (chat systems, platforms, *gram, *book?).\n\nThis repository includes some code to explore the idea.\n\n### Why not a TCP/UDP tunnel?\n\nAt this time I'm not planning tuntap support (like I did in the previous project). I would like to focus on the transports. Also, I think that a HTTP proxy is easier to port and run, especially when considering that the project is built on Golang, where the output is a static binary. For example, it'll be very easy to build a binary for ARM.\n\n## Available transports\n\nI've been working on these transports during the past week:\n\n### Facebook Transport (early stage, sorry!)\n\nThis transport uses [surf](https://github.com/headzoo/surf), a stateful web browser built in Go.\n\nLoad your credentials by using ```export``` or the ```.env``` file:\n\n```\nFB_LOGIN=youraccount@facebook.com\nFB_PASSWORD=supersecretpass\nFB_FRIEND=yourtunnelfriend\n```\n\nI'm looking for collaborators from countries where the [Internet.org](https://info.internet.org/en/) campaigns like \"Free Basics\" are active, they could benefit from it :)\n\n### Whatsapp Transport (status: you can perform some GETs)\n\nThis transport uses a [HTTP wrapper](https://github.com/matiasinsaurralde/yowsup-http-wrapper) for [yowsup](https://github.com/tgalal/yowsup) to send/receive Whatsapp messages.\n\nI recorded this small video, showing some interactions with this transport. For the demonstration I point my browser to the proxy and perform a test request to Akamai, the communication happens between two Whatsapp clients running on the same computer:\n\n[![Whatsapp Transport](https://img.youtube.com/vi/5KhS7fueK9k/0.jpg)](http://bit.ly/1TTu9wo)\n\nIt would be good to have a \"pure Golang\" Whatsapp library but I think the current approach is fine for experimentation (anyone considering writing this?).\n\nThe following environment variables are used:\n\n```\nWA_CLIENT_LOGIN=123412341\nWA_CLIENT_PASSWORD=whatsappgeneratedpassword123\nWA_CLIENT_CONTACT=43214321\n\nWA_SERVER_LOGIN=123412341\nWA_SERVER_PASSWORD=whatsappgeneratedpassword123\n```\n\n**Requires Python 3**\n\n## Marshalers\n\nI'm working on providing a [set of \"marshalers\" and a simple API to combine them](https://github.com/matiasinsaurralde/transports/tree/master/marshalers), this could be useful for conducting network/system usage benchmark experiments \u0026 performing a good choice.\n\n[Protocol buffers](https://github.com/google/protobuf) sound like a good option, instead of JSON (which is what I'm actually using for the Whatsapp transport). Also [brotli](https://github.com/google/brotli) looks promising. A combination of these two is a very interesting thing to consider.\n\n## Tor support\n\nThere's a Tor integration idea for the server side, I've did a few tests with it, under the following scenario:\n\n![Tor Diagram](docs/tor_diagram.png)\n\nThe [Whatsapp transport](https://github.com/matiasinsaurralde/transports/blob/master/transport_whatsapp.go) includes a flag to enable Tor (```UseTor```), I'm expecting to extend this flag to any transport.\n\nThe Tor support is achieved by overriding the default ```http.Transport``` dialer with a [custom one](https://github.com/matiasinsaurralde/transports/blob/master/transport.go#L24).\n\n## Ideas/to-do\n\n* Handle SSL.\n* Extend the test coverage.\n* Think about some way of debugging the transports/traffic.\n* Run basic tests in additional platforms (e.g. ARM).\n* Plan strategies for mobile support, Golang is doing [great progress](https://github.com/golang/go/wiki/Mobile) on this.\n* Multiplexing\n\n## Contributors\n\n* [Matias Insaurralde](https://github.com/matiasinsaurralde)\n\n* [Carlos Carvallo](https://github.com/carloscarvallo)\n\n## License\n\n[MIT](https://github.com/matiasinsaurralde/transports/blob/master/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatiasinsaurralde%2Ftransports","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatiasinsaurralde%2Ftransports","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatiasinsaurralde%2Ftransports/lists"}