summaryrefslogtreecommitdiffstats
path: root/examples/dumpdns2pcap.lua
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2021-03-13 07:54:12 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2021-03-13 07:54:12 +0000
commit4754ed45b607e82450a5e31fea1da3ba61433b04 (patch)
tree3554490bdc003e6004f605abe41929cdf98b0651 /examples/dumpdns2pcap.lua
parentInitial commit. (diff)
downloaddnsjit-4754ed45b607e82450a5e31fea1da3ba61433b04.tar.xz
dnsjit-4754ed45b607e82450a5e31fea1da3ba61433b04.zip
Adding upstream version 1.1.0+debian.upstream/1.1.0+debian
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'examples/dumpdns2pcap.lua')
-rwxr-xr-xexamples/dumpdns2pcap.lua38
1 files changed, 38 insertions, 0 deletions
diff --git a/examples/dumpdns2pcap.lua b/examples/dumpdns2pcap.lua
new file mode 100755
index 0000000..08656cc
--- /dev/null
+++ b/examples/dumpdns2pcap.lua
@@ -0,0 +1,38 @@
+#!/usr/bin/env dnsjit
+local pcap_in = arg[2]
+local pcap_out = arg[3]
+
+if pcap_in == nil or pcap_out == nil then
+ print("usage: "..arg[1].." <pcap in> <pcap out>")
+ return
+end
+
+local object = require("dnsjit.core.objects")
+local input = require("dnsjit.input.pcap").new()
+local layer = require("dnsjit.filter.layer").new()
+local dns = require("dnsjit.core.object.dns").new()
+local output = require("dnsjit.output.pcap").new()
+
+input:open_offline(pcap_in)
+layer:producer(input)
+local producer, ctx = layer:produce()
+
+output:open(pcap_out, input:linktype(), input:snaplen())
+local receiver, rctx = output:receive()
+
+local n = 0
+while true do
+ local obj = producer(ctx)
+ if obj == nil then break end
+ local pl = obj:cast()
+ if obj:type() == "payload" and pl.len > 0 then
+ dns.obj_prev = obj
+ if dns:parse_header() == 0 then
+ receiver(rctx, obj)
+ n = n + 1
+ end
+ end
+end
+
+output:close()
+print(n, "DNS packets dumped")