tor.js 667 B

12345678910111213141516171819
  1. const { promisify } = require('util')
  2. const dns = require('dns')
  3. const lookup = promisify(dns.lookup)
  4. // https://www.torproject.org/projects/tordnsel.html.en
  5. // check if request comes from tor
  6. module.exports = async (req, res, next) => {
  7. const source_ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress
  8. const ip = source_ip.split('.').reverse().join('.')
  9. const server_ip = '51.68.126.235'.split('.').reverse().join('.')
  10. const domain = `${ip}.80.${server_ip}.ip-port.exitlist.torproject.org`
  11. try {
  12. const ret = await lookup(domain, {})
  13. req.fromTor = (ret.address === '127.0.0.2')
  14. } catch(e) {
  15. req.fromTor = false
  16. }
  17. next()
  18. }