lookup.js 778 B

1234567891011121314151617181920212223
  1. const { create, parse } = require('dns.js')
  2. const { udp, net } = just
  3. const { loop } = just.factory
  4. const dnsServer = just.env().DNS_SERVER || '127.0.0.11'
  5. function lookup (query = 'www.google.com', onRecord = () => {}, address = dnsServer, port = 53, buf = new ArrayBuffer(65536)) {
  6. const fd = net.socket(net.AF_INET, net.SOCK_DGRAM | net.SOCK_NONBLOCK, 0)
  7. net.bind(fd, address, port)
  8. loop.add(fd, (fd, event) => {
  9. const answer = []
  10. const len = udp.recvmsg(fd, buf, answer)
  11. const [address, port] = answer
  12. const message = { length: len, address, port, message: parse(buf, len) }
  13. loop.remove(fd)
  14. net.close(fd)
  15. onRecord(message)
  16. })
  17. const len = create(query, buf, 1)
  18. udp.sendmsg(fd, buf, address, port, len)
  19. }
  20. module.exports = { lookup }