#!/bin/sh . /usr/share/libubox/jshn.sh PIDFILE="/var/run/packet_capture.pid" if [ -f "$PIDFILE"];then echo "error: Packet capture is running" exit 1 fi json_load "$1" json_get_var interface interface json_get_var filter filter json_get_var duration duration json_get_var packets packets json_get_var verbose verbose json_get_var domains domains json_get_var file file args="-n" if [ "$domains" == "1" ];then args="" fi if [ -n "$interface" ];then ip a show "$interface" > /dev/null 2>&1 if [ "$?" == "1" ]; then echo "error: Incorrect format of an interface" exit 1 fi args="$args -i $interface" fi if [ -n "$packets" ];then echo "$packets" | egrep '^[0-9]*$' if [ "$?" -eq 0 ];then args="$args -c $packets" else echo "error: Incorrect packets argument" exit 1 fi fi if [ "$verbose" == "1" ];then args="$args -e" fi if [ "$file" == "1" ];then mem=$(awk '/MemTotal/ {print $2}' /proc/meminfo) args="$args -W 2 -C $((mem/(1024 * 10))) -w /tmp/capture.pcap -z /usr/libexec/packet_capture_stop" fi if [ -n "$filter" ];then tcpdump -i lo -d "$filter" >/dev/null 2>/dev/null if [ $? -eq 1 ];then echo "error: Incorrect filter argument" exit 1 fi echo "$filter" > /tmp/tcpdump_filter fi (/usr/libexec/packet_capture "$args" "$duration")& echo $! > /var/run/packet_capture.pid exit 0