Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
passer — 被动服务定位器,一个可识别服务器、客户端、名称以及更多信息的 Python 嗅探器 | Kitploit
工具/GitHubGitHub/activecm/passer
防御工具数据包嗅探与分析侦察网络映射网络取证信息收集网络安全指纹欺骗DNS 分析
GitHubactivecm/passer

passer

被动服务定位器,一个可识别服务器、客户端、名称以及更多信息的 Python 嗅探器

26653168个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

passer

被动服务定位器,一个识别服务器、客户端、名称以及更多信息的 Python 嗅探器

简介

快速上手 passer(被动服务嗅探器)的简要说明。你有责任获得进行嗅探的许可。

Passer 可以基于实时数据包捕获或 pcap 文件工作(命令行参数,见下方示例)。它报告实时服务和客户端、局域网上的以太网卡、DNS 条目、操作系统以及路由器——全部以被动方式完成!

如果你使用的是 Windows,或者由于其他原因你的支持文件路径与我的不匹配,请告诉我它们的位置,我很乐意更新脚本。

安装

要求

  • Python >=2.4 且 <3.0
  • Python 库(见 requirements.txt)
    • ipaddress
    • pytz
    • scapy>=2.4.0

可选(但推荐)

  • nmap
    • 用于获取以太网制造商和服务字符串
  • ettercap、wireshark 和/或 arp-scan
    • 用于获取更多以太网制造商
  • p0f 版本 2
    • 用于操作系统指纹文件

Ubuntu/Debian 及基于 deb 的发行版

# Install system dependencies
sudo apt-get install arp-scan ettercap-text-only nmap wireshark 
# Install python dependencies
sudo pip install -r requirements.txt
# Prevent Scapy from performing DNS lookups
echo 'noenum = [ Resolve(), TCP_SERVICES, UDP_SERVICES ]' >> ~/.scapy_startup.py

Redhat/CentOS/Fedora 及基于 rpm 的发行版

# Install system dependencies
sudo yum install arp-scan ettercap nmap wireshark
# Install python dependencies
sudo pip install -r requirements.txt
# Prevent Scapy from performing DNS lookups
echo 'noenum = [ Resolve(), TCP_SERVICES, UDP_SERVICES ]' >> ~/.scapy_startup.py

Windows(不完整)

要安装 scapy,请参阅安装指南。

Docker

Passer 也以 Docker 镜像的形式提供。如果你还没有安装 Docker,以下是在 Linux 上快速安装它的简便方法:

curl -fsSL https://get.docker.com | sh -

否则,请按照适用于你操作系统的安装说明进行操作。

对于大多数用途,我们推荐使用本仓库中包含的 passer 脚本。该脚本将处理所有 Docker 相关的

wget https://raw.githubusercontent.com/activecm/passer/master/passer
chmod +x passer

然后,你可以像在下面任何示例中那样使用此脚本。例如:

./passer -i eth0
# The equivalent without using the included script would be:
docker run --rm --name=passer -i --init --net=host --cap-add=net_raw activecm/passer -i eth0

要停止 passer 运行:

docker stop passer

示例

以 root 身份实时嗅探

/path/to/passer.py

这会从所有网络接口嗅探,并将所有输出行发送到你的控制台。

以非 root 用户身份实时嗅探

sudo /path/to/passer.py

或

su - -c '/path/to/passer.py'

以 root 身份实时嗅探,但仅限一个接口

/path/to/passer.py -i IfaceName

运行 route 应会显示一些你可能用到的活动接口。

❕ -i 与 -r 不兼容。

从 pcap 文件读取数据包;无需 root 权限

/path/to/passer.py -r /path/to/packets.pcap

❕ -r 与 -i 不兼容。

从标准输入接受原始 pcap 数据

cat packetdata.pcap | ./passer.py -r /proc/self/fd/0
zcat packetdata.pcap.gz | ./passer.py -r /proc/self/fd/0
bzcat packetdata.pcap.bz2 | ./passer.py -r /proc/self/fd/0
tcpdump -i eth0 -qtnp -w - | ./passer.py -r /proc/self/fd/0
# etc...

这样,你就可以使用任何能够将数据包保存为 pcap 文件的工具来捕获数据包,之后再在另一个系统上用 passer 处理它们。

将输出行保存到文本文件以便后续处理

/path/to/passer.py -l /path/to/networkinfo.txt

抑制警告和其他调试信息

/path/to/passer.py 2>/dev/null

显示帮助屏幕

/path/to/passer.py -h

将“异常”/未处理的数据包保存到 pcap 文件

/path/to/passer.py -u /path/to/oddpackets.pcap

这通常用于开发过程;保存到此文件的数据包是需要写入签名的数据包。我们欣然接受特殊数据包的贡献、服务描述以及对程序的补丁。

应用 BPF 过滤器以限制处理哪些数据包

这_应该_只需将 BPF 过滤器用单引号放在命令行末尾即可。截至 1.16 版本,底层库似乎无法成功使用所提供的过滤器,但有一个变通方法。使用 tcpdump 进行过滤,并将精简后的数据包集合通过 stdin 交给 passer,如上所述:

tcpdump -r packets.pcap -w - 'icmp or arp' | ./passer.py -r /proc/self/fd/0

有关在预先捕获数据包或实时嗅探中使用的过滤器建议,请参见下文“示例过滤器”部分。

故障排除

socket.error: (1, 'Operation not permitted')

你可能是以非 root 用户身份尝试进行实时嗅探。要么以 root 身份登录,使用 sudo/su,要么使用 pcap 文件。

如果 passer 崩溃或在你的系统上无法运行,请提交一个 issue,其中包含错误信息(如果有)以及关于你的操作系统的任何详细信息。

输出格式

Passer 的输出会发送到 stdout,如果你提供命令行参数 -l /path/to/logfile,也会写入该文件。格式如下:

TypeIPAddrProtoStateOptional description (may be empty)
'IP'IPaddr'IP'dead or livep0f OS description
'MA'IPaddr'Ethernet'MacAddrManufDescription
'TC'IPaddr'TCP_'Portclosed or openclient description
'TS'IPaddr'TCP_'Portclosed or listeningserver description
'UC'IPaddr'UDP_'Portopen or closedudp client port description
'US'IPaddr'UDP_'Portopen or closedudp server port description
'DN'IPaddr'A' or 'PTR'hostnamepossible extra info
'RO'IPaddr'TTLEx'routerpossible extra info
  • 第 1 列:记录类型的 2 字母代码
  • 第 2 列:被描述的 IP 地址。
  • 第 3 列:涉及的协议,或“我们是如何知道这一点的?”
  • 第 4 列:被描述对象的状态
  • 第 5 列:关于该对象的附加信息

各行以逗号分隔,便于加载到电子表格或进行 SQL 导入。任何字段都不应包含逗号。在 http://www.stearns.org/passer/passer-sample-log.txt 有一个示例输出文件。

以下是一些如何从这些行中提取所需数据的示例:

  1. 删除重复行:
cat /var/tmp/passer-log | sort -u | less
  1. 删除重复行,并将给定 IP 的所有记录归为一组:
cat /var/tmp/passer-log | sort -t, -k2 -u | less
  1. 仅抓取 DNS 和 Router 记录:
cat /var/tmp/passer-log | sort -u | egrep '(^DN|^RO)' | less
  1. 查看特定 IP 地址的所有记录:
cat /var/tmp/passer-log | sort -u | grep ',192\.168\.0\.17,' | less
  1. 查看特定网络的所有记录:
cat /var/tmp/passer-log | sort -u | grep ',192\.168\.' | less
  1. 查看所有在 TCP 端口 25 上监听的机器(smtp 服务器):
cat /var/tmp/passer-log | sort -u | grep ',TCP_25,listening,' | less
  1. 不显示关闭的端口:
cat /var/tmp/passer-log | sort -u | grep -v ',closed,' | less
  1. 仅 显示已关闭的端口:
cat /var/tmp/passer-log | sort -u | grep ',closed,' | less
  1. 显示 "google.com" 域中的所有 DNS 记录:
cat /var/tmp/passer-log | sort -u | grep -i 'google\.com\.,' | less
  1. 抓取所有 DNS 地址记录并创建一个类似 hosts 的文件:
/path/to/make-hosts /var/tmp/passer-log | /path/to/mergehosts.pl >/var/tmp/passer-hosts

"make-hosts" 和 merge-hosts 是独立的 shell 和 perl 脚本, 位于 http://www.stearns.org/passer/make-hosts 。

这仅仅是个开始!请把你提取感兴趣条目的 常用方法发给我,我会将它们加入并注明出处。

BPF 过滤器

各个记录类型需要特定类型的数据包 来提供其原始数据。如果你想包含或排除这些数据包,请使用 附带的过滤器。

'IP', IPaddr, 'IP', dead or live, p0f OS description

这需要 TCP SYN 数据包:

'tcp[13] & 0x12 = 0x02'

'MA', IPaddr, 'Ethernet', MacAddr, ManufDescription

这些来自 arp 回复(*1):

'arp'

'TC', IPaddr, 'TCP_'Port, closed or open, client description

这些需要 TCP SYN/ACK、FIN 和 RST(*2):

'tcp[13] & 0x07 != 0'

'TS', IPaddr, 'TCP_'Port, closed 或 listening, server description

我们需要 TCP SYN、SYN/ACK 和 RST 来判断端口是 开放还是关闭:

'tcp[13] & 0x06 != 0'

为了构造服务器描述字符串,我们还需要查看构成网络上大部分流量的 ACK 数据包:

'tcp[13] & 0x17 = 0x10'

如果你两者都想要,只需抓取所有 TCP 流量:

'tcp'

'UC', IPaddr, 'UDP_'Port, open or closed, udp client port description

最简单的方法就是把所有 UDP 端口和 ICMP 端口不可达消息都交给它处理:

'udp or icmp[0:2] = 0x0303'

'US', IPaddr, 'UDP_'Port, open or closed, udp server port description

同上:

'udp or icmp[0:2] = 0x0303'

'DN', IPaddr, A,AAAA,PTR,CNAME hostname, 可能的额外信息

UDP 或 TCP 端口 53 (*3):

'udp src port 53 or tcp src port 53'

'RO', IPaddr, 'TTLEx', router, possible extra info

我们识别路由器,是因为它们会发送 Time-To-Live-Exceeded 或 unreachable 消息:

'icmp[0:2] = 0x0B00 or icmp[0] = 0x03'

*1 这也会捕获 arp 请求,但这些请求会被忽略。

*2 该过滤器在技术上也会包含 SYN,但这只是少量额外数据

*3 自 1.16 版本起,仅提取 UDP 端口 53 的应答。

示例 BPF 过滤器

  1. 为了大幅减少需要解析的数据包数量,仅丢失 tcp 服务器描述字符串,不处理仅含 ACK 的数据包:
'not(tcp[13] & 0x17 = 0x10)'

这削减了需要处理的数据包数量和流量的 90% 以上,使 passer 能够跟上中等带宽的链路。

  1. 如果你对 DNS 服务器不感兴趣:
'not udp src port 53'

提取 DNS 记录需要做相当多的工作;如果你正试图跟上一条高速链路,这也可能是一个适合关闭的选项。

  1. 如果你想专注于发往或来自特定机器或网络的数据包:
'host 1.2.3.4'
'net 1.2'
下载工具