zoukankan      html  css  js  c++  java
  • python实现域名解析和归属地查询

    1. 前言
      工作中有时要查询域名解析和获取域名相关IP归属地信息
    2. 安装依赖
      python2:
      pip install dnspython
      python3:
      python3 -m pip install -i https://pypi.douban.com/simple/ dnspython3
    3. 脚本内容
      #!/usr/bin/env python
      #coding:utf-8
       
      import dns.resolver
      import urllib
      import chardet
      import sys
      import re
       
      ip_list = []
      query_domain = sys.argv[1]
      #query_domain = raw_input('Please input a domain: ')
       
      # 先查询是否有CNAME,如果有则通过CNAME获取到A记录;如果没有直接获取A记录,然后返回到一个列表中
      def get_iplist(domain):
          try:
              cn = dns.resolver.query(domain,'CNAME')
              for i in cn.response.answer:
                  for j in i.items:
                      cname_domain = j.to_text() 
              print '========================================'
              print '    CNAME  --->', cname_domain
              print '========================================'
          except:
              pass
          else:
              A = dns.resolver.query(cname_domain,'A')
              for i in A.response.answer:
                  for j in i.items:
                      try:
                          ip_list.append(j.address)
                      except:
                          get_iplist(str(j))
               
          try:
              A = dns.resolver.query(domain,'A')
              for i in A.response.answer:
                  for j in i.items:
                      ip_list.append(j.address)
          except:
              pass
          return ip_list
       
      # 通过调用ip138.com来获取IP归属地信息
      def get_ipbelong(domain_ip):
          url = 'http://ip138.com/ips138.asp?ip=%s&action=2' % domain_ip
          content = urllib.urlopen(url).read()
          typeEncode = sys.getfilesystemencoding()
          infoencode = chardet.detect(content).get('encoding','utf-8')
          html = content.decode(infoencode,'ignore').encode(typeEncode)
          ip = re.findall(r'd{1,3}.d{1,3}.d{1,3}.d{1,3}',html)
          result = re.findall(r'(<li>.*?</li>)',html)
          belong = result[0][14:-5]
          print '%-*s--->%*s' % (18,ip[0],20,belong)
       
       
      if __name__ == '__main__':
          get_iplist(query_domain)
          for ip in ip_list:
              get_ipbelong(ip)
    4. 使用
      python domain2ip.py www.baidu.com
  • 相关阅读:
    转载一个好用的div弹出层插件
    asp.net 母版页使用方法
    visual studio 代码排版组合键
    模仿米折网商品图片自动翻页效果
    BinaryWriter 、BinaryReader在读写
    Java 8 Lambda 表达式
    IBeacon协议分析
    Centos配置jdk和tomcat环境
    apidoc 生成Restful web Api文档
    数组和链表的区别
  • 原文地址:https://www.cnblogs.com/Mrhuangrui/p/8303934.html
Copyright © 2011-2022 走看看