一款IP合并和分解工具

这篇具有很好参考价值的文章主要介绍了一款IP合并和分解工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:需求说明

         近期在工作中有个需求,需要将七千多个ip地址(有的带掩码,有的不带掩码)进行合并尝试,看能不能通过合并减少ip的条目数。这就涉及到ip和掩码的计算,举例如下:

192.168.1.0/25
192.168.1.128/29
192.168.1.136/30
192.168.1.140/32
192.168.1.141/32
192.168.1.142/31
192.168.1.144/28
192.168.1.160/27
192.168.1.192/29
192.168.1.200/30
192.168.1.204/31
192.168.1.206/32
192.168.1.207/32
192.168.1.208/28
192.168.1.224/27

如上的ip,我么可以先对其进行展开,直观的看到其ip地址范围

192.168.1.0-192.168.1.127
192.168.1.128-192.168.1.135
192.168.1.136-192.168.1.139
192.168.1.140
192.168.1.141
192.168.1.142-192.168.1.143
192.168.1.144-192.168.1.159
192.168.1.160-192.168.1.191
192.168.1.192-192.168.1.199
192.168.1.200-192.168.1.203
192.168.1.204-192.168.1.205
192.168.1.206
192.168.1.207
192.168.1.208-192.168.1.223
192.168.1.224-192.168.1.255

这里插一下怎么去展开地址,我们借助IPy模块去做展开

import os
import IPy
from ip_info import IPList

for ip in IPList:
    ipIns = IPy.IP(ip)
    print(ipIns.strFullsize(3))

        先把所有地址读到一个列表里,再遍历列表,用strFullsize方法进行展开,这里就不做详细介绍了,有兴趣的同学可以自行去code调试

        从上面的地址可以清除的看到所有地址合并就是192.168.1.0-192.168.1.255,可以直接用192.168.1.0/24一条去表示上面的所有条目。条目少我们可以手工计算的方式进行合并,但是如果有几千上万个ip条目手工计算就不太现实了。

        github上有一款ip合并和分解的工具cidr-merger,可以很好的解决咱们的需求

gituhub上的工程地址如下:GitHub - zhanhb/cidr-merger: A simple command line tool to merge ip/ip cidr/ip range, supports IPv4/IPv6A simple command line tool to merge ip/ip cidr/ip range, supports IPv4/IPv6 - GitHub - zhanhb/cidr-merger: A simple command line tool to merge ip/ip cidr/ip range, supports IPv4/IPv6https://github.com/zhanhb/cidr-merger

 其发行版本提供了linux版本,windowd版本,我们可以根据需要去下载对应的版本。这里我是在windows上使用。

二:工具使用

下面我们试用一下该款工具

1,查看工具使用帮助

一款IP合并和分解工具

2, IP 段分解为掩码形式

一款IP合并和分解工具

 3,IP段合并

一款IP合并和分解工具

 我们尝试去打乱顺序,并且加一条重复的ip,看工具能不能正确处理

192.168.1.136/30
192.168.1.140/32
192.168.1.0/25
192.168.1.128/29
192.168.1.140/32

一款IP合并和分解工具

 可以看到工具能很好的处理

那我们回到最上面的需求,我们将IP拷贝到ip.txt里去,用工具运行看下

一款IP合并和分解工具

 可以看到合并成了一条,我们可以通过-r参数以ip范围的方式输出,也可以通过-s以掩码的方式输出,如果我们输入的结果比较多,输出的结果也比较多,除了用重定向符号输出到文件,也可以通过-o参数,这样便于后续的程序处理

一款IP合并和分解工具

 4,官网示例

通过上面的参数可以看到该款工具还有很多其他的玩法,在此就不一一举例了,有些伙伴可能不能访问github,在这贴上官网的用例

$ echo '1.0.0.1-223.255.255.254' | cidr-merger
> 1.0.0.1
  1.0.0.2/31
  1.0.0.4/30
  1.0.0.8/29
  ......
  1.128.0.0/9
  2.0.0.0/7
  4.0.0.0/6
  8.0.0.0/5
  16.0.0.0/4
  32.0.0.0/3
  64.0.0.0/2
  128.0.0.0/2
  192.0.0.0/4
  208.0.0.0/5
  216.0.0.0/6
  220.0.0.0/7
  222.0.0.0/8
  223.0.0.0/9
  ......
  223.255.255.240/29
  223.255.255.248/30
  223.255.255.252/31
  223.255.255.254
$ echo '1.1.1.0' > a; \
    echo '1.1.1.1' > b; \
    echo '1.1.1.2/31' > c; \
    echo '1.1.1.3-1.1.1.7' > d; \
    cidr-merger -o merge a b c d; \
    cat merge; \
    rm a b c d merge
> 1.1.1.0/29
$ wget -O- "https://ftp.apnic.net/stats/apnic/`TZ=UTC date +%Y`/delegated-apnic-`TZ=UTC+24 date +%Y%m%d`.gz" | \
    gzip -d | awk -F\| '!/^\s*(#.*)?$/&&/CN\|ipv4/{print $4 "/" 32-log($5)/log(2)}' | \
    cidr-merger -eo/etc/chinadns_chnroute.txt # update ip on router
$ #              ^ e: means error if input is empty
$ echo 'fe80::/10' | cidr-merger -r
> fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
$ echo '1.1.1.0' > a; echo '1.1.1.1' | cidr-merger - a; rm a
$ #                                                ^ -: means standard input
> 1.1.1.0/31

 -r和-s输出的比较

$ echo '1.1.1.1/32' | cidr-merger
> 1.1.1.1
$ echo '1.1.1.1/32' | cidr-merger -s
> 1.1.1.1/32
$ echo '1.1.1.1/32' | cidr-merger -r
> 1.1.1.1
$ echo '1.1.1.1/32' | cidr-merger -rs
> 1.1.1.1-1.1.1.1

空策略的比较

$ cidr-merger -o txt /dev/null # an empty file named `txt` is created.
$ cidr-merger -ko txt /dev/null # no file is created, and this program exit with code zero
$ #            ^ same as `cat /dev/null | cidr-merger --skip-empty --output txt`
$ cidr-merger -eo txt /dev/null # no file is created, and this program exit with code non zero
$ #            ^ same as `cat /dev/null | cidr-merger --error-if-empty --output txt`
$ # option `-e` might be useful when download file from internet and then write to a file

$ # There is no difference if you redirect output to a file such as following
$ cat /dev/null | cidr-merger -e > txt
  # file `txt` is created, but this program exit with code non zero

 为方便小伙伴下载已上传到csdn:https://mp.csdn.net/mp_download/manage/download/UpDetailed

 后续如果有时间想设计一个可视化工具,通过可视化来展现这一款工具的能力

可视化界面实现:

一款IP合并和分解工具(二)_ftzchina的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-453143.html

到了这里,关于一款IP合并和分解工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一款开源免费、更符合现代用户需求的论坛系统:vanilla

    对于个人建站来说,WordPress相信很多读者都知道了。但WordPress很多时候我们还是用来建立自主发布内容的站点为主,适用于个人博客、企业主站等。虽然有的主题可以把WordPress变为论坛,但效果并不是很好。 所以,今天给大家推荐一个开源的论坛项目: vanilla ,有建站需求的

    2024年02月14日
    浏览(75)
  • LightFM:一款开源推荐系统框架,可以轻松实现大规模矩阵分解,快速、高效地处理大型矩阵

    作者:禅与计算机程序设计艺术 LightFM 是由 Yelp 开发的一款开源推荐系统框架,可以轻松实现大规模矩阵分解。该项目基于 TensorFlow 和 Keras 框架,可以快速、高效地处理大型矩阵。它具有以下特点: 提供了一种简单的方法来训练矩阵分解模型,即通过定义项间的交互矩阵和用

    2024年02月10日
    浏览(49)
  • 《软件需求分析与设计》课程综合实践——需求规格说明书

    东莞理工学院 《软件需求分析与设计》课程综合实践 项目名称:《XX培训机构教学管理系统》 需求规格说明书 学院:计算机与网络安全学院 班级: 小组成员: 1 引言 1.1 编写目的 1.2 背景 1.3 定义 1.4 参考资料 2 任务概述 2.1 目标 2.2 用户的特点 2.3 假定和约束 3 需求规定 3

    2024年02月09日
    浏览(81)
  • 软件需求规格说明书

    软件需求规格说明书编写规范编写规范 1.项目背景 2.项目目标 3.系统架构 4.总体流程 5.名称解释 6.功能模块

    2024年01月21日
    浏览(48)
  • 外卖项目需求说明书

    三、需求规格说明书 1 .引言 1.1 编写目的 1.2 项目背景 1.3 定义 1.4 参考资料 2 .任务概述 2.1 目标 2.2 运行环境 2.3 条件与限制 3 .数据描述 3.1 静态数据 3.2 动态数据 3.3 数据库介绍 3.4 数据词典 3.5 数据采集 4 .功能需求 4.1 功能划分 4.2 功能描述 5 .性能需求 5.1 数据精确度

    2024年02月06日
    浏览(48)
  • TBOX开发需求说明

    TBOX 功能需求 : 支持4G上网功能,可获取外网IP,可和云端平台连通 支持路由功能,支持计算平台、网关和云端平台建立网络连接 支持USB转网口,智能座舱会通过USB连接AG35建立网络连接(类似IVI通过USB口连接TBOX,需要项目确定上位机用什么协议接入),把USB口当作网卡使用

    2024年02月09日
    浏览(30)
  • 【产品规划】功能需求说明书概述

    2024年02月12日
    浏览(43)
  • 软件需求规格说明书-word

    软件需求规格说明书编写规范 1.项目背景 2.项目目标 3.系统架构 4.总体流程 5.名称解释 6.功能模块 软件开发全文档获取:软件项目开发全套文档下载_软件项目文档-CSDN博客

    2024年01月21日
    浏览(44)
  • 学生请假管理系统(需求说明+项目(部分代码))

    软件需求说明书 开发本系统的目的,就是要解决目前我校关于学生请假和管理请假事务所面临的一系列问题。 说明: 计算机学院请假管理系统; 目前我校基本上是采用线下请假,学生先是向班主任说明情况,班主任再向辅导员进行报告,然后学生去辅导员那里申请请假并盖

    2024年01月22日
    浏览(61)
  • 定制 ChatGPT 以满足您的需求 自定义说明

    推荐:使用 NSDT场景编辑器 快速助你搭建可二次编辑的3D应用场景 20 月 日,OpenAI 宣布他们正在引入带有自定义说明的新流程,以根据您的特定需求定制 ChatGPT。 新的测试版自定义指令功能旨在通过防止用户在聊天会话之间重复常用指令来帮助用户充分利用 ChatGPT。展望未来

    2024年02月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包