#!/usr/bin/env lua local ubus = require "ubus" local fs = require "nixio.fs" local conn = ubus.connect() if not conn then error("Failed to connect to ubus") return end local args = "-n" local duration = "" if arg[1] ~= nil then args = arg[1] if arg[2] ~= "" then duration = arg[2] end end local filter = fs.stat("/tmp/tcpdump_filter") if filter then args = args .. " -F /tmp/tcpdump_filter" end local ubus_objects = { tcpdump = { } } conn:add( ubus_objects ) os.execute("sleep 1") local command = "tcpdump -l " .. args .. " 2>&1" if duration ~= "" then command = "timeout " .. duration .. " " .. command end local pipe = io.popen(command) for line in pipe:lines() do local params = { data = line } conn:notify(ubus_objects.tcpdump.__ubusobj, "tcpdump.data", params) end local pcap = fs.stat("/tmp/capture.pcap0") if pcap then fs.move("/tmp/capture.pcap0","/tmp/capture.pcap") fs.remove("/tmp/capture.pcap1") end if filter then fs.remove("/tmp/tcpdump_filter") end conn:close() pipe:close() fs.remove("/var/run/packet_capture.pid")