1.IPy模块

在IP地址规划中,涉及到计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等,即便是专业的网络人员也要进行繁琐的计算,而IPy模块提供了专门针对IPV4地址与IPV6地址的类与工具,可以帮助实现计算子网掩码、网络掩码、广播地址、子网数、IP类型等。

github模块下载地址:https://github.com/autocracy/python-ipy

我这里使用windows10,采用pip install IPy 安装

在日常使用中,常见的IP操作包括IP类型判断,IP转换,反向解析,输出网段地址等。

基本使用:

1.获取IP地址的版本(IPV4 or IPV6)

>>> import IPy
>>> from IPy import IP
>>> IP('10.0.0.1').version()
4
>>> IP('::1').version()
6
#4 表示IPv4,6 表示IPv6

2.获取子网IP地址的个数

>>> from IPy import IP
>>> ip = IP('10.0.0.0/27')
>>> ip.len()
32
# 排除网络地址和广播地址,所以可用地址是30个

3.获取IP地址的类型(私有IP or 公有IP)

>>> from IPy import IP
>>> ip = IP('10.0.0.1')
>>> ip.iptype()
'PRIVATE'
>>> ip1 = IP('8.8.8.8')
>>> ip1.iptype()
'PUBLIC'
# PRIVATE 表示私有地址,PUBLIC 表示公有地址

---------------------------------------------------

4.把IP地址转换成整数格式

>>> from IPy import IP
>>> ip = IP('10.0.0.1')
>>> ip.int()

5.把IP地址转换成十六进制/二进制格式

>>> from IPy import IP
>>> ip = IP('10.0.0.1')
>>> ip.strHex()  #转换成十六进制
'0xa000001'
>>> ip.strBin()   #转换成二进制
'00001010000000000000000000000001'

6.把十六进制/二进制格式转换成IP

>>> from IPy import IP
>>> print(IP('0xa0000001'))
10.0.0.1
>>> print(IP(167772161))
10.0.0.1

-------------------------------------------------

7.网络地址的转换,根据IP和子网掩码生成网段格式:

>>> print (IP('192.168.100.0').make_net('255.255.255.0'))
192.168.100.0/
>>> print (IP('192.168.100.0/255.255.255.0',make_net=True))
192.168.100.0/
>>> print (IP('192.168.100.0-192.168.100.255',make_net=True))
192.168.100.0/

8.反向解析地址格式

>>> IP('8.8.8.8').reverseNames()
['8.8.8.8.in-addr.arpa.']

9.判断网段大小

>>> IP('10.0.0.0/24') > IP('10.0.0.0/16')
True

10.判断IP是否在网段内

>>> '192.168.1.100' in IP('192.168.1.0/24')
True

11.判断网段是否在网段内

>>> IP('192.168.1.0/24') in IP('192.168.0.0/16')
True

12.判断网段是否重叠

>>> IP('192.168.0.0/16').overlaps('192.165.1.0')

>>> IP('192.168.0.0/16').overlaps('192.168.1.0')
1
#0 表示不重叠,1表示重叠

13.获取的网段的子网掩码,以及广播地址

>>> from IPy import IP
>>> ip = IP('10.0.0.0/30')
>>> ip.netmask()
IP('255.255.255.252')
>>> ip.broadcast()
IP('10.0.0.3')

14.对于网段的地址,可以利用for循环,得到其包含的所有的IP地址

>>> from IPy import IP
>>> ip = IP('10.0.0.0/30')
>>> for i in ip:
print(i) 10.0.0.0
10.0.0.1
10.0.0.2
10.0.0.3

2.Dnspython模块

dnspython模块中最常用的域名查询,它提供了一个DNS解析器类–resolver,使用resolver的query方法来实现域名的查询功能。query方法的定义如下:

query(self, qname, rdtype=, rdclass=, tcp=False, source=None, raise_on_no_answer=True, source_port=)
其中,qname表示待查询的域名;rdtype用来指定待查询的类型,如A记录、MX记录、NS记录等;rdclass用来指定网络类型,如IN、CH、HS等,
默认为IN;tcp用来指定查询时是否使用TCP协议,默认为False;source和source_port用于指定查询源地址与端口,默认为查询设备IP和0端口;
raise_on_no_answer用来指定当查询无应答时是否触发异常。

常见的DNS解析类型包括A,MX,NS,CNAME等。利用dnspython的dns.resolver.query方法可以简单实现这些DNS类型的查询,为后面要实现的功能提供数据来源,比如对一个使用DNS轮循业务的域名进行可用性监控,需要得到当前的解析结果。

1.A记录/CNAME记录

import dns.resolver
domain = input('please input an domain: ') #请输入域名地址
A = dns.resolver.query(domain,'A')
for i in A.response.answer:
    for j in i.items:
        if isinstance(j, dns.rdtypes.IN.A.A): ##如果是A记录类型,则输出地址
            print('A记录: %s' % j.address) 
        if isinstance(j, dns.rdtypes.ANY.CNAME.CNAME): ##如果是CNAME记录,则直接输出
            print('CNAME: %s' % j)

2.MX记录查询

import dns.resolver
domain = input('please input an domain: ')
MX = dns.resolver.query(domain,'MX') #指定查询域名以及MX类型
for i in MX:
print("MX preference =%d,mail exchanger=%s" %(i.preference,i.exchange))

3.NS记录查询

import dns.resolver
domain = input('please input an domain: ')
NS = dns.resolver.query(domain,'NS') #指定查询域名以及MX类型
for i in NS.response.answer:
for j in i.items:
print(j.to_text()) ##输出结果

2.python IP/DNS地址处理之IPy/Dnspython模块的更多相关文章

  1. python IP地址转16进制

    python IP地址转16进制 第一种方法: 通过socket.inet_aton实现 import socket from binascii import hexlify ary='192.168 ...

  2. Ubuntu 16.04修改MAC地址以及网络常用设置(IP/DNS/网关)

    1.先停止桌面版自带的NetworkManager,这东西很难用,且有些设置需要重启. sudo systemctl stop NetworkManager.service sudo systemct ...

  3. DNSPod各个套餐的DNS地址

    DNSPod各个套餐的DNS地址 https://support.dnspod.cn/Kb/showarticle/tsid/178/ DNSPod各个套餐的DNS地址每种域名套餐对应的DNS地址是不 ...

  4. Linux设置DNS地址及清理DNS缓存方法

    1.设置DNS地址 编辑vim /etc/resolv.conf 文件. 增加DNS地址:nameserver ip. 2.清理DNS缓存 清理dns缓存: 通过重启nscd服务来达到清理dns缓存的 ...

  5. Azure Public IP DNS域名

    在某些环境下,PIP是Azure上的一种比较好的解决方案处理一些特殊的环境.比如大量的端口需要打开.向外部的访问非常多等等. 但目前,Azure的Reserved IP address不用应用到PIP ...

  6. Android之通过adb shell 模拟器 error: more than one device and emulator 改ip dns

    error: more than one device and emulator 如果出现上面那种情况 请关闭  ide 输入下面的  再次重新启动 模拟器 如果实际上只有一个设备或模拟器,并且查到有 ...

  7. CentOS 6.6实现永久修改DNS地址的方法

    本文实例讲述了CentOS 6.6实现永久修改DNS地址的方法. 百牛信息技术bainiu.ltd整理发布于博客园 分享给大家供大家参考,具体如下:1.配置ip地址文件 /etc/sysconfig/ ...

  8. 【网络】无法解析服务器的DNS地址?;能登陆QQ,无法打开网页

    1. 无法解析服务器的DNS地址 手动设置 DNS(域名解析服务器) 8.8.8.8 114.114.114.114 清除浏览器缓存: 重启主机: 无法解析服务器的DNS地址?DNS解析错误怎么办? ...

  9. Cent0S 6.7直接在/etc/resolv.conf文件下修改DNS地址重启不生效问题【转】

    CentOS 6.7/Linux下设置IP地址 1:临时修改: 1.1:修改IP地址 # ifconfig eth0 192.168.2.104 1.2:修改网关地址 # route add defa ...

随机推荐

  1. sqlalchemy 学习(二)scoped session

    数据库设计的难点之一,是session生命周期的管理问题.sqlalchemy提供了一个简单的session管理机制,即scoped session.它采用的注册模式.所谓的注册模式,简单来说,是指在 ...

  2. 区域存储网络(SAN)与 网络直接存储(NAS)

    随着互联网及网络应用的飞速发展,数据信息存储系统所需处理的数据类型也呈爆炸性增长,这使数据信息存储系统面临前所未有的挑战.附加式网络存储装置(Network Attached Storage,缩写为N ...

  3. Tomcat && Servlet(1)

    一.概述 为了让web服务器和web应用程序进行访问交互,servlet是这个交互的标准接口,web服务器必须符合servlet标准,web应用应该实现servlet接口. tomcat是一个符合se ...

  4. Pycharm安装工具包

    1.在settings->Project Interpreter->configure interpreters->Install中可以找到所有的模块. PyCharm IDE会帮助 ...

  5. SpringMvc入门四----rest风格Url

    知识点: REST风格URL简介 SpringMvc对rest风格的支持 @PathVariable 获取 Url 变量 SpringMvc对静态资源的处理 REST风格URL简介: 我们平时看到的s ...

  6. FIR数字信号滤波器

    数字滤波器 在信号处理领域中,对于信号处理的实时性.快速性的要求越来越高.而在许多信息处理过程中,如对信号的过滤.检测.预测等,都要广泛地用到滤波器. 其中数字滤波器具有稳定性高.精度高.设计灵活.实 ...

  7. Java-Runoob:Java 变量类型

    ylbtech-Java-Runoob:Java 变量类型 1.返回顶部 1. Java 变量类型 在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifie ...

  8. java成神之——jaxb操作xml的基本使用

    JAXB 依赖 读取xml配置 写配置 自定义写配置 结语 JAXB 依赖 <dependency> <groupId>javax.activation</groupId ...

  9. java成神之——集合框架之Array

    Array 初始化 填充元素的几种方式 数组转流 遍历 数组转成字符串 排序 查找 数组扩大 原始类型数组和包装类型数组转换 移除元素 比较数组是否相等 克隆 类型转换 过滤元素 结语 Array 初 ...

  10. 5.solr学习速成之语法

    常用查询参数 q - 查询字符串,必须的.   fl - 指定返回那些字段内容,用逗号或空格分隔多个.  start - 返回第一条记录在完整找到结果中的偏移位置,0开始.   rows - 指定返回 ...