Implementation of socks 5 version on node js
npm install socks-proxy-v5Implementation of socks 5 version on node js
Does't support ipv6 address and udp/bind methods
+ Node.js v16.0+
```
npm install socks-proxy-v5
- [ ] IPV6 support
- [ ] UDP ASSOCIATE
- [ ] BIND
javascript
const { createServer } = require("socks-proxy-v5");const server = createServer();
server.listen(1080); // any port
`$3
` javascript
const { createServer } = require("socks-proxy-v5");const server = createServer({
authenticate(login, password) {
// verify name/password
if (login !== "foo" || password !== "bar") {
console.log("authentication failed", login);
return false;
// authentication failed
}
console.log(
user ${login} connect);
// return successful authentication
return true;
}
});server.listen(1080);
`$3
`javascript
const { createServer } = require("socks-proxy-v5");const setAddr = new Set(["tools.ietf.org", "github.com", "2ip.ru"]);
const server = createServer({
filter(addr) {
const result = !setAddr.has(addr);
if(!result) console.log(
host ${addr} unreachable);
return result;
}
});
`$3
`options` - is an object that describes how to use a proxy server. (`optional`)+ __timeout__ - type
`number`. Sets the socket to timeout after timeout milliseconds of inactivity on the socket. Default set 2 minute. If timeout is 0, then the existing idle timeout is disabled
`javascript
const { createServer } = require("socks-proxy-v5");
const server = createServer({
timeout: 10000 // 10 second
});
`
After timeout the socket will be destroyed+ __authenticate__(login, password) - type
`function`. Have two argument type `string`.Returns `true` if the user is authenticated, else `false`
You can make queries to the database, create arrays of data, log users, you are limited only by your imagination+ __filter__(address) - type
`function`. Have one argument, type `string`. Returns `true` if the user has been filtered, else `false`
You can use regular expressions, iterating over an array, or using new data types as an example (new Set), queries to the data base$3
+ __connect__
Emitted when a socket connection is successfully established
`javascript
server.on("connect", info =>
console.log(connected to remote server at ${info.addr}:${info.port})
);
`+ __connection__
Emitted when a new connection is made. socket is an instance of net.Socket
`javascript
server.on("connection", socket => {
console.log("new socks connection", socket.remoteAddress, socket.remotePort);
});
`+ __error__
Emitted when an error occurs.
`javascript
server.on("error", error => {
console.error(error);
});
`+ __data__
Emitted when data is received. The argument data will be a Buffer or String
`javascript
server.on("data", data => console.log(data));
`+ __listening__
Emitted when the server has been bound after calling server.listen()
`javascript
server.listen(1080); server.on("listening", () => {
console.log(
server listening ${server.address().address}:${server.address().port}
);
});
``work like server.listen()