Guest User

Untitled

a guest
Sep 25th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. import getdns
  2. import datetime
  3. import time
  4.  
  5. from influxdb import InfluxDBClient
  6. from influxdb.client import InfluxDBClientError
  7.  
  8.  
  9. DBUSER = 'influx_dbuser'
  10. DBPASSWORD = 'influx_dbpass'
  11. DBNAME = 'influx_dbname'
  12. DBHOST = 'localhost'
  13. DBPORT = 8086
  14.  
  15. dnssec_status = {
  16. 400: "DNSSEC_SECURE",
  17. 401: "DNSSEC_BOGUS",
  18. 402: "DNSSEC_INDETERINATE",
  19. 403: "DNSSEC_INSECURE",
  20. 404: "DNSSEC_NOT_PERFORMED"
  21. }
  22.  
  23. recursive_servers = [
  24. [{ "address_type": "IPv4", "address_data": '8.8.8.8' }],
  25. [{ "address_type": "IPv4", "address_data": '9.9.9.9' }],
  26. ]
  27.  
  28. monitored_domains = [
  29. "icann.org",
  30. "iana.org",
  31. "dnssec-failed.org",
  32. ]
  33.  
  34. result_extension = {
  35. "dnssec_return_status" : getdns.EXTENSION_TRUE,
  36. "dnssec_return_validation_chain": getdns.EXTENSION_TRUE
  37. }
  38.  
  39. getdns_result = {
  40. getdns.RESPSTATUS_GOOD: "GOOD",
  41. getdns.RESPSTATUS_NO_NAME: "NO_NAME",
  42. getdns.RESPSTATUS_ALL_TIMEOUT: "ALL_TIMEOUT",
  43. getdns.RESPSTATUS_NO_SECURE_ANSWERS: "NO_SECURE_ANSWERS",
  44. getdns.RESPSTATUS_ALL_BOGUS_ANSWERS: "ALL_BOGUS_ANSWERS"
  45.  
  46. }
  47.  
  48. KSK_tag = {
  49. 19036: "KSK2010",
  50. 20326: "KSK2017"
  51. }
  52.  
  53.  
  54. metric = "ksk"
  55.  
  56. def main():
  57.  
  58. series = []
  59. ctx = getdns.Context()
  60. ctx.resolution_type = getdns.RESOLUTION_STUB
  61.  
  62. # For each recursive resolver
  63. for resolver in recursive_servers:
  64. ctx.upstream_recursive_servers = resolver
  65. # For each domain
  66. for domain in monitored_domains:
  67. pointValues = {}
  68. print("Info: Start using resolver {0} to validate {1}".format(resolver[0]["address_data"],domain))
  69. # EDNS, packet size, response time (latency)
  70. # Get result
  71. try:
  72. results = ctx.address(name=domain, extensions=result_extension)
  73. validation_chain = results.validation_chain
  74. ksk = validation_chain[-1]["rdata"]["key_tag"]
  75. dnssec_status_id = 0
  76. dnssec_status_str = ""
  77. for result in results.replies_tree:
  78. if "dnssec_status" in result.keys():
  79. dnssec_status_id = result["dnssec_status"]
  80. dnssec_status_str = dnssec_status[result["dnssec_status"]]
  81.  
  82. break
  83.  
  84. pointValues["measurement"] = metric
  85. pointValues["tags"] = {}
  86. pointValues["tags"]["resolver"] = resolver[0]["address_data"]
  87. pointValues["tags"]["domain"] = domain
  88. pointValues["tags"]["value"] = results.status
  89. pointValues["tags"]["result_str"] = getdns_result[results.status]
  90. pointValues["fields"] = {}
  91. pointValues["fields"]["dnssec_status"] = dnssec_status_id
  92. pointValues["fields"]["dnssec_status_str"] = dnssec_status_str
  93. pointValues["fields"]["ksk"] = ksk
  94. pointValues["fields"]["ksk_str"] = KSK_tag[ksk]
  95.  
  96. except Exception, e:
  97. print("Error: {0} while using resolver {1} to validate {2}".format(str(e), resolver[0]["address_data"],domain))
  98. print("Info: End using resolver {0} to validate {1}".format(resolver[0]["address_data"],domain))
  99. series.append(pointValues)
  100.  
  101.  
  102. client = InfluxDBClient(DBHOST, DBPORT, DBUSER, DBPASSWORD, DBNAME)
  103. retention_policy = 'ksk_roll'
  104. client.create_retention_policy(retention_policy, 'INF', 3, default=True)
  105. client.write_points(series, retention_policy=retention_policy)
  106.  
  107. if __name__ == "__main__":
  108. main()
Add Comment
Please, Sign In to add comment