https://github.com/gyulyvgc/listeners
Get processes listening on a TCP port in a cross-platform way
https://github.com/gyulyvgc/listeners
network-programming rust tcp
Last synced: about 1 year ago
JSON representation
Get processes listening on a TCP port in a cross-platform way
- Host: GitHub
- URL: https://github.com/gyulyvgc/listeners
- Owner: GyulyVGC
- License: mit
- Created: 2024-02-21T21:04:56.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-19T12:11:01.000Z (about 1 year ago)
- Last Synced: 2025-03-29T06:01:36.827Z (about 1 year ago)
- Topics: network-programming, rust, tcp
- Language: Rust
- Homepage:
- Size: 157 KB
- Stars: 51
- Watchers: 3
- Forks: 6
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Listene*rs*
[](https://crates.io/crates/listeners)
[](https://crates.io/crates/listeners)
[](https://docs.rs/listeners/latest/)
[](https://github.com/GyulyVGC/listeners/actions/)
**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](https://crates.io/crates/netstat2): doesn't provide the process name (and it's unmaintained)
- [libproc](https://crates.io/crates/libproc): only for Linux and macOS
- [sysinfo](https://crates.io/crates/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
- [x] Windows
- [x] Linux
- [x] macOS
- [ ] BSD
- [ ] iOS
- [ ] Android
## Usage
Add this to your `Cargo.toml`:
``` toml
[dependencies]
listeners = "0.2"
```
Get all the listening processes:
``` rust
if let Ok(listeners) = listeners::get_all() {
for l in listeners {
println!("{l}");
}
}
```
Output:
``` text
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`](https://github.com/GyulyVGC/listeners/tree/main/examples) folder.