2016-02-17 16:05:06 +01:00
import json
import dns . resolver
2016-02-29 21:44:50 +01:00
misperrors = { ' error ' : ' Error ' }
2016-02-24 02:50:35 +01:00
mispattributes = { ' input ' : [ ' hostname ' , ' domain ' ] , ' output ' : [ ' ip-src ' , ' ip-dst ' ] }
2016-03-20 11:54:03 +01:00
moduleinfo = { ' version ' : ' 0.1 ' , ' author ' : ' Alexandre Dulaunoy ' , ' description ' : ' Simple DNS expansion service to resolve IP address from MISP attributes ' , ' module-type ' : [ ' expansion ' , ' hover ' ] }
2016-02-17 16:05:06 +01:00
2016-02-24 02:50:35 +01:00
2016-02-17 16:05:06 +01:00
def handler ( q = False ) :
if q is False :
return False
request = json . loads ( q )
if request . get ( ' hostname ' ) :
toquery = request [ ' hostname ' ]
elif request . get ( ' domain ' ) :
toquery = request [ ' domain ' ]
else :
return False
r = dns . resolver . Resolver ( )
2016-02-29 21:44:50 +01:00
r . timeout = 2
r . lifetime = 2
2016-02-29 21:50:37 +01:00
r . nameservers = [ ' 8.8.8.8 ' ]
2016-02-17 16:05:06 +01:00
try :
answer = r . query ( toquery , ' A ' )
except dns . resolver . NXDOMAIN :
2016-02-29 21:44:50 +01:00
misperrors [ ' error ' ] = " NXDOMAIN "
return misperrors
2016-02-17 16:05:06 +01:00
except dns . exception . Timeout :
2016-02-29 21:44:50 +01:00
misperrors [ ' error ' ] = " Timeout "
return misperrors
except :
misperrors [ ' error ' ] = " DNS resolving error "
return misperrors
2016-02-24 02:50:35 +01:00
r = { ' results ' : [ { ' types ' : mispattributes [ ' output ' ] , ' values ' : [ str ( answer [ 0 ] ) ] } ] }
2016-02-17 16:05:06 +01:00
return r
2016-02-24 02:50:35 +01:00
def introspection ( ) :
2016-02-24 00:53:15 +01:00
return mispattributes
2016-02-24 02:50:35 +01:00
2016-02-24 00:53:15 +01:00
def version ( ) :
return moduleinfo