1238106Sdes#!/usr/bin/python 2238106Sdes# vim:fileencoding=utf-8 3238106Sdes''' 4238106Sdes idn-lookup.py: IDN (Internationalized Domain Name) lookup support 5238106Sdes 6238106Sdes Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) 7238106Sdes Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) 8238106Sdes 9238106Sdes Copyright (c) 2008. All rights reserved. 10238106Sdes 11238106Sdes This software is open source. 12238106Sdes 13238106Sdes Redistribution and use in source and binary forms, with or without 14238106Sdes modification, are permitted provided that the following conditions 15238106Sdes are met: 16238106Sdes 17238106Sdes Redistributions of source code must retain the above copyright notice, 18238106Sdes this list of conditions and the following disclaimer. 19238106Sdes 20238106Sdes Redistributions in binary form must reproduce the above copyright notice, 21238106Sdes this list of conditions and the following disclaimer in the documentation 22238106Sdes and/or other materials provided with the distribution. 23238106Sdes 24238106Sdes THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25238106Sdes "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 26238106Sdes TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 27238106Sdes PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE 28238106Sdes LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29238106Sdes CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30238106Sdes SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 31238106Sdes INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 32238106Sdes CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 33238106Sdes ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34238106Sdes POSSIBILITY OF SUCH DAMAGE. 35238106Sdes''' 36238106Sdesimport unbound 37238106Sdesimport locale 38238106Sdes 39238106Sdesctx = unbound.ub_ctx() 40238106Sdesctx.set_option("module-config:","iterator") #We don't need validation 41238106Sdesctx.resolvconf("/etc/resolv.conf") 42238106Sdes 43238106Sdes#The unicode IDN string is automatically converted (if necessary) 44238106Sdesstatus, result = ctx.resolve(u"www.h����ky����rky.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) 45238106Sdesif status == 0 and result.havedata: 46238106Sdes print "Result:" 47238106Sdes print " raw data:", result.data 48238106Sdes for k in result.data.address_list: 49238106Sdes print " address:%s" % k 50238106Sdes 51238106Sdesstatus, result = ctx.resolve(u"h����ky����rky.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN) 52238106Sdesif status == 0 and result.havedata: 53238106Sdes print "Result:" 54238106Sdes print " raw data:", result.data 55238106Sdes for k in result.data.mx_list_idn: 56238106Sdes print " priority:%d address:%s" % k 57238106Sdes 58238106Sdesstatus, result = ctx.resolve(unbound.reverse('217.31.204.66')+'.in-addr.arpa', unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN) 59238106Sdesif status == 0 and result.havedata: 60238106Sdes print "Result.data:", result.data 61238106Sdes for k in result.data.domain_list_idn: 62238106Sdes print " dname:%s" % k 63