diff options
author | Daniil Baturin <daniil@baturin.org> | 2018-05-15 02:55:13 +0200 |
---|---|---|
committer | Daniil Baturin <daniil@baturin.org> | 2018-05-15 02:55:13 +0200 |
commit | ae0b5e5d142c03b2df544774aead9887d5610bf2 (patch) | |
tree | a66ed85ff1b0563304933ae8be09fd5fd4fcfd2a | |
parent | ddca0778f36266ce2416a064833410afeeb202d0 (diff) | |
download | vyos-1x-ae0b5e5d142c03b2df544774aead9887d5610bf2.tar.gz vyos-1x-ae0b5e5d142c03b2df544774aead9887d5610bf2.zip |
T637: new op mode for traffic dumps based on tcpdump.
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | op-mode-definitions/traffic-dump.xml | 45 | ||||
-rwxr-xr-x | src/op-mode/vyos-list-dumpable-interfaces.py | 14 | ||||
-rwxr-xr-x | src/op-mode/vyos-list-interfaces.py | 8 |
4 files changed, 68 insertions, 0 deletions
@@ -26,6 +26,7 @@ op_mode_definitions: rm -f $(OP_TMPL_DIR)/show/dns/node.def rm -f $(OP_TMPL_DIR)/reset/node.def rm -f $(OP_TMPL_DIR)/restart/node.def + rm -f $(OP_TMPL_DIR)/monitor/node.def .PHONY: all all: interface_definitions op_mode_definitions diff --git a/op-mode-definitions/traffic-dump.xml b/op-mode-definitions/traffic-dump.xml new file mode 100644 index 000000000..be53f866b --- /dev/null +++ b/op-mode-definitions/traffic-dump.xml @@ -0,0 +1,45 @@ +<?xml version="1.0"?> +<interfaceDefinition> + <node name="monitor"> + <children> + <node name="traffic"> + <properties> + <help>Monitor traffic dumps</help> + </properties> + <children> + <tagNode name="interface"> + <command>tcpdump -i $4</command> + <properties> + <help>Monitor traffic dump from an interface</help> + <completionHelp> + <script>${vyos_bindir}/vyos-list-dumpable-interfaces.py</script> + </completionHelp> + </properties> + <children> + <tagNode name="filter"> + <command>tcpdump -n -i $4 $6</command> + <properties> + <help>Monitor traffic matching filter conditions</help> + </properties> + </tagNode> + <tagNode name="save"> + <command>tcpdump -n -i $4 -w $6</command> + <properties> + <help>Save traffic dump from an interface to a file</help> + </properties> + <children> + <tagNode name="filter"> + <command>tcpdump -n -i $4 -w $6 $8</command> + <properties> + <help>Save a dump of traffic matching filter conditions to a file</help> + </properties> + </tagNode> + </children> + </tagNode> + </children> + </tagNode> + </children> + </node> + </children> + </node> +</interfaceDefinition> diff --git a/src/op-mode/vyos-list-dumpable-interfaces.py b/src/op-mode/vyos-list-dumpable-interfaces.py new file mode 100755 index 000000000..53ee89633 --- /dev/null +++ b/src/op-mode/vyos-list-dumpable-interfaces.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 + +# Extract the list of interfaces available for traffic dumps from tcpdump -D + +import re +import subprocess + +if __name__ == '__main__': + out = subprocess.check_output(['/usr/sbin/tcpdump', '-D']).decode().strip() + out = out.split("\n") + + intfs = " ".join(map(lambda s: re.search(r'\d+\.(\S+)\s', s).group(1), out)) + + print(intfs) diff --git a/src/op-mode/vyos-list-interfaces.py b/src/op-mode/vyos-list-interfaces.py new file mode 100755 index 000000000..59c9dffad --- /dev/null +++ b/src/op-mode/vyos-list-interfaces.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python3 + +import netifaces + +if __name__ == '__main__': + interfaces = netifaces.interfaces() + + print(" ".join(interfaces)) |