一款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地址合并,Python,tcp/ip,网络,IP合并,IP分解

2, IP 段分解为掩码形式

ip地址合并,Python,tcp/ip,网络,IP合并,IP分解

 3,IP段合并

ip地址合并,Python,tcp/ip,网络,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地址合并,Python,tcp/ip,网络,IP合并,IP分解

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

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

ip地址合并,Python,tcp/ip,网络,IP合并,IP分解

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

ip地址合并,Python,tcp/ip,网络,IP合并,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-648976.html

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

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

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

相关文章

  • 网络原理之TCP-IP地址 & 子网掩码

    鸡汤: 谋事在人,成事在天 社会有很多不是自己能把握的东西,不必给自己太多压力,朝着自己小目标尽力而为;结果或许重要,那也是看自己时运如何了。 概念:连接到Internet中的每一个节点的唯一标识 组成:网络号+主机号 版本: 1、IPv4 (没有特别指定的版本下,通常

    2024年02月05日
    浏览(43)
  • 网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用

    本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果这篇文章可以帮助到你,劳请大家点赞转发支持一下! 从本篇文章开始就要分享网络编程的内容了,越发的感受到了编程的魅力,鸡汤来喽!! 1️⃣单机阶段:计算机跟计算

    2024年02月12日
    浏览(42)
  • TCP IP网络编程(三) 地址族与数据序列

    网络地址 IP地址分为两类: IPv4 4字节地址族 IPv6 16字节地址族 IPv4和IPv6的差别主要是表示在IP地址所用的字节数,目前通用的地址族为IPv4,而IPv6是为了应对IP地址耗尽的问题而提出的标准,目前主要还是使用IPv4 IPv4标准的4字节IP地址分为网络地址和主机地址,且分为A、B、C、

    2024年02月10日
    浏览(86)
  • Java中网络的基本介绍。网络通信,网络,ip地址,域名,端口,网络通信协议,TCP/IP传输过程,网络通信协议模型,TCP协议,UDP协议

    - 网络通信 概念:网络通信是指 通过计算机网络进行信息传输的过程 ,包括数据传输、语音通话、视频会议等。在网络通信中,数据被分成一系列的数据包,并通过网络传输到目的地。在数据传输过程中,需要确保数据的完整性、准确性和安全性。常见的网络通信协议有T

    2024年02月10日
    浏览(71)
  • 详解TCP/IP协议第五篇:详细介绍网络传输中的地址

    😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824   📚📚  工作微信:BigTreeJava 拉你进微信群,免费领取! 🍎🍎4:本文章内容出自上述:Spring应用课程!💞💞

    2024年02月07日
    浏览(45)
  • 【网络通信】探索UDP与TCP协议、IP地址和端口号的奥妙

    🌺 个人主页: Dawn黎明开始 🎀 系列专栏: 网络奇幻之旅 ⭐ 每日一句:往前走,朝着光 📢 欢迎大家:关注 🔍 +点赞 👍 +评论📝+收藏⭐️ 文章目录 📋前言 一.网络通信 1.1网络通信协议 1.2TCP/IP协议中的四个层次 二.UDP协议 2.1定义 2.2UDP连接的交互过程 三.TCP协议 3.1定义

    2024年02月05日
    浏览(49)
  • 使用hping3网络工具构造TCP/IP数据包和进行DDos攻击

    hping3是一个强大的命令行工具,用于生成、发送和解析TCP/IP协议的数据包。它是开源的网络安全工具,由Salvatore Sanfilippo开发,主要应用于网络审计、安全测试和故障排查等领域。hping3不仅可以作为普通的网络连通性检测工具,还因其高度的灵活性和可定制性而被广泛用于渗

    2024年04月25日
    浏览(32)
  • 浅谈TCP IP协议(二)IP地址

    上一节大致了解TCP/IP协议栈是个啥东西,依旧是雾里看花的状态,有很多时候学一门新知识时,开头总是很急躁,无从下手,刚学会一点儿,却发现连点皮毛都不算,成就感太低,所以任何时候学习最重要的是要在合适的时间掌握应该掌握的知识,循序渐进方能进步。 先简单

    2024年02月07日
    浏览(42)
  • IP地址【图解TCP/IP(笔记十)】

    在用TCP/IP通信时,用IP地址识别主机和路由器。为了保证正常通信,有必要为每个设备配置正确的IP地址。在互联网通信中,全世界都必须设定正确的IP地址。否则,根本无法实现正常的通信。 因此,IP地址就像是TCP/IP通信的一块基石。 IP地址的定义 IP地址(IPv4地址)由32位正

    2024年02月13日
    浏览(62)
  • 网路原理-传输层UDP,TCP/IP(确认应答,超时重传,连接管理,三次握手,四次挥手,状态转换,流量控制,滑动窗口,拥塞控制,延时应答,捎带应答,异常情况,面向字节流)-网络层(IP协议,地址管理)

    本节重点 • 理解传输层的作⽤,深⼊理解TCP的各项特性和机制 • 对整个TCP/IP协议有系统的理解 • 对TCP/IP协议体系下的其他重要协议和技术有⼀定的了解 我们之前编写完了基本的 java socket ,要知道,我们之前所写的所有代码都在应⽤层,都是为了 完成某项业务,如翻译等。

    2024年04月15日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包