跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 ip 地址匹配 ip 地址区间的小问题
未分類
14 5 月 2020

关于 ip 地址匹配 ip 地址区间的小问题

关于 ip 地址匹配 ip 地址区间的小问题

資深大佬 : d5 53

需求:用户输入一个 IP 地址,需要匹配出地址对应的小区间

有上万个这种小区间: 10.238.73.1-10.238.73.30

个人能想到的只有把 ip 地址段转换为数字(例如上文的小区间是 183388417-183388446),然后通过二分法,找到最近的区间,最后判断用户输入的 ip 地址对应的数字是否在区间内。

请问大佬们还有没有更简单、更科学的方法?现成的 go&python 库也行。

大佬有話說 (8)

  • 資深大佬 : Livid

    试试这个 https://docs.python.org/3/library/ipaddress.html

  • 資深大佬 : midasfree

    转换成 cidr 进行比较

  • 資深大佬 : xkeyideal

    两年前写过这种需求,第一个将 ip 区间排序,无需转换成数字,go 语言有 IP 类型,排序后做区间合并,多个连续的区间合并成一个,查找 IP 是否存在的时候用二分搜索即可

  • 資深大佬 : hankai17

    github.com/hankai17/ipdb 做了一个 好久没维护了

  • 資深大佬 : xenme

    ipv4 本身就是 32bit 的数据,直接转成二进制(也就是你的数字),然后排序比较就行了啊

  • 資深大佬 : xyjincan

    PostgreSQL 数据库, 原生支持这种数据结构,可以直接基于 IP 地址查询匹配 IP 段

  • 資深大佬 : no1xsyzy

    单次查还是多次查有区别。
    单次的话,问题都不大,线性搜索都没什么问题,应该不是指这个。
    多次就是 bitmap set 时间效率最高,但空间效率一般,直接占用 512 MB 并且需要一次性清零。可以用初始化标记法空间换时间。

    但想了想,话说这个是不是 B-tree 的一般涉猎范畴?
    每个节点是区间下界和上界和下方最上界和上方最下界的值。

  • 資深大佬 : shuax

    二分足够快了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具