123 lines
3.7 KiB
Markdown
123 lines
3.7 KiB
Markdown
# proxysocket
|
|
|
|
[![Join the chat at https://gitter.im/krisives/proxysocket](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/krisives/proxysocket?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
|
|
`proxysocket` is a nodejs module for seamlessly making socket connections via a
|
|
SOCKS5 proxy. Use it in place of a regular `net.Socket` to easily talk over
|
|
Tor or an SSH tunnel.
|
|
|
|
## Install
|
|
|
|
Available on npm for easy install:
|
|
|
|
npm install proxysocket
|
|
|
|
You can also download a [release](https://github.com/krisives/proxysocket/releases) manually and
|
|
extract it as `proxysocket` has no dependencies.
|
|
|
|
## Usage
|
|
|
|
Because `proxysocket` provides the same API as a regular `net.Socket` object
|
|
you can use it in many places where sockets and streams are used.
|
|
|
|
### Making a Socket
|
|
|
|
Create a new socket that will use the proxy:
|
|
|
|
var proxysocket = require('proxysocket');
|
|
var socket = proxysocket.create('localhost', 9050);
|
|
|
|
The returned object behaves like an ordinary `net.Socket` object.
|
|
For example, you can call `connect()` or listen for events:
|
|
|
|
socket.connect(80, 'website.com', function () {
|
|
// Connected
|
|
});
|
|
|
|
socket.on('data', function (data) {
|
|
// Receive data
|
|
});
|
|
|
|
Also note if you're using Tor it's fine to pass `.onion` hosts:
|
|
|
|
socket.connect(6667, 'p4fsi4ockecnea7l.onion');
|
|
|
|
|
|
### Making HTTP Requests
|
|
|
|
You can use `proxysocket.createAgent()` to create an object
|
|
like `http.Agent` which will make proxy sockets for you when using
|
|
`http.request()`. Here is an example:
|
|
|
|
var proxysocket = require('proxysocket');
|
|
var http = require('http');
|
|
var agent = proxysocket.createAgent();
|
|
|
|
http.request({
|
|
host: 'foo.com',
|
|
agent: agent
|
|
});
|
|
|
|
### Chaining
|
|
|
|
It's fine to pass one proxysocket to another:
|
|
```js
|
|
var socket1 = proxysocket.create('socks1addr', 9050)
|
|
var socket2 = proxysocket.create('socks2addr', 9050, socket1)
|
|
|
|
socket2.connect(80, 'example.com', function () {
|
|
// connected
|
|
})
|
|
```
|
|
The resulting chain:
|
|
socksaddr1:9050 -> socksaddr2:9050 -> example.com
|
|
|
|
## API
|
|
|
|
### proxysocket.create(socksHost, socksPort, socket)
|
|
|
|
Create a new socket object that uses a SOCKS5 proxy provided.
|
|
|
|
* `socksHost` is the host of the proxy. Default is `localhost`
|
|
* `socksPort` is the port of the proxy. Default is `9050`
|
|
* `socket` can be an existing `net.Socket` object or any object with
|
|
the same interface (e.g. `proxysocket`). Default is a `new Socket()`
|
|
|
|
### proxysocket.createAgent(socksHost, socksPort)
|
|
|
|
Returns an object like `http.Agent` which makes new sockets
|
|
using `proxysocket.create()` as needed.
|
|
|
|
### socket
|
|
|
|
The object returned from `proxysocket.create()` is just like a regular
|
|
`net.Socket`. This documentation lists additions to the API.
|
|
|
|
*Note This documentation doesn't list all of the methods, properties,
|
|
or events of `net.Socket`, `Readable` or `Writable`. See the nodejs
|
|
API reference for those modules.*
|
|
|
|
### socket.socksHost
|
|
|
|
Get the host address of the proxy. By default this will be `localhost`.
|
|
|
|
### socket.socksPort
|
|
|
|
Get the port of the proxy. By default this will be `9050`.
|
|
|
|
### socket.realSocket
|
|
|
|
Get the underlying raw `net.Socket` connection to the proxy. You don't need
|
|
to use this and instead should listen on `this` socket instead.
|
|
|
|
### socket 'socksdata' event
|
|
|
|
`socksdata` is emitted whenever underlying data is received from the proxy
|
|
before the socket is ready for use. This is mainly here for debugging and you
|
|
should use the `data` event instead.
|
|
|
|
## Contributing
|
|
|
|
Please fork and make a pull request if you have anything cool to add. You're
|
|
also welcome to join the [Gitter](https://gitter.im/krisives/proxysocket?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) chat.
|