heplify 是 captagent 的小兄弟,专为速度和简洁性而优化。它是一个单一的二进制文件,可以在 Linux、ARM、MIPS、Windows 上运行,用于捕获 IPv4 或 IPv6 数据包并将它们发送到 Homer。Heplify 能够将 SIP、相关的 RTCP、RTCPXR、DNS、日志发送到 Homer。 它能够直接处理分片和重复的数据包。
要求
Linux
如果使用发布版本的二进制文件,则不需要任何要求
Windows
安装
Linux
下载 heplify 并执行 'chmod +x heplify'
Windows
下载 heplify.exe
开发构建
如果您安装了 Go 1.18+,可以通过运行 make
来构建最新的 heplify 二进制文件。
现在您应该安装 LUA Jit:
-
从源代码编译:
安装 luajit 开发库
apt-get install libluajit-5.1-dev
或
yum install luajit-devel
或对于 macOS
# 假设 brew 安装到 /usr/local/ brew install lua@5.1 luajit ln -s /usr/local/lib/pkgconfig/luajit.pc /usr/local/lib/pkgconfig/luajit-5.1.pc export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
安装 Go 1.11+
go build cmd/heplify/heplify.go
Docker
您也可以构建 Docker 镜像:
docker build --no-cache -t sipcapture/heplify:latest -f docker/heplify/Dockerfile .
您可以使用 docker compose 使用该镜像:
heplify:
image: sipcapture/heplify:latest
user: 1000:1000
cap_add:
- CAP_NET_ADMIN
- CAP_NET_RAW
command:
./heplify -e -hs ${HOMER_DST}:9060 -m SIP -dd -zf -l info
network_mode: host
restart: unless-stopped
用法
-assembly_debug_log
如果为 true,github.com/google/gopacket/tcpassembly 库将记录详细的调试信息(至少每个数据包一行)
-assembly_memuse_log
如果为 true,github.com/google/gopacket/tcpassembly 库将不时记录有关其内存使用的信息。
-b int
接口缓冲区大小(MB)(默认 32)
-bpf string
用于捕获数据包的自定义 BPF
-collectonlysip
仅收集 SIP
-d string
启用特定的调试选择器 [defrag,layer,payload,rtp,rtcp,sdp]
-dd
去重数据包
-di string
通过任何字符串丢弃不感兴趣的数据包
-didip string
通过目标 IP 丢弃不感兴趣的 SIP 数据包
-diip string
通过源或目标 IP 丢弃不感兴趣的 SIP 数据包
-dim string
通过方法丢弃不感兴趣的 SIP 数据包 [OPTIONS,NOTIFY]
-disip string
通过源 IP 丢弃不感兴趣的 SIP 数据包
-e
记录到 stderr 并禁用 syslog/文件输出
-eof-exit
读取完 pcap 文件后退出
-erspan
erspan
-fg uint
af_packet 的扇出组 ID
-fi string
通过任何字符串过滤感兴趣的数据包
-fnum int
要保留的日志文件总数(默认 7)
-fsize uint
每个日志文件的轮换大小(基于字节)(默认 10485760)
-fw int
af_packet 的扇出工作者数量(默认 4)
-hep-buffer-activate
如果与 HEP 服务器的连接断开,启用缓冲消息
-hep-buffer-debug
启用调试缓冲消息
-hep-buffer-file string
hep-buffer 文件的文件名和位置(默认 "HEP-Buffer.dump")
-hep-buffer-max-size string
最大缓冲区大小,可以是 B、KB、MB、GB、TB。默认为无限制(默认 "0")
-hi uint
HEP 节点 ID(默认 2002)
-hin
HEP 收集器监听协议、地址和端口(示例:"tcp:10.10.99.10:9060")
-hn string
HEP 节点名称
-hp string
HEP 节点密码
-hs string
HEP 服务器目标地址和端口(默认 "127.0.0.1:9060")
-i string
监听接口(默认 "any")
-keepalive uint
保持活动内部 - 默认为 5 秒。0 - 禁用(默认 5)
-l string
日志级别 [debug, info, warning, error](默认 "info")
-lp int
ReadFile 的循环计数。使用 0 无限循环(默认 1)
-m string
捕获模式 [SIP, SIPDNS, SIPLOG, SIPRTCP](默认 "SIPRTCP")
-n string
日志文件名(默认 "heplify.log")
-nt string
网络类型 [udp, tcp, tls](默认 "udp")
-bpf string
自定义 bpf 过滤器(默认 "")
-o
逐个读取数据包
-p string
日志文件路径(默认 "./")
-pr string
用于捕获 SIP 的端口范围(默认 "5060-5090")
-prometheus string
prometheus 指标 - ip:端口。默认为所有 IP(默认 ":8090")
-protobuf
在线使用 Protobuf
-rf string
读取 pcap 文件
-rs
使用数据包时间戳以最大 pcap 读取速度
-rt int
Pcap 轮换时间(分钟)(默认 60)
-s int
抓取长度(默认 8192)
-script-file string
在每个数据包上执行的脚本文件
-script-hep-filter string
脚本的 HEP 过滤器,HEP 类型的逗号分隔列表(默认 "1")
-sipassembly
如果为 true,将启用 sipassembly
-skipverify
跳过证书验证
-sl
记录到 syslog
-t string
捕获类型 [pcap, af_packet](默认 "pcap")
-tcpassembly
如果为 true,将启用 tcpassembly
-tcpsendretries uint
发送失败前重试的次数,之后重新连接(默认 64)
-version
显示 heplify 版本
-vlan
vlan
-wf string
写入 pcap 文件的路径
-zf
启用 pcap 压缩
-script-file string
在每个数据包上执行的 LUA 脚本文件路径
-script-hep-filter string
LUA 脚本的 HEP 类型过滤器,逗号分隔列表(默认 "1")
示例
# 在任何接口上捕获 SIP 和 RTCP 数据包并将它们发送到 127.0.0.1:9060
./heplify
# 在任何接口上捕获 SIP 和 RTCP 数据包并通过 TLS 将它们发送到 192.168.1.1:9060
./heplify -hs 192.168.1.1:9060 -nt tls
# 在任何接口上捕获 SIP 和 RTCP 数据包并将它们发送到 192.168.1.1:9060。使用 someNodeName
./heplify -hs 192.168.1.1:9060 -hn someNodeName
# 在任何接口上捕获 SIP 和 RTCP 数据包并将它们发送到 192.168.1.1:9060。将信息打印到 stdout
./heplify -hs 192.168.1.1:9060 -e
在任意接口上捕获SIP和RTCP数据包,并将它们发送到192.168.1.1:9060和192.168.2.2:9060
./heplify -hs "192.168.1.1:9060,192.168.2.2:9060"
在任意接口上捕获SIP和RTCP数据包,并将它们发送到192.168.1.1:9060。打印调试选择器
./heplify -hs 192.168.1.1:9060 -e -d fragment,payload,rtcp
在eth2上捕获自定义SIP端口范围的SIP和RTCP数据包,并将它们发送到192.168.1.1:9060
./heplify -i eth2 -pr 6000-6010 -hs 192.168.1.1:9060
在eth2上捕获SIP和RTCP数据包,将它们发送到homer并压缩到/srv/pcapdumps/
./heplify -i eth2 -hs 192.168.1.1:9060 -wf /srv/pcapdumps/ -zf
读取example/rtp_rtcp_sip.pcap并将SIP和相关的RTCP数据包发送到192.168.1.1:9060
./heplify -rf example/rtp_rtcp_sip.pcap -hs 192.168.1.1:9060
捕获并发送除SIP OPTIONS和NOTIFY之外的数据包到192.168.1.1:9060
./heplify -hs 192.168.1.1:9060 -dim OPTIONS,NOTIFY
在端口7932和接口eth2上捕获带HPERM封装的SIP数据包,发送到192.168.1.1:9060并在stdout上打印调试信息
./heplify -i eth2 -bpf "port 7932" -hs 192.168.1.1:9060 -l debug -e
在端口4789和接口eth0上捕获带VXLAN封装的SIP数据包,发送到192.168.1.1:9060并在stdout上打印调试信息
./heplify -i eth0 -bpf "port 4789" -hs 192.168.1.1:9060 -l debug -e
在"HEP收集器"模式下运行heplify,以通过TCP在端口9060上接收HEP输入,并分叉(输出)到两个在端口9063上监听的HEP服务器
./heplify -e -hs HEPServer1:9063,HEPserver2:9063 -hin tcp:1.2.3.4:9060
### 由人类制作
这个开源项目是由真实的人类完成的,没有企业赞助商、天使投资人或赞助人。
如果您在生产环境中使用这个软件,请考虑通过贡献或[捐赠](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=donation%40sipcapture%2eorg&lc=US&item_name=SIPCAPTURE&no_note=0¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest)来支持它的开发。
[![捐赠](https://yellow-cdn.veclightyear.com/0a4dffa0/f595a50c-7a6b-4918-8a2d-088b3ba0c3e9.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=donation%40sipcapture%2eorg&lc=US&item_name=SIPCAPTURE&no_note=0¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest)