Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
passer — Passive service locator, a python sniffer that identifies servers, clients, names and much more | Kitploit
Tools/GitHubGitHub/activecm/passer
Defensive ToolsPacket Sniffing & AnalysisReconnaissanceNetwork MappingNetwork ForensicsInformation GatheringNetwork SecurityFingerprint SpoofingDNS Analysis
GitHubactivecm/passer

passer

Passive service locator, a python sniffer that identifies servers, clients, names and much more

26653118 months agoReviewed by Kitploit

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
View Repository
Share

passer

Passive service locator, a python sniffer that identifies servers, clients, names and much more

Introduction

Quick notes for getting going with passer, the passive service sniffer. You're responsible for getting permission to sniff.

Passer can work off a live packet capture or from a pcap file (command line parameter, see examples below). It reports live services and clients, ethernet cards on the lan, dns entries, operating systems, and routers - all passively!

If you're using windows or your paths to the support files don't match mine for some other reason, let me know where they are and I'll be glad to update the script.

Installation

Requirements

  • Python >=2.4 and <3.0
  • Python libraries (see requirements.txt)
    • ipaddress
    • pytz
    • scapy>=2.4.0

Optional (but recommended)

  • nmap
    • for Ethernet manufacturers and service strings
  • ettercap, wireshark, and/or arp-scan
    • for more Ethernet manufacturers
  • p0f version 2
    • for the OS fingerprint file

Ubuntu/Debian and deb-based distros

# 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 and rpm-based distros

# 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 (incomplete)

To install scapy, see the installation guide.

Docker

Passer also comes packaged as a Docker image. If you don't already have Docker here is a quick and dirty way to install it on Linux:

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

Otherwise, follow the install instructions for your operating system.

For most uses, we recommend the passer script included in this repo. This script will handle all docker-specific

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

You can then use this script just as you would in any of the examples below. For example:

./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

In order to stop passer run:

docker stop passer

Examples

Sniff live as root

/path/to/passer.py

This sniffs from all network interfaces and sends all output lines to your console.

Sniff live as a non-root user

sudo /path/to/passer.py

or

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

Sniff live as root, but only from one interface

/path/to/passer.py -i IfaceName

Running route should give some live interfaces you might use.

❕ -i is incompatible with -r.

Read packets from a pcap file; no root privileges needed

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

❕ -r is incompatible with -i.

Accept raw pcap data on stdin

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...

This lets you capture packets with any tool that can save packets to a pcap file, and later process them with passer on a different system.

Save output lines to a text file for later processing

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

Suppress warnings and other debugging info

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

Show help screen

/path/to/passer.py -h

Save "odd"/unhandled packets to a pcap file

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

This is generally intended for the development process; packets saved to this file are ones that need to have signatures written. Contributions of odd packets, descriptions of services, and patches to the program are gratefully accepted.

Apply a BPF filter to limit which packets are processed

This should be as simple as placing the BPF filter in single quotes at the end of the command line. As of version 1.16, the underlying library does not appear to successfully use the supplied filter, but there's a workaround. Use tcpdump to do the filtering, and hand the pared-down set of packets to passer on stdin, like above:

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

See the "Sample filters" section, below, for some suggestions of filters to use in either capturing packets in advance or live sniffing.

Troubleshooting

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

You're probably trying to sniff live as a non-root user. Either log in as root, use sudo/su, or work with pcap files.

If passer crashes or won't work on your system, please make an issue that includes the error message, if any, and any details about your operating system.

Output format

Passer's output goes to stdout, and if you give the command line parameter -l /path/to/logfile, to that file as well. Here's the format:

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
  • Column 1: A 2 letter code for the record type
  • Column 2: The IP address being characterized.
  • Column 3: The protocol involved, or "how do we know this?"
  • Column 4: the state of the object being described
  • Column 5: additional information about the object

Lines are comma separated for easy loading into a spreadsheet or SQL import. None of the fields should contain commas. There is a sample output file at http://www.stearns.org/passer/passer-sample-log.txt .

Here are some examples of how to get the data you want out of these lines:

  1. Remove duplicate lines:
cat /var/tmp/passer-log | sort -u | less
  1. Remove duplicate lines and group all records for a given IP together:
cat /var/tmp/passer-log | sort -t, -k2 -u | less
  1. Grab just the DNS and Router records:
cat /var/tmp/passer-log | sort -u | egrep '(^DN|^RO)' | less
  1. See all records for a particular IP address:
cat /var/tmp/passer-log | sort -u | grep ',192\.168\.0\.17,' | less
  1. See all records for a particular network:
cat /var/tmp/passer-log | sort -u | grep ',192\.168\.' | less
  1. See all machines that are listing on TCP port 25 (smtp servers):
cat /var/tmp/passer-log | sort -u | grep ',TCP_25,listening,' | less
  1. Don't display closed ports:
cat /var/tmp/passer-log | sort -u | grep -v ',closed,' | less
  1. Only display closed ports:
cat /var/tmp/passer-log | sort -u | grep ',closed,' | less
Download Tool