侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python中IP地址处理IPy模块的方法

Python  /  管理员 发布于 7年前   588

安装

先下载源码,地址:ps://pypi.python.org/pypi/IPy/">https://pypi.python.org/pypi/IPy/ ,然后解压后使用命令python setup.py install安装。

使用

1、显示IP类型

>>> IP('192.168.1.1').version() 4 >>> IP('::1').version() 6

类似如上所示,通过version方法可以的判断输入的IP是IPv4还是IPv6 。

2、网段计算输出

代码:

from IPy import IPip=IP('192.168.0.0/28')print ip.len()for x in ip:  print xprint ip.strNormal(0)print ip.strNormal(1)print ip.strNormal(2)print ip.strNormal(3)

len()方法可以计算网段的IP个数。

strNormal()方法指定不同wantprefixlen参数可以定制不同类型的输出。上面输出类似如下:

16192.168.0.0192.168.0.1192.168.0.2192.168.0.3......192.168.0.15192.168.0.0192.168.0.0/28192.168.0.0/255.255.255.240192.168.0.0-192.168.0.15

3、格式转换

实例介绍几个常用方法,包括方向解析名称、IP类型、IP进制转换、网络地址网段地址转换。

ip=IP('192.168.0.1')print ip.reverseNames() #反向解析地址格式print ip.iptype() #显示IP地址类型,私有还是公有ip=IP('8.8.8.8')print ip.iptype()print ip.int() #转换成整型格式print ip.strHex() #转换成十六进制格式print ip.strBin() #转换成二进制格式#网络地址、网段地址格式转换print (IP('192.168.1.0').make_net('255.255.255.0'))print (IP('192.168.1.0/255.255.255.0',make_net=True))print (IP('192.168.1.0-192.168.1.255',make_net=True))

4、地址比较

判断IP地址和网段是否包含于另一个网段中,如下:

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

判断两个网段是否存在重叠,如下:

>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')1>>> IP('192.168.1.0/24').overlaps('192.168.2.0')0

其中1表示存在重叠,0表示不存在重叠。

举例

代码:

#coding:utf-8from IPy import IPip_s=raw_input("please input an IP or net-range: ")ips=IP(ip_s)if len(ips)>1: #网络地址  print('net: %s' % ips.net())  print('netmask: %s' % ips.netmask())  print('broadcast: %s' % ips.broadcast())  print('reverse address: %s' % ips.reverseNames()[0])  print('subnet: %s' % len(ips))else: #单个地址  print('reverse address: %s' % ips.reverseNames()[0])print('hexadecimal: %s' % ips.strHex())print('binary: %s' % ips.strBin())print('iptype: %s' % ips.iptype())

运行结果:

C:\Users\admin\workspace\zhangnq>python IPy_test2.pyplease input an IP or net-range: 192.168.1.1reverse address: 1.1.168.192.in-addr.arpa.hexadecimal: 0xc0a80101binary: 11000000101010000000000100000001iptype: PRIVATEC:\Users\admin\workspace\zhangnq>python IPy_test2.pyplease input an IP or net-range: 8.8.8.8reverse address: 8.8.8.8.in-addr.arpa.hexadecimal: 0x8080808binary: 00001000000010000000100000001000iptype: PUBLICC:\Users\admin\workspace\zhangnq>python IPy_test2.pyplease input an IP or net-range: 192.168.1.0/28net: 192.168.1.0netmask: 255.255.255.240broadcast: 192.168.1.15reverse address: 0.1.168.192.in-addr.arpa.subnet: 16hexadecimal: 0xc0a80100binary: 11000000101010000000000100000000iptype: PRIVATE

ipy模块用法

一个自动识别IP地址、子网、方向解析、IP类型等信息的脚本

#!/usr/bin/env python# -*- coding: utf-8 -*-def ip():  try:    from IPy import IP  ###加载模块    ip_s = raw_input('请输入IP地址或者网段地址:' )###输入一个IP地址或者网段    ips = IP(ip_s)  #定义元素    if len(ips) > 1: #如果len出来的数字大于1,那么就是一个网段      print('网络地址: %s' % ips.net())      print('子网掩码: %s' % ips.netmask())      print('网络广播地址: %s' % ips.reverseNames() [0])      print('网络子网数: %s' % len(ips))    else:  ###否则就是一个地址      print('IP反向解析: %s' % ips.reverseNames() [0])      print('十六进制地址: %s' % ips.strHex())      print('二进制地址: %s' % ips.strBin())      print('地址类型: %s' % ips.iptype())    print time.strftime("%Y-%m-%d %H:%M:%S")    #code  except Exception, e:    logging.info("error:" + str(e) + "\n" + traceback.format_exc())    print traceback.format_exc()  finally:    pass

运行效果:

[root@mylinuxer python]# 192.168.1.0/24-bash: 192.168.1.0/24: No such file or directory[root@mylinuxer python]# python python.py请输入IP地址或者网段地址: 192.168.1.0/24网络地址: 192.168.1.0子网掩码: 255.255.255.0网络广播地址: 1.168.192.in-addr.arpa.网络子网数: 256[root@mylinuxer python]# python python.py请输入IP地址或者网段地址: 192.168.1.1IP反向解析: 1.1.168.192.in-addr.arpa.十六进制地址: 0xc0a80101二进制地址: 11000000101010000000000100000001地址类型: PRIVATE[root@mylinuxer python]# python python.py请输入IP地址或者网段地址: 116.213.249.211IP反向解析: 211.249.213.116.in-addr.arpa.十六进制地址: 0x74d5f9d3二进制地址: 01110100110101011111100111010011地址类型: PUBLIC

总结

以上所述是小编给大家介绍的Python中IP地址处理IPy模块的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!


  • 上一条:
    python中hasattr()、getattr()、setattr()函数的使用
    下一条:
    Python3 requests文件下载 期间显示文件信息和下载进度代码实例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客