AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1116531
Accepted
acgbox
acgbox
Asked: 2022-11-25 08:25:13 +0800 CST2022-11-25 08:25:13 +0800 CST 2022-11-25 08:25:13 +0800 CST

执行 restore ipset 时如何组织 IP/CIDR?

  • 772

我有这个 ipset v7.15 的 bash 脚本(在 ubuntu 22.04 中运行),由Martin提供(我对这个问题做了一些修改):

ipset create -! blacklist hash:net family inet hashsize 1024
ipset save -! > /tmp/ipset.txt

cat list.txt | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n | while read line; do
    echo "add blacklist $line" >> /tmp/ipset.txt
done
ipset restore -! < /tmp/ipset.txt

内容list.txt:

125.74.0.0/15
1.0.132.249
125.73.0.0/16
130.255.128.0/20
125.76.0.0/17

出/tmp/ipset.txt:

create blacklist hash:net family inet hashsize 1024 maxelem 65536 bucketsize 12 initval 0xf164f1c6
add blacklist 1.0.132.249
add blacklist 125.73.0.0/16
add blacklist 125.74.0.0/15
add blacklist 125.76.0.0/17
add blacklist 130.255.128.0/20

出ipset -L(问题):

sudo ipset -L
Name: blacklist
Type: hash:net
Revision: 7
Header: family inet hashsize 1024 maxelem 65536 bucketsize 12 initval 0xf164f1c6
Size in memory: 696
References: 0
Number of entries: 5
Members:
125.74.0.0/15
1.0.132.249
125.73.0.0/16
130.255.128.0/20
125.76.0.0/17

如您所见,blacklist输出中的 IP/CIDR 乱七八糟(没有sort)。

Ipset 有这个选项:

-s, -sorted
Sorted output. When listing or saving sets, the entries are listed sorted.

但是我用下面的命令试了一下,输出是一样的(没有sort。也许我没有正确使用它):

ipset restore -! -s < /tmp/ipset.txt

如果我-!从命令中删除选项restore,我会收到以下错误:

ipset v7.15: Error in line 1: Set cannot be created: set with the same name already exists

所以,我认为我的脚本有错误,因为它添加了我认为不应该存在的一行:

create blacklist hash:net family inet hashsize 1024 maxelem 65536 bucketsize 12 initval 0xf164f1c6

然后我可以删除该save行以避免错误,将其保留如下:

ipset -! create blacklist hash:net family inet hashsize 1024
cat list.txt | while read line; do
    echo "add blacklist $line" >> /tmp/ipset.txt
done
ipset -s restore -f /tmp/ipset.txt

但是当我运行时输出保持不变,没有排序,ipset -L所以-sorted(-s) 选项在restore

我怎样才能解决这个问题,以便组织输出?

linux
  • 1 1 个回答
  • 59 Views

1 个回答

  • Voted
  1. Best Answer
    Martin
    2022-11-26T23:48:02+08:002022-11-26T23:48:02+08:00

    一些背景信息ipset:这是一个命令行工具,用于操作在内核内存中调整大小的数据集。因此,ipset 只是调用实际代码的包装器,它驻留在内核中——包括列出集合内容的代码。棘手的部分来了:

    您传递了一个选项,您希望以排序的方式输出集合 - 但负责此操作的内核模块不知道该选项,只是简单地忽略了它。所有在内核上下文中执行的函数都必须快速,如果它们花费的时间太长,可能会冻结您的系统。这就是为什么当代码不是绝对必要的时候内核开发人员非常挑剔(排序在 CPU 时间方面很昂贵而且不是必需的 - 这也可以在用户空间中完成)。

    我不知道要“启用”集合的排序输出需要什么内核版本,我使用内核版本 6.0.9 对其进行了测试,其中对输出进行排序的选项起到了应有的作用。遗憾的是,他们删除了某些手册页上的提示,这是仍然具有该提示的手册页版本。

    以这种顺序排列的集合不是错误,它实际上是一个特征:在列表中,您必须遍历每个项目以检查传入 IP 是否是该列表的一部分。这使得每次查找都取决于列表的大小。散列不同:函数用于从您的数据(在本例中为 IP)计算散列值。此哈希值用作数据内位置的参考 - 如果那里有条目,则 IP 位于该列表内。

    这种组织集合的方式使得查找值所需的时间保持不变——与集合的大小无关!当涉及网络流量时,快速响应时间始终很重要。

    我希望这有助于更好地理解事物......

    • 1

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve