onotelli/justniffer
GitHub: onotelli/justniffer
Justniffer 是一个基于 libpcap 的 TCP/HTTP 流量嗅探工具,能够捕获网络流量并以高度可定制的格式生成日志,支持性能指标提取和流量内容还原。
Stars: 224 | Forks: 59
# Justniffer
[项目主页](https://onotelli.github.io/justniffer/)
## [](https://www.gnu.org/licenses/gpl-3.0.en.html)
[](https://kernel.org)
[](https://github.com/onotelli/justniffer/releases/latest)
[](https://hub.docker.com/r/onotelli/justniffer)
## 概述
**Justniffer** 是一个网络 TCP 数据包嗅探和日志记录工具,旨在捕获、解码和分析 TCP/IP 流量,重点关注 HTTP。其灵活的日志记录引擎使其能够适应几乎任何基于 TCP 的协议,非常适用于调试、性能分析和自定义流量检查。
Justniffer 可以解码 HTTP 请求和响应,提取:
- 客户端和服务器 IP 地址
- 请求的 URL
- HTTP 头
- 消息体
- 时间信息(请求时间、响应时间、空闲时间等)
对于非 HTTP 流量,Justniffer 提供了一个强大且可定制的日志系统,允许您从 TCP 数据流中提取任何相关信息。
数据包捕获使用 **libpcap** 执行,确保与标准捕获格式和工具(如 `tcpdump`)的兼容性。
## 功能
- **HTTP 请求/响应解码**
- 适用于任何基于 TCP 的协议的**可定制日志格式**
- **性能指标**:请求时间、响应时间、空闲时间、连接时间
```
sequenceDiagram
participant Client
participant Server
%% Connection setup
Client->>Server: SYN (connect)
Note right of Server: %connection.time
Server-->>Client: SYN/ACK
Client->>Server: ACK
Note right of Server: ESTABLISHED
%% Idle before request
Note right of Server: %idle.time.0\n(after connection, before request)
%% Request phase
Client->>Server: Request (first packet)
Server-->>Client: ACK
Client->>Server: Request (data...)
Note right of Server: %request.time
Server-->>Client: ACK
Client->>Server: Request (last packet)
Server-->>Client: ACK
%% Response phase
Note right of Server: %response.time.begin
Server-->>Client: Response (first packet)
Client->>Server: ACK
Server-->>Client: Response (data...)
Note right of Server: %response.time.end
Client->>Server: ACK
Server-->>Client: Response (last packet)
Client->>Server: ACK
%% Idle after response
Note right of Server: %idle.time.1\n(after response, before next request/close)
%% Connection close
Server-->>Client: CLOSE
```
- **基于 libpcap 的捕获**(实时或从 `.pcap` 文件读取)
- **混杂模式支持**,用于被动监听
- 可通过外部脚本(bash, Python, Perl, ELF 二进制文件)进行**扩展** — [了解更多](https://onotelli.github.io/justniffer/EXTENDING)
- **重建 TCP 流**,包括重新排序、重传和重组
# 快速入门
## 在 Ubuntu 上安装
```
sudo apt install software-properties-common
sudo add-apt-repository ppa:oreste-notelli/ppa
sudo apt update
sudo apt install justniffer
```
## 以 access-log 格式捕获 HTTP 流量
```
justniffer -i eth0
```
## 为每个日志条目添加响应时间
```
justniffer -i eth0 -a " %response.time"
```
## 捕获完整的 HTTP 请求和响应
```
justniffer -i eth0 -r
```
## 使用自定义日志格式
```
justniffer -i eth0 -l "%request.timestamp %source.ip %dest.ip %request.header.host %request.url"
```
## 从 PCAP 文件读取
```
justniffer -f file.cap
```
# 示例
### 示例 1 — 以 access-log 格式获取 HTTP 流量
```
justniffer -i eth0
```
输出:
```
192.168.2.2 - - [15/Apr/2009:17:19:57 +0200] "GET /sflogo.php?group_id=205860&type=2 HTTP/1.1" 200 0 "" "Mozilla/5.0 ..."
...
```
### 示例 2 — 附加额外字段(例如:HTTP 响应时间)
```
justniffer -i eth0 -a " %response.time"
```
输出:
```
192.168.2.5 - - [22/Apr/2009:22:27:36 +0200] "GET /sflogo.php?group_id=205860&type=2 HTTP/1.1" ... 0.427993
...
```
### 示例 3 — 捕获所有 TCP 流量
(添加 `-u` 或 `-x` 以编码不可打印字符)
```
justniffer -i eth0 -r
```
输出:
```
GET /doc/maint-guide/ch-upload.en.html HTTP/1.1
Host: www.debian.org
...
```
### 示例 4 — 定义完全自定义的日志格式
```
justniffer -i eth0 -l "%request.timestamp %source.ip %dest.ip %request.header.host %request.url"
```
输出:
```
06/28/11 13:30:48 192.168.2.2 72.14.221.118 i1.ytimg.com /vi/TjSk6CVN5LY/default.jpg
...
```
### 示例 5 — 从捕获文件中读取
```
justniffer -f /file.cap
```
# 文档
完整文档、高级示例和使用指南:
👉 **https://onotelli.github.io/justniffer/**
# 贡献
欢迎提交 Pull requests、错误报告和功能建议。
# 许可证
Justniffer 在 **GPLv3** 许可证下发布。标签:DNS枚举, Docker, HTTP流量解析, TCP/IP, TCP协议分析, URL抓取, Web服务器日志模拟, 响应时间跟踪, 安全防御评估, 客户端加密, 性能分析, 抓包工具, 报文解码, 数据包嗅探器, 数据抓取, 服务管理, 流量提取, 流量日志定制, 网络协议分析器, 网络安全工具, 网络流量分析, 网络流量重组, 网络调试, 自动化, 请求拦截, 防御绕过