write json files too
This commit is contained in:
parent
578f57bf10
commit
50cfa7d8a6
14
README.md
14
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.
|
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.
|
Options are similar to the Unix `dig` command.
|
||||||
|
|
||||||
Install
|
Install with git
|
||||||
-------
|
-------
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Install the latest of v1.x
|
||||||
npm install -g 'git+https://git@git.daplie.com/Daplie/dig.js.git#v1'
|
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
|
```bash
|
||||||
npm install -g dig.js
|
npm install -g dig.js
|
||||||
|
|
40
bin/dig.js
40
bin/dig.js
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var dnsjs = require('../../dns-lint');
|
var dnsjs = require('dns-suite');
|
||||||
var cli = require('cli');
|
var cli = require('cli');
|
||||||
cli.parse({
|
cli.parse({
|
||||||
// 'b': [ false, 'set source IP address (defaults to 0.0.0.0)', 'string' ]
|
// '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) {
|
function writeQuery(opts, query, queryAb) {
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var filename = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.query.bin';
|
var binname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.query.bin';
|
||||||
var fullpath = opts.output + '.' + filename;
|
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])) {
|
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 () {
|
fs.writeFileAsync(binpath, Buffer.from(queryAb)).then(function () {
|
||||||
console.log('wrote ' + queryAb.byteLength + ' bytes to ' + fullpath);
|
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;
|
var count = 0;
|
||||||
function writeResponse(opts, query, nb) {
|
function writeResponse(opts, query, nb, packet) {
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var filename = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.' + count + '.bin';
|
var binname = query.question[0].name + '.' + query.question[0].typeName.toLowerCase() + '.' + count + '.bin';
|
||||||
var fullpath = opts.output + '.' + filename;
|
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])) {
|
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;
|
count += 1;
|
||||||
|
|
||||||
fs.writeFileAsync(fullpath, nb).then(function () {
|
fs.writeFileAsync(binpath, nb).then(function () {
|
||||||
console.log('wrote ' + nb.length + ' bytes to ' + fullpath);
|
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) {
|
if (opts.output) {
|
||||||
console.log('');
|
console.log('');
|
||||||
writeQuery(opts, query, queryAb);
|
writeQuery(opts, query, queryAb);
|
||||||
writeResponse(opts, query, nb);
|
writeResponse(opts, query, nb, packet);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
handlers.onListening = function () {
|
handlers.onListening = function () {
|
||||||
|
|
|
@ -22,5 +22,8 @@
|
||||||
"json"
|
"json"
|
||||||
],
|
],
|
||||||
"author": "AJ ONeal <coolaj86@gmail.com> (https://coolaj86.com/)",
|
"author": "AJ ONeal <coolaj86@gmail.com> (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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue