]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - contrib/ProtobufLogger.py
Merge pull request #7884 from rgacogne/rec-unittests-time-mix
[thirdparty/pdns.git] / contrib / ProtobufLogger.py
index 0983e1d437ac40318ef1c6e41cb4b31747921316..c88653ce799beee38ce4db2b032312970f9eb955 100644 (file)
@@ -30,11 +30,10 @@ class PDNSPBConnHandler(object):
                 self.printQueryMessage(msg)
             elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSResponseType:
                 self.printResponseMessage(msg)
-            # PR #3869
-            # elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSOutgoingQueryType:
-            #     self.printOutgoingQueryMessage(msg)
-            # elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSIncomingResponseType:
-            #     self.printIncomingResponseMessage(msg)
+            elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSOutgoingQueryType:
+                self.printOutgoingQueryMessage(msg)
+            elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSIncomingResponseType:
+                self.printIncomingResponseMessage(msg)
             else:
                 print('Discarding unsupported message type %d' % (msg.type))
 
@@ -67,6 +66,21 @@ class PDNSPBConnHandler(object):
                                               message.question.qType,
                                               message.question.qName))
 
+    @staticmethod
+    def getAppliedPolicyTypeAsString(polType):
+        if polType == dnsmessage_pb2.PBDNSMessage.UNKNOWN:
+            return 'Unknown'
+        elif polType == dnsmessage_pb2.PBDNSMessage.QNAME:
+            return 'QName'
+        elif polType == dnsmessage_pb2.PBDNSMessage.CLIENTIP:
+            return 'Client IP'
+        elif polType == dnsmessage_pb2.PBDNSMessage.RESPONSEIP:
+            return 'Response IP'
+        elif polType == dnsmessage_pb2.PBDNSMessage.NSDNAME:
+            return 'NS DName'
+        elif polType == dnsmessage_pb2.PBDNSMessage.NSIP:
+            return 'NS IP'
+
     def printResponse(self, message):
         if message.HasField('response'):
             response = message.response
@@ -80,6 +94,8 @@ class PDNSPBConnHandler(object):
             policystr = ''
             if response.HasField('appliedPolicy') and response.appliedPolicy:
                 policystr = ', Applied policy: ' + response.appliedPolicy
+                if response.HasField('appliedPolicyType'):
+                    policystr = policystr + ' (' + self.getAppliedPolicyTypeAsString(response.appliedPolicyType) + ')'
 
             tagsstr = ''
             if response.tags:
@@ -95,9 +111,12 @@ class PDNSPBConnHandler(object):
             for rr in response.rrs:
                 rrclass = 1
                 rdatastr = ''
+                rrudr = 0
                 if rr.HasField('class'):
                     rrclass = getattr(rr, 'class')
                 rrtype = rr.type
+                if rr.HasField('udr'):
+                    rrudr = rr.udr
                 if (rrclass == 1 or rrclass == 255) and rr.HasField('rdata'):
                     if rrtype == 1:
                         rdatastr = socket.inet_ntop(socket.AF_INET, rr.rdata)
@@ -106,11 +125,12 @@ class PDNSPBConnHandler(object):
                     elif rrtype == 28:
                         rdatastr = socket.inet_ntop(socket.AF_INET6, rr.rdata)
 
-                print("\t - %d, %d, %s, %d, %s" % (rrclass,
+                print("\t - %d, %d, %s, %d, %s, %d" % (rrclass,
                                                    rrtype,
                                                    rr.name,
                                                    rr.ttl,
-                                                   rdatastr))
+                                                   rdatastr,
+                                                   rrudr))
 
     def printSummary(self, msg, typestr):
         datestr = datetime.datetime.fromtimestamp(msg.timeSec).strftime('%Y-%m-%d %H:%M:%S')
@@ -136,25 +156,41 @@ class PDNSPBConnHandler(object):
             protostr = 'TCP'
 
         messageidstr = binascii.hexlify(bytearray(msg.messageId))
+
+        serveridstr = 'N/A'
+        if msg.HasField('serverIdentity'):
+            serveridstr = msg.serverIdentity
+
         initialrequestidstr = ''
-        # PR #3869
-        # if msg.HasField('initialRequestId'):
-        #    initialrequestidstr = ', initial uuid: ' + binascii.hexlify(bytearray(msg.initialRequestId))
+        if msg.HasField('initialRequestId'):
+            initialrequestidstr = ', initial uuid: %s ' % (binascii.hexlify(bytearray(msg.initialRequestId)))
+
         requestorstr = ''
         requestor = self.getRequestorSubnet(msg)
         if requestor:
             requestorstr = ' (' + requestor + ')'
 
-        print('[%s] %s of size %d: %s%s -> %s (%s), id: %d, uuid: %s%s' % (datestr,
-                                                                           typestr,
-                                                                           msg.inBytes,
-                                                                           ipfromstr,
-                                                                           requestorstr,
-                                                                           iptostr,
-                                                                           protostr,
-                                                                           msg.id,
-                                                                           messageidstr,
-                                                                           initialrequestidstr))
+        deviceId = binascii.hexlify(bytearray(msg.deviceId))
+        requestorId = msg.requestorId
+        nod = 0
+        if (msg.HasField('newlyObservedDomain')):
+            nod = msg.newlyObservedDomain
+
+        print('[%s] %s of size %d: %s%s -> %s (%s), id: %d, uuid: %s%s '
+                  'requestorid: %s deviceid: %s serverid: %s nod: %d' % (datestr,
+                                                    typestr,
+                                                    msg.inBytes,
+                                                    ipfromstr,
+                                                    requestorstr,
+                                                    iptostr,
+                                                    protostr,
+                                                    msg.id,
+                                                    messageidstr,
+                                                    initialrequestidstr,
+                                                    requestorId,
+                                                    deviceId,
+                                                    serveridstr,
+                                                    nod))
 
     def getRequestorSubnet(self, msg):
         requestorstr = None