#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

#409 in Network programming

Download history 2108/week @ 2024-07-15 2332/week @ 2024-07-22 2174/week @ 2024-07-29 1982/week @ 2024-08-05 1474/week @ 2024-08-12 2328/week @ 2024-08-19 2997/week @ 2024-08-26 2600/week @ 2024-09-02 2386/week @ 2024-09-09 2548/week @ 2024-09-16 2147/week @ 2024-09-23 1819/week @ 2024-09-30 1349/week @ 2024-10-07 1155/week @ 2024-10-14 1430/week @ 2024-10-21 984/week @ 2024-10-28

4,990 downloads per month
Used in 2 crates

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