Skip to content

Instantly share code, notes, and snippets.

@acba
Created October 5, 2020 16:32
Show Gist options
  • Save acba/d45989a573d93e9d4bef79292b8a1190 to your computer and use it in GitHub Desktop.
Save acba/d45989a573d93e9d4bef79292b8a1190 to your computer and use it in GitHub Desktop.
Typescript version of a estliberitas script to reset Tor IP
const net = require('net');
class TorService {
private host;
private port;
constructor(host = '127.0.0.1', port = 9051) {
this.host = host;
this.port = port;
}
async reset() {
const socket = new net.Socket({ allowHalfOpen: false });
try {
await this.connect(socket);
await this.write(socket, 'AUTHENTICATE');
await this.write(socket, 'signal NEWNYM');
socket.destroy();
return true;
} catch (error) {
socket.destroy();
return false;
}
}
private write(socket, cmd) {
return new Promise((resolve, reject) => {
if (!socket.writable) {
reject(new Error('Socket is not writable'));
}
socket.removeAllListeners('error');
socket.removeAllListeners('data');
socket.once('data', function(data) {
const res = data.toString().replace(/[\r\n]/g, '');
const tokens = res.split(' ')
const code = parseInt(tokens[0]);
if (code !== 250) {
reject(new Error(res));
} else {
resolve(true);
}
});
socket.once('err', reject);
socket.write(cmd + '\r\n');
})
}
private connect(sock) {
return new Promise((resolve, reject) => {
sock.once('connect', resolve);
sock.once('error', reject);
sock.connect(this.port, this.host);
})
}
}
export const tors = new TorService();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment