#tcp-port #process #tcp #port #process-id #tcp-listener #listen

listeners

Get processes listening on a TCP port in a cross-platform way

2 unstable releases

0.2.0 Mar 27, 2024
0.1.0 Mar 14, 2024

#2 in #listen

Download history 238/week @ 2024-03-14 225/week @ 2024-03-21 859/week @ 2024-03-28 1132/week @ 2024-04-04 1100/week @ 2024-04-11 1088/week @ 2024-04-18 804/week @ 2024-04-25 921/week @ 2024-05-02 1131/week @ 2024-05-09

4,283 downloads per month

MIT license

46KB
1K SLoC

Listeners

Crates Docs CI

Rust library to get processes listening on a TCP port in a cross-platform way.

Motivation

Despite some Rust libraries to get process information already exist, none of them satisfies the need to get process ID and name of TCP listeners in a cross-platform way.

Some examples of existing libraries:

  • netstat2: doesn't provide the process name (and it's unmaintained)
  • libproc: only for Linux and macOS
  • sysinfo: doesn't expose the sockets used by each process

This library wants to fill this gap, and it aims to be:

  • Cross-platform: it currently supports Windows, Linux and macOS
  • Performant: it internally uses low-level system APIs
  • Simple: it exposes intuitive APIs to get details about the listening processes
  • Lightweight: it has only the strictly necessary dependencies

Roadmap

  • Windows
  • Linux
  • macOS
  • BSD
  • iOS
  • Android

Usage

Add this to your Cargo.toml:

[dependencies]

listeners = "0.1"

Get all the listening processes:

if let Ok(listeners) = listeners::get_all() {
    for l in listeners {
        println!("{l}");
    }
}

Output:

PID: 1088       Process name: rustrover                 Socket: [::7f00:1]:63342
PID: 609        Process name: Microsoft SharePoint      Socket: [::1]:42050
PID: 160        Process name: mysqld                    Socket: [::]:33060
PID: 160        Process name: mysqld                    Socket: [::]:3306
PID: 460        Process name: rapportd                  Socket: 0.0.0.0:50928
PID: 460        Process name: rapportd                  Socket: [::]:50928 

For more examples of usage, including how to get listening processes in a more granular way, check the examples folder.

Dependencies

~0–42MB
~640K SLoC