utils.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. const { promisify } = require('util')
  2. const dns = require('dns')
  3. const lookup = promisify(dns.lookup)
  4. const request = require('request')
  5. // https://www.torproject.org/projects/tordnsel.html.en
  6. // check if request comes from tor
  7. const fromTor = async (req, res, next) => {
  8. const sourceIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress
  9. const ip = sourceIp.split('.').reverse().join('.')
  10. const serverIp = '51.68.126.235'.split('.').reverse().join('.')
  11. const domain = `${ip}.80.${serverIp}.ip-port.exitlist.torproject.org`
  12. try {
  13. const ret = await lookup(domain, {})
  14. req.fromTor = (ret.address === '127.0.0.2')
  15. } catch(e) {
  16. req.fromTor = false
  17. }
  18. next()
  19. }
  20. // check if request comes from proxy/VPN/tor
  21. const fromVpn = async (req, res, next) => {
  22. const sourceIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress
  23. const baseUrl = 'https://check.getipintel.net/check.php?ip='
  24. const url = `${baseUrl}${sourceIp}&contact=anna@fugadalcontrollo.org`
  25. console.log(url);
  26. request(url,
  27. (err, res, body) => {
  28. if (!err && res.statusCode === 200) {
  29. console.log(body)
  30. } else {
  31. console.log(err, body)
  32. }
  33. })
  34. }
  35. module.exports = { fromTor, fromVpn }