|  |      1elfive      2023-01-20 21:24:52 +08:00 via iPhone 按位对比就行了呀…… 如果 ( IP & Mask ) == (上面列表的 IP & 对应的 Mask )就说明在里面 | 
|  |      3dzdh      2023-01-20 21:28:12 +08:00 ipv4 地址一共 4,294,967,296 个。你是要同时不满足 cidr 范围的所有 ipv4 地址的一个完整列表么? | 
|      5leonshaw      2023-01-20 21:52:49 +08:00 区间拆分就行了 | 
|  |      6eason1874      2023-01-20 21:58:57 +08:00  1 取相反范围的话,我会简单粗暴的,先合并 cidr ,然后转十进制排除掉,就像从 1-9 排除掉 3-5 得到 1-2 和 6-9 | 
|  |      7eason1874      2023-01-20 22:00:37 +08:00 #6 说转十进制不太对,应该叫转 long ip | 
|  |      10xupefei      2023-01-20 22:11:53 +08:00 via iPhone @eason1874 说的对,把开始和结束 ip 转成 int 或 long ,排序后从全局空间里逐个排除。 | 
|      11tril      2023-01-20 22:44:51 +08:00  2 @edis0n0 “排除指定 IP 段以外的所有 IP 地址段”,如果只需要结果不需要算法的话,这里有个用于计算 wireguard allowedips 的 py 脚本可以做到: https://www.lautenbacher.io/en/lamp-en/wireguard-exclude-a-single-ip-address/ | 
|      12folnet      2023-01-20 23:03:34 +08:00 python 用 netaddr 进行判断 | 
|  |      13bao3      2023-01-21 09:15:25 +08:00 via iPhone 你把这些 IP 的掩码转化成二进制,对比二进制就行了 | 
|  |      14qingcheng      2023-01-21 12:27:40 +08:00 如果要网段或者 IP 少的话逐一比对就可以了,匹配大量 IP 和大量子网的话就用 Trie 吧 | 
|      15ChristianSwift      2023-01-21 21:55:31 +08:00 via iPhone 为什么不问问神奇的 ChatGPT 呢 | 
|  |      16UnknoownUser      2023-01-23 15:06:56 +08:00 via iPhone 使用 32 个变量的逻辑运算,一位就是一个 x ,把表达式写出来,用二元决策图( BDD )计算 | 
|      17zmcity      2023-01-28 13:49:14 +08:00 开一个 256 长度的 bool 数组查表呗。 |