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

listeners

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

3 unstable releases

0.2.1 Jul 12, 2024
0.2.0 Mar 27, 2024
0.1.0 Mar 14, 2024

#344 in Network programming

Download history 2720/week @ 2024-06-13 855/week @ 2024-06-20 1551/week @ 2024-06-27 1560/week @ 2024-07-04 2420/week @ 2024-07-11 1961/week @ 2024-07-18 2246/week @ 2024-07-25 2076/week @ 2024-08-01 1854/week @ 2024-08-08 1664/week @ 2024-08-15 3068/week @ 2024-08-22 2297/week @ 2024-08-29 3131/week @ 2024-09-05 2234/week @ 2024-09-12 2346/week @ 2024-09-19 1426/week @ 2024-09-26

9,766 downloads per month
Used in pik

MIT license

46KB
1K SLoC

Listeners

Crates Downloads 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.2"

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–39MB
~608K SLoC