diff --git a/README.md b/README.md index 47c4b6f..1273266 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,24 @@ dig.js Create and capture DNS and mDNS query and response packets to disk as binary and/or JSON. Options are similar to the Unix `dig` command. -Install +Install with git ------- ```bash +# Install the latest of v1.x npm install -g 'git+https://git@git.daplie.com/Daplie/dig.js.git#v1' ``` -If you don't have `git` installed you can also try the npm repo: +```bash +# Install exactly v1.0.0 +npm install -g 'git+https://git@git.daplie.com/Daplie/dig.js.git#v1.0.0' +``` + +Install without git +------- + +Don't have git? Well, you can also bow down to the gods of the centralized, monopolized, concentrated, *dictator*net +(as we like to call it here at Daplie Labs), if that's how you roll: ```bash npm install -g dig.js diff --git a/bin/dig.js b/bin/dig.js index 747e54e..20305d0 100755 --- a/bin/dig.js +++ b/bin/dig.js @@ -1,6 +1,6 @@ 'use strict'; -var dnsjs = require('../../dns-lint'); +var dnsjs = require('dns-suite'); var cli = require('cli'); cli.parse({ // 'b': [ false, 'set source IP address (defaults to 0.0.0.0)', 'string' ] @@ -89,30 +89,44 @@ function hexdump(ab) { function writeQuery(opts, query, queryAb) { var path = require('path'); - var filename = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.query.bin'; - var fullpath = opts.output + '.' + filename; + var binname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.query.bin'; + var jsonname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.query.json'; + var binpath = opts.output + '.' + binname; + var jsonpath = opts.output + '.' + jsonname; + var json = JSON.stringify(query, null, 2); if (-1 !== ['.', '/', '\\' ].indexOf(opts.output[opts.output.length -1])) { - fullpath = path.join(opts.output, filename); + binpath = path.join(opts.output, binname); + jsonpath = path.join(opts.output, jsonname); } - fs.writeFileAsync(fullpath, Buffer.from(queryAb)).then(function () { - console.log('wrote ' + queryAb.byteLength + ' bytes to ' + fullpath); + fs.writeFileAsync(binpath, Buffer.from(queryAb)).then(function () { + console.log('wrote ' + queryAb.byteLength + ' bytes to ' + binpath); + }); + fs.writeFileAsync(jsonpath, json).then(function () { + console.log('wrote ' + json.length + ' bytes to ' + jsonpath); }); } var count = 0; -function writeResponse(opts, query, nb) { +function writeResponse(opts, query, nb, packet) { var path = require('path'); - var filename = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.' + count + '.bin'; - var fullpath = opts.output + '.' + filename; + var binname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.' + count + '.bin'; + var jsonname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.' + count + '.json'; + var binpath = opts.output + '.' + binname; + var jsonpath = opts.output + '.' + jsonname; + var json = JSON.stringify(packet, null, 2); if (-1 !== ['.', '/', '\\' ].indexOf(opts.output[opts.output.length -1])) { - fullpath = path.join(opts.output, filename); + binpath = path.join(opts.output, binname); + jsonpath = path.join(opts.output, jsonname); } count += 1; - fs.writeFileAsync(fullpath, nb).then(function () { - console.log('wrote ' + nb.length + ' bytes to ' + fullpath); + fs.writeFileAsync(binpath, nb).then(function () { + console.log('wrote ' + nb.byteLength + ' bytes to ' + binpath); + }); + fs.writeFileAsync(jsonpath, json).then(function () { + console.log('wrote ' + json.length + ' bytes to ' + jsonpath); }); } @@ -194,7 +208,7 @@ function request(query, opts) { if (opts.output) { console.log(''); writeQuery(opts, query, queryAb); - writeResponse(opts, query, nb); + writeResponse(opts, query, nb, packet); } }; handlers.onListening = function () { diff --git a/package.json b/package.json index 95248b5..5fb2667 100644 --- a/package.json +++ b/package.json @@ -22,5 +22,8 @@ "json" ], "author": "AJ ONeal (https://coolaj86.com/)", - "license": "(MIT OR Apache-2.0)" + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "dns-suite": "git+https://git@git.daplie.com:Daplie/dns-suite#v1" + } }