All Projects → song940 → node-dns

song940 / node-dns

Licence: MIT license
🌐 DNS Server and Client Implementation in Pure JavaScript with no dependencies.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to node-dns

Dnsguide
A guide to writing a DNS Server from scratch in Rust
Stars: ✭ 2,226 (+470.77%)
Mutual labels:  tcp, udp, dns-server
AndroidNetMonitor
This project aims to collect and analyze traffic information of Android.(采集手机发送和接收的报文简要信息,并且根据socket记录每个报文对应哪个手机app)
Stars: ✭ 25 (-93.59%)
Mutual labels:  tcp, udp
overload
📡 Overload DoS Tool (Layer 7)
Stars: ✭ 167 (-57.18%)
Mutual labels:  tcp, udp
DoNotSend
Sending messages by hacking the DNS protocol. See website for demo server usage instructions
Stars: ✭ 93 (-76.15%)
Mutual labels:  dns-server, dns-client
RRQMSocket
TouchSocket是.Net(包括 C# 、VB.Net、F#)的一个整合性的、超轻量级的网络通信框架。包含了 tcp、udp、ssl、http、websocket、rpc、jsonrpc、webapi、xmlrpc等一系列的通信模块。一键式解决 TCP 黏分包问题,udp大数据包分片组合问题等。使用协议模板,可快速实现「固定包头」、「固定长度」、「区间字符」等一系列的数据报文解析。
Stars: ✭ 286 (-26.67%)
Mutual labels:  tcp, udp
okhoxi-serac
冰塔协议-传输层协议
Stars: ✭ 33 (-91.54%)
Mutual labels:  tcp, udp
masscanned
Let's be scanned. A low-interaction honeypot focused on network scanners and bots. It integrates very well with IVRE to build a self-hosted alternative to GreyNoise.
Stars: ✭ 50 (-87.18%)
Mutual labels:  tcp, udp
Network
C# Network Library
Stars: ✭ 237 (-39.23%)
Mutual labels:  tcp, udp
dperf
dperf is a DPDK based 100Gbps network performance and load testing software.
Stars: ✭ 1,320 (+238.46%)
Mutual labels:  tcp, udp
gnb udp over tcp
gnb_udp_over_tcp 是一个为GNB开发的通过tcp链路中转UDP分组转发的服务
Stars: ✭ 32 (-91.79%)
Mutual labels:  tcp, udp
DDoS-Script
A script written in perl for ddos ​​with automatic detection of open and vulnerable port that gives up to 1.5 gb packages / s
Stars: ✭ 30 (-92.31%)
Mutual labels:  tcp, udp
Packet Sender Mobile
iOS and Android version of Packet Sender
Stars: ✭ 58 (-85.13%)
Mutual labels:  tcp, udp
captcp
A open source program for TCP analysis of PCAP files
Stars: ✭ 110 (-71.79%)
Mutual labels:  tcp, udp
ronin-support
A support library for Ronin. Like activesupport, but for hacking!
Stars: ✭ 23 (-94.1%)
Mutual labels:  tcp, udp
Rsock
The best companion of kcptun
Stars: ✭ 242 (-37.95%)
Mutual labels:  tcp, udp
XAsyncSockets
XAsyncSockets is an efficient Python/MicroPython library of managed asynchronous sockets.
Stars: ✭ 28 (-92.82%)
Mutual labels:  tcp, udp
protocol
Easy protocol definitions in Rust
Stars: ✭ 151 (-61.28%)
Mutual labels:  tcp, udp
Pjon
PJON (Padded Jittering Operative Network) is an experimental, arduino-compatible, multi-master, multi-media network protocol.
Stars: ✭ 2,615 (+570.51%)
Mutual labels:  tcp, udp
Ssokit Qmake
A Simple & Strong Tool for TCP&UDP Debug
Stars: ✭ 231 (-40.77%)
Mutual labels:  tcp, udp
mongoose
Embedded Web Server
Stars: ✭ 8,968 (+2199.49%)
Mutual labels:  tcp, udp

dns2

NPM version Node.js CI

A DNS Server and Client Implementation in Pure JavaScript with no dependencies.

Features

  • Server and Client
  • Lot of Type Supported
  • Extremely lightweight
  • DNS over UDP, TCP, HTTPS Supported

Installation

$ npm install dns2

DNS Client (default UDP)

Lookup any records available for the domain lsong.org. DNS client will use UDP by default.

const dns2 = require('dns2');

const options = {
  // available options
  // dns: dns server ip address or hostname (string),
  // port: dns server port (number),
  // recursive: Recursion Desired flag (boolean, default true, since > v1.4.2)
};
const dns = new dns2(options);

(async () => {
  const result = await dns.resolveA('google.com');
  console.log(result.answers);
})();

Another way to instanciate dns2 UDP Client:

const { UDPClient } = require('dns2');

const resolve = UDPClient();

(async () => {
  const response = await resolve('google.com')
  console.log(response.answers);
})();

DNS Client (TCP)

Lookup any records available for the domain lsong.org. By default, DNS requests will use UDP.

const { TCPClient } = require('dns2');

const resolve = TCPClient();

(async () => {
  try {
    const response = await resolve('lsong.org')
    console.log(response.answers);
  } catch(error) {
    // some DNS servers (i.e cloudflare 1.1.1.1, 1.0.0.1) 
    // may send an empty response when using TCP
    console.log(error);
  }
})();

Client Custom DNS Server

You can pass your own DNS Server.

const { TCPClient } = require('dns2');

const resolve = TCPClient({
  dns: '1.1.1.1'
});

(async () => {
  try {
    const result = await resolve('google.com');
    console.log(result.answers);
  } catch(error) {
    console.log(error);
  }
})();

System DNS Server

You can use the first DNS server from your OS with native node dns.

const dns = require('dns');
const { TCPClient } = require('dns2');

const resolve = TCPClient({
  dns: dns.getServers()[0]
});

(async () => {
  try {
    const result = await resolve('google.com');
    console.log(result.answers);
  } catch(error) {
    console.log(error);
  }
})();

Example Server

const dns2 = require('dns2');

const { Packet } = dns2;

const server = dns2.createServer({
  udp: true,
  handle: (request, send, rinfo) => {
    const response = Packet.createResponseFromRequest(request);
    const [ question ] = request.questions;
    const { name } = question;
    response.answers.push({
      name,
      type: Packet.TYPE.A,
      class: Packet.CLASS.IN,
      ttl: 300,
      address: '8.8.8.8'
    });
    send(response);
  }
});

server.on('request', (request, response, rinfo) => {
  console.log(request.header.id, request.questions[0]);
});

server.on('requestError', (error) => {
  console.log('Client sent an invalid request', error);
});

server.on('listening', () => {
  console.log(server.addresses());
});

server.on('close', () => {
  console.log('server closed');
});

server.listen({
  // Optionally specify port, address and/or the family of socket() for udp server:
  udp: { 
    port: 5333,
    address: "127.0.0.1",
    type: "udp4",  // IPv4 or IPv6 (Must be either "udp4" or "udp6")
  },
  
  // Optionally specify port and/or address for tcp server:
  tcp: { 
    port: 5333,
    address: "127.0.0.1",
  },
});

// eventually
server.close();

Then you can test your DNS server:

$ dig @127.0.0.1 -p5333 lsong.org

Note that when implementing your own lookups, the contents of the query will be found in request.questions[0].name.

Relevant Specifications

Contributing

  • Fork this Repo first
  • Clone your Repo
  • Install dependencies by $ npm install
  • Checkout a feature branch
  • Feel free to add your features
  • Make sure your features are fully tested
  • Publish your local branch, Open a pull request
  • Enjoy hacking <3

MIT license

Copyright (c) 2016 LIU SONG [email protected] & contributors.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].