]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/dnsmasq/0053-Log-parsing-utils-in-contrib-reverse-dns.patch
collectd: Fix typo in "derive"
[ipfire-2.x.git] / src / patches / dnsmasq / 0053-Log-parsing-utils-in-contrib-reverse-dns.patch
CommitLineData
6644c1c7
MT
1From 47b9ac59c715827252ae6e6732903c3dabb697fb Mon Sep 17 00:00:00 2001
2From: Joachim Zobel <jz-2014@heute-morgen.de>
3Date: Mon, 23 Feb 2015 21:38:11 +0000
4Subject: [PATCH 53/55] Log parsing utils in contrib/reverse-dns
5
6---
7 contrib/reverse-dns/README | 18 ++++++++++++++++++
8 contrib/reverse-dns/reverse_dns.sh | 29 +++++++++++++++++++++++++++++
9 contrib/reverse-dns/reverse_replace.sh | 28 ++++++++++++++++++++++++++++
10 3 files changed, 75 insertions(+)
11 create mode 100644 contrib/reverse-dns/README
12 create mode 100644 contrib/reverse-dns/reverse_dns.sh
13 create mode 100644 contrib/reverse-dns/reverse_replace.sh
14
15diff --git a/contrib/reverse-dns/README b/contrib/reverse-dns/README
16new file mode 100644
17index 000000000000..f87eb77c4c22
18--- /dev/null
19+++ b/contrib/reverse-dns/README
20@@ -0,0 +1,18 @@
21+Hi.\r
22+\r
23+To translate my routers netstat-nat output into names that actually talk\r
24+to me I have started writing to simple shell scripts. They require \r
25+\r
26+log-queries\r
27+log-facility=/var/log/dnsmasq.log\r
28+\r
29+to be set. With\r
30+\r
31+netstat-nat -n -4 | reverse_replace.sh \r
32+\r
33+I get retranslated output.\r
34+\r
35+Sincerely,\r
36+Joachim\r
37+\r
38+\r
39diff --git a/contrib/reverse-dns/reverse_dns.sh b/contrib/reverse-dns/reverse_dns.sh
40new file mode 100644
41index 000000000000..c0fff300a947
42--- /dev/null
43+++ b/contrib/reverse-dns/reverse_dns.sh
44@@ -0,0 +1,29 @@
45+#!/bin/bash
46+# $Id: reverse_dns.sh 4 2015-02-17 20:14:59Z jo $
47+#
48+# Usage: reverse_dns.sh IP
49+# Uses the dnsmasq query log to lookup the name
50+# that was last queried to return the given IP.
51+#
52+
53+IP=$1
54+qmIP=`echo $IP | sed 's#\.#\\.#g'`
55+LOG=/var/log/dnsmasq.log
56+
57+IP_regex='^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'
58+
59+if ! [[ $IP =~ $IP_regex ]]; then
60+ echo -n $IP
61+ exit
62+fi
63+
64+NAME=`tac $LOG | \
65+ grep " is $IP" | head -1 | \
66+ sed "s#.* \([^ ]*\) is $qmIP.*#\1#" `
67+
68+if [ -z "$NAME" ]; then
69+ echo -n $IP
70+else
71+ echo -n $NAME
72+fi
73+
74diff --git a/contrib/reverse-dns/reverse_replace.sh b/contrib/reverse-dns/reverse_replace.sh
75new file mode 100644
76index 000000000000..a11c164b7f19
77--- /dev/null
78+++ b/contrib/reverse-dns/reverse_replace.sh
79@@ -0,0 +1,28 @@
80+#!/bin/bash
81+# $Id: reverse_replace.sh 4 2015-02-17 20:14:59Z jo $
82+#
83+# Usage e.g.: netstat -n -4 | reverse_replace.sh
84+# Parses stdin for IP4 addresses and replaces them
85+# with names retrieved by reverse_dns.sh
86+#
87+
88+DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
89+DNS=$DIR/reverse_dns.sh
90+
91+# sed regex
92+IP_regex='[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
93+
94+while read LINE; do
95+ if grep --quiet $IP_regex <<< "$LINE"; then
96+ IPs=`sed "s#.*\b\($IP_regex\)\b.*#\1 #g" <<< "$LINE"`
97+ IPs=($IPs)
98+ for IP in "${IPs[@]}"
99+ do
100+ NAME=`$DNS $IP`
101+ # echo "$NAME is $IP";
102+ LINE="${LINE/$IP/$NAME}"
103+ done
104+ fi
105+ echo $LINE
106+done < /dev/stdin
107+
108--
1092.1.0
110