惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
小众软件
小众软件
P
Proofpoint News Feed
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
T
The Exploit Database - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Threat Research - Cisco Blogs
K
Kaspersky official blog
V
V2EX
博客园 - Franky
Cisco Talos Blog
Cisco Talos Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Scott Helme
Scott Helme
量子位
SecWiki News
SecWiki News
博客园 - 叶小钗
S
SegmentFault 最新的问题
L
LINUX DO - 最新话题
Attack and Defense Labs
Attack and Defense Labs
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
T
Tor Project blog
N
News and Events Feed by Topic
The Cloudflare Blog
Help Net Security
Help Net Security
Forbes - Security
Forbes - Security
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
P
Privacy & Cybersecurity Law Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
A
Arctic Wolf
L
LangChain Blog
Latest news
Latest news
S
Schneier on Security
C
CERT Recently Published Vulnerability Notes
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园_首页
T
The Blog of Author Tim Ferriss
Schneier on Security
Schneier on Security
S
Security @ Cisco Blogs
Hugging Face - Blog
Hugging Face - Blog
MyScale Blog
MyScale Blog
Blog — PlanetScale
Blog — PlanetScale
O
OpenAI News

博客园 - PKICA

git实用命令 rust底层设计理念值得注意的几个地方总结 rust可变引用作为函数参数的机理详解 Rust内存重解释transmute C与Rust类型映射 Rust FFI 安全抽象范式 rust延迟初始化原语 rust重借用机制与原理 rust参数传递模型 汇编语言语法详解 gdb汇编调试 gdb-pwndbg的安装与使用指南 gdb调试插件gef C语言thread_local linux系统readelf命令使用指南 gcore转储进程内存 gdb查看命令 RGB与YUV颜色编码的区别 Rust原子类型 C++ STL求两个集合交集差集 gdb调试集锦 ubuntu24.0.4使用root用户登录 ubuntu24.0.4输入密码后跳回登录界面 AI内存压缩技术TurboQuant及存疑 ubuntu切换到指定内核版本 在没有顶级科技大佬直接背书的情况下deepseek为啥能够异军突起? HuggingFace和deepseek的关系 当前主流AI大模型 Rust写时克隆Cow系列2
编译配置解答
PKICA · 2026-07-17 · via 博客园 - PKICA
1.下载suricata:
git clone https://github.com/OISF/suricata.git
git checkout -b suricata-6.0.0 suricata-6.0.0

2. 安装所依赖库
sudo apt-get -y install libpcre3 libpcre3-dbg libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libcap-ng-dev libcap-ng0 make libmagic-dev libjansson-dev libjansson4 pkg-config
liblua5.1-dev libnspr4-dev liblz4-dev rustc cargo
sudo apt-get -y install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0
2. 利用configure.ac和Makefile.am生成configure
aclocal
autoconf
autoheader
libtoolize
automake --add-missing
步骤:
1)git clone https://github.com/OISF/libhtp
./autogen.sh
不用(--enable-non-bundled-htp --with-libhtp-includes=/usr/include/htp --with-libhtp-libraries=/usr/lib/x86_64-linux-gnu \)
添加luajit支持
centos等需要源码编译安装luajit:wget https://luajit.org/download/LuaJIT-2.0.5.tar.gz
debian可以直接安装。sudo apt install luajit2
编译:
--enable-luajit --with-libluajit-includes=/usr/local/include/luajit-2.0/ \
--with-libluajit-libraries=/usr/local/lib/
 --enable-pfring
 --enable-lua 与 --enable-luajit二者择一
开启Debug模式( --enable-debug)
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-dpdk \
--enable-block --enable-rust --enable-rdkafka --enable-nfqueue --enable-luajit --enable-debug --enable-af-packet 2>&1 | grep -i error
执行“./configure ...”后,生成了rust/Cargorust/Cargo.lock
三方库本地化:
cargo vendor --respect-source-config --locked
配置rust/.cargo/config[.toml]
[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = "vendor"

离线编译
make CARGO_FLAGS="--offline" -j`nproc`
(suricata生成文件路径suricata/src/libs/)

如果rust问题:
清理错误的 Vendor 数据
cd rust
rm -rf vendor
rm -rf .cargo/config[.toml]
rm -f Cargo.lock

cargo update -p unicode-ident --precise 1.0.12
cargo update -p libc --precise 0.2.160
cargo update -p ryu --precise 1.0.18

#V8.0.x编译2025-12-26
0.前期环境
1)彻底清除先前编译生成的遗留物
make distclean
也会清除rust下vendor目录的本地化三方库,但是没有清除rust/.cargo/config文件.
Q:如何不清除vendor三方库:
A:修改rust/Makefile.am 文件,distclean-local配置中,不要留有“rm -rf vendor”类似的命令行。
2)查看当前分支版本
$ git branch
* main-8.0.x
3)查看rust版本
$ rustc --version
rustc 1.86.0 (05f9846f8 2025-03-31)
4)查看cbindgen版本
$ cbindgen --version
cbindgen 0.19.0
cbindgen版本过旧,安装最新版:Suricata 8 建议使用的 cbindgen 版本为 0.26.0。
cargo install --force cbindgen
或者使用 cargo install 的 --root 参数,将特定版本的 cbindgen 安装到 Suricata 源码目录下:
安装特定版本到项目目录:
在 Suricata 源码根目录下执行:
# 例如安装 Suricata 8 推荐的 0.26.0 版本
cargo install cbindgen --version 0.26.0 --root ./tools
提示:be sure to add `./tools/bin` to your PATH to be able to run the installed binaries
export PATH="$(pwd)/tools/bin:$PATH"
1.生成配置
./autogen.sh
支持 --enable-pfring (ntop提供,kernel和用户态)
支持  --enable-dpdk  sudo apt-get install dpdk-dev
 --enable-lua与--enable-luajit二者择一
eBPF/XDP 支持:如果你需要处理 10Gbps 以上的流量,建议在编译时同时加上 --enable-ebpf,AF_PACKET 可以配合 eBPF 进行更高效的流量旁路。
2.生成编译支持项
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-dpdk --enable-ebpf \
--enable-block --enable-rust --enable-rdkafka --enable-nfqueue --enable-luajit --enable-debug \
--enable-af-packet 2>&1 | grep -i error
生成了Makefile,和rust目录下Makefile,Cargo.lock,.cargo/config.toml
3.rust三方库本地持久化
在rust目录下执行:
cargo vendor --respect-source-config --locked
Q:如果出现“failed to load pkg lockfile”,表明已经处于一个通过 make distclean 或其他方式清理过网络缓存、或者处于断网/离线打包的环境中
A:临时移除导致“死循环”的本地源配置文件,让 Cargo 回归外网下载。
mv .cargo/config.toml .cargo/config.toml.bak
cargo vendor --respect-source-config --locked
mv .cargo/config.toml.bak .cargo/config.toml
@20260704 ~/.cargo/config.toml普通源registry网址无法使用了,需要改成sparse打头的。
配置rust/.cargo/config.toml
[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = "vendor"

3.编译
rust离线编译,要不然每次都会从网上拉取更新:
make CARGO_FLAGS="--offline" -j`nproc`
或者使用rust最新的三方库,但是会慢一些:
make -j`nproc`
4.验证编译选项支持:(suricata生成文件路径suricata/src)
suricata --build-info | grep AF_PACKET
 -D (Daemon 守护进程模式) 时,Suricata 会在后台运行。守护进程往往会改变当前工作目录(通常切换到根目录 /)。
./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -D -vvv
普通用户进程调试权限问题:
sudo -E rust-gdb --args ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -vvv


#suricata-master-6.0.x@2026-04-21
$ rustc --version
rustc 1.44.0 (49cae5576 2020-06-01) 原始,不用了.
##suricata6 + rust-1.63.0 + cbindgen-0.20.0
0.前期环境
1)彻底清除先前编译生成的遗留物
make distclean
也会清除rust下vendor目录的本地化三方库,但是没有清除rust/.cargo/config文件.
2)切换当前分支版本
$ git checkout master-6.0.x
3)安装特定rust版本
rustup install 1.63.0
4)设置suricata6专用rust版本
rustup override set 1.63.0
5)查看当前项目rust版本
rustc --version
rustc 1.63.0 (4b91a6ea7 2022-08-08)
6)安装推荐版本cbindgen
 Suricata 6,官方推荐且最稳定的版本是 cbindgen 0.19.00.20.0。
cargo install cbindgen --version 0.20.0 --root ./tools
提示:be sure to add `./tools/bin` to your PATH to be able to run the installed binaries
export PATH="$(pwd)/tools/bin:$PATH"
cbindgen --version
cbindgen 0.20.0
1.生成配置
./autogen.sh
2.生成编译支持项
支持 --enable-pfring (ntop提供,kernel和用户态)
支持  --enable-dpdk  sudo apt-get install dpdk-dev
 --enable-lua与--enable-luajit二者择一
eBPF/XDP 支持:如果你需要处理 10Gbps 以上的流量,建议在编译时同时加上 --enable-ebpf,AF_PACKET 可以配合 eBPF 进行更高效的流量旁路。
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-dpdk --enable-ebpf \
--enable-block --enable-rust --enable-rdkafka --enable-nfqueue --enable-luajit --enable-debug \
--enable-af-packet 2>&1 | grep -i error
生成了Makefile,和rust目录下Makefile,Cargo.lock,.cargo/config
3.rust三方库本地持久化
rust问题:
清理错误的 Vendor 数据
cd rust
rm -rf vendor
rm -rf .cargo/config
rm -f Cargo.lock
# 强制将 libc 降级到兼容 1.63 的版本(0.2.160 是安全的)
cargo update -p libc --precise 0.2.160
# 如果报错 ryu 也太新,同样降级
cargo update -p ryu --precise 1.0.18
cargo update -p unicode-ident --precise 1.0.12

在rust目录下执行:
cargo vendor --respect-source-config --locked
配置rust/.cargo/config
[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = "vendor"

4.编译
rust离线编译,要不然每次都会从网上拉取更新:
make CARGO_FLAGS="--offline" -j`nproc`
或者使用rust最新的三方库,但是会慢一些:
make -j`nproc`
5.验证编译选项支持:(suricata生成文件路径suricata/src)
该版本./src/.libs/suricata为二进制可执行程序,./src/suricata为脚本
suricata --build-info | grep AF_PACKET
 -D (Daemon 守护进程模式) 时,Suricata 会在后台运行。守护进程往往会改变当前工作目录(通常切换到根目录 /)。
./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -D -vvv
普通用户进程调试权限问题:
sudo -E rust-gdb --args ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -vvv

## suricata6 + rust-1.71.0 + cbindgen-0.20.0
0.前期环境
1)彻底清除先前编译生成的遗留物
make distclean
也会清除rust下vendor目录的本地化三方库,但是没有清除rust/.cargo/config文件.
2)切换当前分支版本
$ git branch
* master-6.0.x
3)安装特定rust版本
rustup install 1.71.0
4)设置suricata6专用rust版本
rustup override set 1.71.0
5)查看当前项目rust版本
rustc --version
cargo install cbindgen --version 0.24.3 --locked
rustc-1.71.0
rustc 1.63.0 (4b91a6ea7 2022-08-08)
6)安装推荐版本cbindgen
推荐版本:cbindgen 0.20.0 ~ 0.24.3
cargo install cbindgen --version 0.20.0 --root ./tools
提示:be sure to add `./tools/bin` to your PATH to be able to run the installed binaries
export PATH="$(pwd)/tools/bin:$PATH"
cbindgen --version
cbindgen 0.20.0
1.生成配置
./autogen.sh
2.生成编译支持项
支持 --enable-pfring (ntop提供,kernel和用户态)
支持  --enable-dpdk  sudo apt-get install dpdk-dev
 --enable-lua与--enable-luajit二者择一
eBPF/XDP 支持:如果你需要处理 10Gbps 以上的流量,建议在编译时同时加上 --enable-ebpf,AF_PACKET 可以配合 eBPF 进行更高效的流量旁路。
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-dpdk --enable-ebpf \
--enable-block --enable-rust --enable-rdkafka --enable-nfqueue --enable-luajit --enable-debug \
--enable-af-packet 2>&1 | grep -i error
生成了Makefile,和rust目录下Makefile,Cargo.lock,.cargo/config
3.rust三方库本地持久化
rust问题:
清理错误的 Vendor 数据
cd rust
rm -rf vendor
rm -rf .cargo/config
rm -f Cargo.lock
# 强制将 libc 降级到兼容 1.63 的版本(0.2.160 是安全的)
cargo update -p libc --precise 0.2.160
# 如果报错 ryu 也太新,同样降级
cargo update -p ryu --precise 1.0.18
cargo update -p unicode-ident --precise 1.0.12

在rust目录下执行:
cargo vendor --respect-source-config --locked
配置rust/.cargo/config
[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = "vendor"

4.编译
rust离线编译,要不然每次都会从网上拉取更新:
make CARGO_FLAGS="--offline" -j`nproc`
或者使用rust最新的三方库,但是会慢一些:
make -j`nproc`
5.验证编译选项支持:(suricata生成文件路径suricata/src)
该版本./src/.libs/suricata为二进制可执行程序,./src/suricata为脚本
suricata --build-info | grep AF_PACKET
 -D (Daemon 守护进程模式) 时,Suricata 会在后台运行。守护进程往往会改变当前工作目录(通常切换到根目录 /)。
./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -D -vvv
普通用户进程调试权限问题:
sudo -E rust-gdb --args ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -vvv

#suricata7.x@2026-04-22
suricata7.x 配合rustc-1.63.0,最稳定且官方推荐的 cbindgen 版本是 0.24.3
0.前期环境
1)彻底清除先前编译生成的遗留物
make distclean
也会清除rust下vendor目录的本地化三方库,但是没有清除rust/.cargo/config文件.
2)切换当前分支版本
$ git checkout main-7.0.x
3)安装特定rust版本
rustup install 1.63.0
4)设置suricata6专用rust版本
rustup override set 1.63.0
5)查看当前项目rust版本
rustc --version
rustc 1.63.0 (4b91a6ea7 2022-08-08)
6)安装推荐版本cbindgen
cargo install cbindgen --version 0.24.3 --root ./tools --locked
提示:be sure to add `./tools/bin` to your PATH to be able to run the installed binaries
export PATH="$(pwd)/tools/bin:$PATH"
cbindgen --version
cbindgen 0.24.3
1.生成配置
./autogen.sh
2.生成编译支持项
支持 --enable-pfring (ntop提供,kernel和用户态)
支持  --enable-dpdk  sudo apt-get install dpdk-dev
 --enable-lua与--enable-luajit二者择一
eBPF/XDP 支持:如果你需要处理 10Gbps 以上的流量,建议在编译时同时加上 --enable-ebpf,AF_PACKET 可以配合 eBPF 进行更高效的流量旁路。
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-dpdk --enable-ebpf \
--enable-block --enable-rust --enable-rdkafka --enable-nfqueue --enable-luajit --enable-debug \
--enable-af-packet 2>&1 | grep -i error
生成了Makefile,和rust目录下Makefile,Cargo.lock,.cargo/config.toml
3.rust三方库本地持久化
在rust目录下执行:
202606无法更新了,只能使用支持sparse或者离线三方crates库了。
cargo vendor --respect-source-config --locked
配置rust/.cargo/config
[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = "vendor"

4.编译
1)rust离线编译,要不然每次都会从网上拉取更新:
make CARGO_FLAGS="--offline" -j`nproc`
Q:error: failed to select a version for the requirement `flate2 = "~1.0.19"` (locked to 1.0.28)
candidate versions found which didn't match: 1.0.35
A:确保.cargo/config.toml指向本地endor三方库crate版本,然后执行精准的“离线刷新”命令:
rust$ cargo update -p flate2 --offline
批量刷新所有不一致的 Crate
$cargo update --offline
2)或者rust在线编译使用rust最新的三方库,但是会慢一些:
make -j`nproc`
5.验证编译选项支持:(suricata生成文件路径suricata/src)
该版本./src/.libs/suricata为二进制可执行程序,./src/suricata为脚本
suricata --build-info | grep AF_PACKET
 -D (Daemon 守护进程模式) 时,Suricata 会在后台运行。守护进程往往会改变当前工作目录(通常切换到根目录 /)。
./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -D -vvv
普通用户进程调试权限问题:
sudo -E rust-gdb --args ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -vvv

自动生成新增协议代码:
suricata$ python3 scripts/setup-app-layer.py Jir
Generating src/app-layer-jir.c.
Generating src/app-layer-jir.h.
Patching src/Makefile.am.
Patching src/app-layer-protos.h.
Patching src/app-layer-protos.c.
Patching src/app-layer-detect-proto.c.
Patching src/app-layer-parser.c.
Patching suricata.yaml.in.
Generating src/output-json-jir.h.
Generating src/output-json-jir.c.
Patching src/Makefile.am.
Patching src/suricata-common.h.
Patching src/output.c.
Patching suricata.yaml.in.
Patching src/util-profiling.c.

An application detector and parser for the protocol Jir has
now been setup in the files:

    src/app-layer-jir.h
    src/app-layer-jir.c

A JSON application layer transaction logger for the protocol
Jir has now been set in the files:

    src/output-json-jir.h
    src/output-json-jir.c

Suricata should now build cleanly. Try running "make".


运行(-l 日志路径 -D deamone)
./suricata -c suricata.yaml -s signatures.rules -i eth0 -l /var/log/suricata -D -v

注意:
12026-0305已经不支持suricata中rust模块编译了,因为各个源不支持rust1.44版本的三方库了,除非预先本地化了三方库。但有一点,这在2022年还是可以编译的。