[prev in list] [next in list] [prev in thread] [next in thread] 

List:       unbound-users
Subject:    [Unbound-users] Generating NAPTR Responses with Python Module
From:       Jeremy Shaffner <jeremy () convorelay ! com>
Date:       2013-10-29 17:36:19
Message-ID: CAMjnyc99qFNnGpp5FbaZrMnXzO7SrJyr2SzkX5Vod==8hYhD6g () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Greetings,

I'm trying to use the Python module to generate NAPTR responses.  Starting
with the unmodified resgen.py example script, it correctly responds to A
type queries, but when trying NAPTR, it does not work.

I've made the following changes to the script:

 def operate(id, event, qstate, qdata):
     if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS):
-        if (qstate.qinfo.qname_str.endswith(".localdomain.")): #query name
ends with localdomain
+        if (qstate.qinfo.qname_str.endswith(".example.e164.arpa.")):
#query name ends with example.e164.arpa
             #create instance of DNS message (packet) with given parameters
-            msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A,
RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA)
+            msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_NAPTR,
RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA)
             #append RR
-            if (qstate.qinfo.qtype == RR_TYPE_A) or (qstate.qinfo.qtype ==
RR_TYPE_ANY):
-                msg.answer.append("%s 10 IN A 127.0.0.1" %
qstate.qinfo.qname_str)
+            if (qstate.qinfo.qtype == RR_TYPE_NAPTR):
+                log_info("pythonmod: Got NAPTR request")
+                response = "5 IN NAPTR 5 10 \"u\" \"E2U+sip\"
\"!^(.*)$!sip:\\\\1@99.99.99.99!\""
+                msg.answer.append("%s %s" %
(qstate.qinfo.qname_str,response))
             #set qstate.return_msg
             if not msg.set_return_msg(qstate):
                 qstate.ext_state[id] = MODULE_ERROR
@@ -55,6 +22,7 @@
             #we don't need validation, result is valid
             qstate.return_msg.rep.security = 2

+            log_info("pythonmod:  Returning answer")
             qstate.return_rcode = RCODE_NOERROR
             qstate.ext_state[id] = MODULE_FINISHED
             return True


This is the log for a test query:

Oct 29 10:28:03 chai unbound: [3598:0] info: 192.168.50.2
0.9.8.7.6.5.4.3.2.1.1.example.e164.arpa. NAPTR IN
Oct 29 10:28:03 chai unbound: [3598:0] info: pythonmod: Got NAPTR request
Oct 29 10:28:03 chai unbound: [3598:0] info: storeResponse: packet: ;;
->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 0#012;; flags: qr aa ra ;
QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 #012;; QUESTION
SECTION:#012;; 0.9.8.7.6.5.4.3.2.1.1.example.e164.arpa
#011IN#011NAPTR#012#012;;
ANSWER SECTION:#012#012;; AUTHORITY SECTION:#012#012;; ADDITIONAL
SECTION:#012#012;; Query time: 0 msec#012;; WHEN: Thu Jan  1 00:00:00
1970#012;; MSG SIZE  rcvd: 47
Oct 29 10:28:03 chai unbound: [3598:0] info: pythonmod:  Returning answer
Oct 29 10:28:03 chai unbound: [3598:0] info: mesh_run: end 0 recursion
states (0 with reply, 0 detached), 0 waiting replies, 1 recursion replies
sent, 0 replies dropped, 0 states jostled out
Oct 29 10:28:03 chai unbound: [3598:0] info: average recursion processing
time 0.000000 sec
Oct 29 10:28:03 chai unbound: [3598:0] info: histogram of recursion
processing times
Oct 29 10:28:03 chai unbound: [3598:0] info: [25%]=0 median[50%]=0 [75%]=0
Oct 29 10:28:03 chai unbound: [3598:0] info: lower(secs) upper(secs)
recursions
Oct 29 10:28:03 chai unbound: [3598:0] info:    0.000000    0.000001 1

And the output from dig:

dig -p 5353 @192.168.50.2 IN NAPTR 0.9.8.7.6.5.4.3.2.1.1.example.e164.arpa

; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6_2.3 <<>> -p 5353 @192.168.50.2 IN
NAPTR 0.9.8.7.6.5.4.3.2.1.1.example.e164.arpa
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19201
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
; 0.9.8.7.6.5.4.3.2.1.1.example.e164.arpa. IN NAPTR

;; Query time: 0 msec
;; SERVER: 192.168.50.2#5353(192.168.50.2)
;; WHEN: Tue Oct 29 17:28:03 2013
;; MSG SIZE  rcvd: 47



-- 
*Jeremy Shaffner*
Director of Information Technology
*cell/text* 925.480.7770
*Convo #* 240.751.4749
*email/iChat/FaceTime/Google* jeremy@convorelay.com **
****
**Convo™<http://media.convorelay.com/brand/email_sig/website.html?utm_campaign=sent-mail&utm_medium=email&utm_source=website>
  | ****convorelay.com<http://media.convorelay.com/brand/email_sig/website.html?utm_campaign=sent-mail&utm_medium=email&utm_source=website>
  |**
**
**
**
**


[Attachment #5 (text/html)]

<div dir="ltr"><div>Greetings,</div><div><br></div><div>I&#39;m trying to use the \
Python module to generate NAPTR responses.  Starting with the unmodified resgen.py \
example script, it correctly responds to A type queries, but when trying NAPTR, it \
does not work.</div> <div><br></div><div>I&#39;ve made the following changes to the \
script:</div><div><br></div><div><div> def operate(id, event, qstate, \
qdata):</div><div>     if (event == MODULE_EVENT_NEW) or (event == \
MODULE_EVENT_PASS):</div> <div>-        if \
(qstate.qinfo.qname_str.endswith(&quot;.localdomain.&quot;)): #query name ends with \
localdomain</div><div>+        if \
(qstate.qinfo.qname_str.endswith(&quot;.example.e164.arpa.&quot;)): #query name ends \
with example.e164.arpa</div> <div>             #create instance of DNS message \
(packet) with given parameters</div><div>-            msg = \
DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_QR | PKT_RA | \
PKT_AA)</div><div>+            msg = DNSMessage(qstate.qinfo.qname_str, \
RR_TYPE_NAPTR, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA)</div> <div>             #append \
RR</div><div>-            if (qstate.qinfo.qtype == RR_TYPE_A) or (qstate.qinfo.qtype \
== RR_TYPE_ANY):</div><div>-                msg.answer.append(&quot;%s 10 IN A \
127.0.0.1&quot; % qstate.qinfo.qname_str)</div> <div>+            if \
(qstate.qinfo.qtype == RR_TYPE_NAPTR):</div><div>+                \
log_info(&quot;pythonmod: Got NAPTR request&quot;)</div><div>+                \
response = &quot;5 IN NAPTR 5 10 \&quot;u\&quot; \&quot;E2U+sip\&quot; \
\&quot;!^(.*)$!sip:\\\\<a \
href="mailto:1@99.99.99.99">1@99.99.99.99</a>!\&quot;&quot;</div> <div>+              \
msg.answer.append(&quot;%s %s&quot; % (qstate.qinfo.qname_str,response))</div><div>   \
#set qstate.return_msg </div><div>             if not \
msg.set_return_msg(qstate):</div><div>                 qstate.ext_state[id] = \
MODULE_ERROR </div> <div>@@ -55,6 +22,7 @@</div><div>             #we don&#39;t need \
validation, result is valid</div><div>             qstate.return_msg.rep.security = \
2</div><div> </div><div>+            log_info(&quot;pythonmod:  Returning \
answer&quot;)</div> <div>             qstate.return_rcode = RCODE_NOERROR</div><div>  \
qstate.ext_state[id] = MODULE_FINISHED </div><div>             return \
True</div></div><div><br></div><div><div>    </div></div><div>This is the log for a \
test query:</div> <div><br></div><div><div>Oct 29 10:28:03 chai unbound: [3598:0] \
info: 192.168.50.2 0.9.8.7.6.5.4.3.2.1.1.example.e164.arpa. NAPTR IN</div><div>Oct 29 \
10:28:03 chai unbound: [3598:0] info: pythonmod: Got NAPTR request</div> <div>Oct 29 \
10:28:03 chai unbound: [3598:0] info: storeResponse: packet: ;; \
-&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, rcode: NOERROR, id: 0#012;; flags: qr aa ra ; \
QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 #012;; QUESTION SECTION:#012;; \
0.9.8.7.6.5.4.3.2.1.1.example.e164.arpa #011IN#011NAPTR#012#012;; ANSWER \
SECTION:#012#012;; AUTHORITY SECTION:#012#012;; ADDITIONAL SECTION:#012#012;; Query \
time: 0 msec#012;; WHEN: Thu Jan  1 00:00:00 1970#012;; MSG SIZE  rcvd: 47</div> \
<div>Oct 29 10:28:03 chai unbound: [3598:0] info: pythonmod:  Returning \
answer</div><div>Oct 29 10:28:03 chai unbound: [3598:0] info: mesh_run: end 0 \
recursion states (0 with reply, 0 detached), 0 waiting replies, 1 recursion replies \
sent, 0 replies dropped, 0 states jostled out</div> <div>Oct 29 10:28:03 chai \
unbound: [3598:0] info: average recursion processing time 0.000000 sec</div><div>Oct \
29 10:28:03 chai unbound: [3598:0] info: histogram of recursion processing \
times</div><div>Oct 29 10:28:03 chai unbound: [3598:0] info: [25%]=0 median[50%]=0 \
[75%]=0</div> <div>Oct 29 10:28:03 chai unbound: [3598:0] info: lower(secs) \
upper(secs) recursions</div><div>Oct 29 10:28:03 chai unbound: [3598:0] info:    \
0.000000    0.000001 1</div></div><div><br></div><div>And the output from dig:</div> \
<div><br></div><div><div>dig -p 5353 @<a href="http://192.168.50.2">192.168.50.2</a> \
IN NAPTR 0.9.8.7.6.5.4.3.2.1.1.example.e164.arpa</div><div><br></div><div>; \
&lt;&lt;&gt;&gt; DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6_2.3 &lt;&lt;&gt;&gt; -p 5353 @<a \
href="http://192.168.50.2">192.168.50.2</a> IN NAPTR \
0.9.8.7.6.5.4.3.2.1.1.example.e164.arpa</div> <div>; (1 server found)</div><div>;; \
global options: +cmd</div><div>;; Got answer:</div><div>;; -&gt;&gt;HEADER&lt;&lt;- \
opcode: QUERY, status: NOERROR, id: 19201</div><div>;; flags: qr aa rd ra; QUERY: 1, \
ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0</div> <div><br></div><div>;; QUESTION \
SECTION:</div><div>; 0.9.8.7.6.5.4.3.2.1.1.example.e164.arpa.<span class="" \
style="white-space:pre">	</span>IN<span class="" \
style="white-space:pre">	</span>NAPTR</div><div><br></div><div>;; Query time: 0 \
msec</div> <div>;; SERVER: 192.168.50.2#5353(192.168.50.2)</div><div>;; WHEN: Tue Oct \
29 17:28:03 2013</div><div>;; MSG SIZE  rcvd: \
47</div></div><div><br></div><div><br></div><div><br></div>-- <br><span \
style="border-collapse:separate"><span style="border-collapse:separate"><div \
style="word-wrap:break-word"> <span style="border-collapse:separate"><font \
face="Verdana, Geneva, sans-serif"><span style="font-size:12px"><b>Jeremy \
Shaffner</b></span></font><font face="Helvetica" size="3"> </font><br><span \
style="font-family:Verdana,Geneva,sans-serif;font-style:italic;color:rgb(153,153,153);font-size:12px">Director \
of Information Technology</span><font face="Helvetica" size="3"> </font><br> <div \
style="font-family:Helvetica;font-size:medium;border-top-style:dotted;border-top-color \
:rgb(238,238,238);width:687px;padding-bottom:5px;border-top-width:1px"></div><font \
color="#69ab39" face="Verdana, Geneva, sans-serif" \
size="1"><b>cell/text</b></font><font face="Helvetica" size="3"> </font><font \
face="Verdana, Geneva, sans-serif"><span \
style="font-size:11px">925.480.7770</span></font></span></div> <div \
style="word-wrap:break-word"><div style="word-wrap:break-word"><span \
style="border-collapse:separate"><font color="#69ab39" face="Verdana, Geneva, \
sans-serif" size="1"><b>Convo #</b></font><font face="Helvetica" size="3"> \
</font><font face="Verdana, Geneva, sans-serif"><span \
style="font-size:11px">240.751.4749</span></font></span><span \
style="font-family:Helvetica;font-size:medium"> </span><span \
style="font-family:Helvetica;font-size:medium"> </span></div> </div><div \
style="word-wrap:break-word"><span style="border-collapse:separate"><font \
color="#69ab39" face="Verdana, Geneva, sans-serif" \
size="1"><b>email/iChat/FaceTime/Google</b></font><font face="Helvetica" size="3"> \
</font><font face="Verdana, Geneva, sans-serif"><span style="font-size:11px"><a \
href="mailto:jeremy@convorelay.com" \
target="_blank">jeremy@convorelay.com</a></span></font><font face="Helvetica" \
size="3"> <u></u></font><br> <font face="Helvetica" \
size="3"><u></u><u></u></font><div \
style="font-family:Helvetica;font-size:medium;float:left"><u></u><span \
style="font-family:Verdana,Geneva,sans-serif;color:rgb(105,171,57);font-size:12px"><a \
href="http://media.convorelay.com/brand/email_sig/website.html?utm_campaign=sent-mail&amp;utm_medium=email&amp;utm_source=website" \
style="color:rgb(105,171,57);text-decoration:none" target="_blank">Convo™</a></span> \
<span style="font-family:Verdana,Geneva,sans-serif;color:rgb(236,236,236);font-size:10px">|</span> \
<u></u><u></u><a href="http://media.convorelay.com/brand/email_sig/website.html?utm_campaign=sent-mail&amp;utm_medium=email&amp;utm_source=website" \
style="color:rgb(153,153,153);font-family:Verdana,Geneva,sans-serif;font-size:11px;text-decoration:none" \
target="_blank">convorelay.com</a> <font color="#ececec" face="Verdana, Geneva, \
sans-serif">|</font><u></u></div> <div \
style="font-family:Helvetica;font-size:medium;float:left"><u></u><font \
color="#ececec" face="Verdana, Geneva, sans-serif"><br></font><u></u></div><div \
style="font-family:Helvetica;font-size:medium;float:left"><u></u><font \
color="#ececec" face="Verdana, Geneva, sans-serif"><br> \
</font><u></u></div></span></div></span></span><br> </div>



_______________________________________________
Unbound-users mailing list
Unbound-users@unbound.net
http://unbound.nlnetlabs.nl/mailman/listinfo/unbound-users

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic