Giter Club home page Giter Club logo

lzispro's Introduction

lzispro

Multi process parallel acquisition tool for IP address data of ISP network operators in China

**区 ISP 网络运营商 IP 地址数据多进程并行处理批量获取工具

呵呵,妥妥的一个主机多进程网络性能,计算性能,读写性能测试工具!能以极致指标跑好这个脚本,才敢说有台好设备可以凑合用了。

v1.0.3

工具采用 Shell 脚本编写,参考并借鉴 clangcn( https://github.com/clangcn/everyday-update-cn-isp-ip.git )项目代码和思路,通过多进程并行处理技术,对信息检索和数据写入过程进行优化,极大提高 ISP 运营商分项地址数据生成效率,减少运行时间。

在提供 IPv4 数据获取的同时,增加 IPv6 数据获取功能,以及基于 CIDR 网段聚合算法的 IPv4/6 CIDR 地址数据的生成功能。

作为自主数据源产生的 CIDR 网段地址数据,非常适合路由器多线路宽带接入后的策略分流功能使用。

脚本在 Linux 环境下使用,运行平台包括:Ubuntu,CentOS Stream,Rocky,Deepin,ASUSWRT-Merlin,OpenWrt,......

适用的 Shell 类型:sh,ash,dash,bash,zsh,......

本产品同时也是本人 lzispcn 项目( https://github.com/larsonzh/lzispcn.git )从单进程进化到多进程的升级版本。

项目代码和算法全部开源公开,欢迎有闲人士研究、探索和教化,共同进步。

功能

  • 从 APNIC 下载最新 IP 信息数据。

  • 从 APINC IP 信息数据中抽取出最新、最完整的**大陆及港澳台地区所有 IPv4/6 原始地址数据。

  • 采用多进程并行处理方式,向 APNIC 逐条查询**大陆地区的 IPv4/6 原始地址数据,得到归属信息,生成能够包含**大陆地区所有 IPv4/6 地址的 ISP 运营商分项数据。

  • 通过 CIDR 聚合算法生成压缩过的 IPv4/6 CIDR 格式地址数据。

  • **区 IPv4/6 地址数据:含 4 个地区分项和 7 个 ISP 运营商分项

    • 大陆地区

      • **电信

      • **联通/网通

      • **移动

      • **铁通

      • **教育网

      • 长城宽带/鹏博士

      • **大陆其他

    • 香港地区

    • 澳门地区

    • **地区

下载地址

安装及运行

一、安装支撑软件

脚本使用前最好将所在系统升级到最新版本,同时要在系统中联网安装脚本执行时必须依赖的软件模块:whois,wget

  • Ubuntu | Deepin
  sudo apt update
  sudo apt install whois
  sudo apt install screen # 可选项
  • CentOS Stream | Rocky
  sudo dnf install -y epel-release
  sudo dnf update -y
  sudo dnf install -y gcc make perl kernel-devel kernel-headers bizp2 dkms whois
  sudo dnf update kernel-*
  sudo dnf install -y screen # 可选项
  sudo reboot
  • ASUSWRT-Merlin
  先安装 Entware 软件存储库:
  插入格式化为 ext4 格式的 USB 盘,键入
  系统自带的 amtm 命令,在终端菜单窗口中
  选择安装 Entware 到 USB 盘。
  opkg update
  opkg install whois
  opkg install screen # 可选项
  • OpenWrt
  opkg update
  opkg install whois
  opkg install wget-ssl
  opkg install screen # 可选项

其他 Linux 平台系统依此类推。

二、安装项目脚本

  1. 下载本工具的软件压缩包 lzsipcn-[version ID].tgz(例如:lzispro-v1.0.3.tgz)。

  2. 将压缩包复制到设备的任意有读写权限的目录。

  3. 在 Shell 终端中使用解压缩命令在当前目录中解压缩,生成 lzispro-[version ID] 目录(例如:lzispro-v1.0.3),其中包含一个 lzispro 目录,是脚本所在目录。

  tar -xzvf lzispro-[version ID].tgz
  1. 将 lzispro 目录整体复制粘贴到设备中有读写运行权限的目录位置存储。

  2. 在 lzispro 目录中,lzispro.sh 为本工具的可执行脚本,若读写运行权限不足,手工赋予 755 以上即可。

三、脚本运行命令

  假设当前位于 lzispro 目录
  启动脚本         ./lzispro.sh
  强制停止         ./lzispro.sh stop
  1. 通过 Shell 终端启动脚本后,在操作过程中不要关闭终端窗口,这会导致程序执行过程意外中断。为防止远程终端窗口在长时间运行中意外掉线或关闭,建议在服务端的 Linux 系统中安装 screen 全屏幕窗口管理命令模块,并在 screen 会话中执行脚本运行命令,可确保终端窗口掉线或关闭后,也能在 screen 会话后台完成脚本运行。

  2. 主脚本在系统中只能有一个实例进程运行。若上次运行过程中非正常退出,再次运行如果提示有另一个实例正在运行,在确认系统中本脚本确实没有实例正在运行后,可以执行「强制停止」命令或重启系统,然后再执行「启动脚本」命令。由于采用多进程并行处理机制,一旦工作过程被打断,或强制关闭后,为避免残余进程还在后台运行,请执行一次「强制停止」命令,以清理脚本非正常退出后遗留的临时数据,同时关闭垃圾进程。

  3. 进行 ISP 运营商分项数据归类时,脚本需要通过互联网访问 APNIC 做海量信息查询,可能要耗费一、两个小时以上时间。切勿中断此执行过程,并耐心等候。

  4. 若要减少 ISP 运营商分项数据归类处理时间,可根据设备硬件平台性能,在不影响设备正常使用的前提下,酌情并适可而止的修改查询 ISP 信息归类数据的「并行查询处理多进程数量 PARA_QUERY_PROC_NUM」参数,取值越大,效率越高,用时越短。例如,从缺省的 4 进程,提高到 8 进程,16 进程,甚至 64 进程,效率可能获得翻倍,或数倍提高,大大降低程序运行时间,改善应用体验。

四、目录结构

在项目目录 lzispro 下,脚本为获取和生成的每类文本形式的数据设有独立的存储目录,在程序执行完成后,从这些目录中可获取所需数据。用户也可以根据需要,在脚本参数配置时修改最终输出的目录名称、路径,以及具体的数据文件名称。

  [lzispro]
    [func]
      lzispdata.sh  -- ISP 数据进程脚本
    [apnic]         -- APNIC 的 IP 信息数据
    [isp]           -- IPv4 原始地址数据
    [cidr]          -- IPv4 CIDR 地址数据
    [ipv6]          -- IPv6 原始地址数据
    [cidr_ipv6]     -- IPv6 CIDR 地址数据
    [tmp]           -- 运行中的临时数据
    lzispro.sh      -- 主进程脚本

五、参数配置

lzispro.sh 脚本是本工具的主程序,可用文本编辑工具打开查看、修改其中的内容。

该代码的前部分有供用户自定义的变量参数,具体使用可参考内部注释。

  项目目录
  目标数据文件名
  需要获取哪类数据
  并行查询处理多进程数量
  信息查询失败后的重试次数
  是否显示进度条
  系统日志文件定义
  ......

卸载

直接删除 lzispro 目录。

效果图

ASUSWRT-Merlin

华硕 GT-AX6000 梅林固件路由器,四核心 ARM CPU,主频 2.0 MHz,脚本「并行查询处理多进程数量」参数设置为:PARA_QUERY_PROC_NUM="48"。实际用时从单进程的两个多小时减少到 10 分钟以下。并行查询处理多进程同时运行时,CPU 四个内核的资源占用率均在 60 ~ 70 % 之间,路由器网络内外之间均保持畅通。

lzispro_asuswrt-merlin

OpenWrt

使用 64 个查询处理进程,OpenWrt 跑疯了。这是在 VirtualBox 虚拟机里的软路由,主机系统 Windows 11,11 代 U 的笔记本电脑,无线连接路由器,平时看不出有啥性能,不可思议!

lzispro_openwrt_64

能跑哈,再折腾下,128 个进程,行不?3 分钟半,大部分时间耗在 CIDR 聚合计算上,ISP 数据生成用时很少,若放到服务器上,效果更好。

lzispro_openwrt_128

CentOS Stream

安装在 11 代 U 笔记本电脑 VirtualBox 虚拟机里的 Linux 服务器,配置 4 GB 内存和 4 个处理器。脚本「并行查询处理多进程数量」参数设置为:PARA_QUERY_PROC_NUM="128",使用 128 个查询处理进程。

2 分钟 8 秒,太快了!

lzispro_centos

Ubuntu Server

使用装在 VirtualBox 虚拟机里的 Ubuntu Server,还是 128 个查询进程,开启进度条显示,

过程中规中矩,扣除起始时快时慢的 APNIC IP 信息数据 FTP 下载时间,大多数时候没有 CentOS Stream、Rocky 快。虚拟机里还有 Ubuntu 桌面版和一个 Deepin 桌面版,跑起来总体上要比服务器版慢。

所有系统都升级到当前最新正式版本,除去两个 Linux 路由器专用系统,公平起见,所有虚拟机中的 Linux 系统,内存、处理器、存储、网卡等均采用相同配置,都走**移动千兆宽带,运行中尽可能使用执行速度更快的 Shell 环境,如 sh、ash、dash,bash 比较臃肿,效率有些低,但也只在理论上,实际受其他影响,差别没想象的大。

几轮测试下来,最大影响因素还是网络。一般夜里,或凌晨前测试效果较好,白天时段较慢,肯定与业务繁忙程度、网络节点中继流量及国际出口拥堵状况有关,最好找我区绝大部分人类活动能力较弱的垃圾时间折腾。由于 APNIC 负责亚太地区网络地址,主机繁忙时间与我兔作息较为接近,事实如此?我也仅是打酱油时无意间特么猜测,总有些不规矩的家伙积极从事反人类的加班加点,搞得鸡毛都飞不动了。。。

lzispro_ubuntu_srv

Deepin

谁说国货不行,无意间又用 128 进程测了一下这个刚升级的桌面版系统,屌爆逆天,还特么怎么玩,一分多钟。。。

lzispro_deepin

Ubuntu

最后用 Ubuntu 桌面版测了一下 128 个进程并行查询处理的情况,结果令人失望,比过去最快曾到过 2 分 51 秒慢的很多,有些离谱,可能此刻网络状况变差,GitHub 也连不上了,啥破网络。折腾一宿,感觉测的是网络状态,无语!

lzispro_ubuntu

捐赠

小众需求,开源不易,欢迎投喂 😘

Wechat Pay Alipay

lzispro's People

Contributors

larsonzh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.