#sockets #networking #information #retrieve #cross-platform #version #netstat

netstat-esr

Maintained version of netstat-rs which is a cross-platform library to retrieve network sockets information

2 releases

Uses old Rust 2015

0.8.1 Jan 21, 2025
0.8.0 Jan 21, 2025

#1691 in Network programming

Download history 204/week @ 2025-01-21

204 downloads per month

MIT/Apache

51KB
1.5K SLoC

netstat-esr

Cross-platform library to retrieve network sockets information. Aims to be optimal by using low-level OS APIs instead of command line utilities. Provides unified interface and returns data structures which may have additional fields depending on platform.

Example

extern crate netstat;

use netstat::*;

fn main() {
    let af_flags = AddressFamilyFlags::IPV4 | AddressFamilyFlags::IPV6;
    let proto_flags = ProtocolFlags::TCP | ProtocolFlags::UDP;
    let sockets_info = get_sockets_info(af_flags, proto_flags).unwrap();
    for si in sockets_info {
        println!("Active connection: {}",si);
    }
}

Details

  • On Windows, library uses GetExtendedTcpTable & GetExtendedUdpTable (iphlpapi)
  • On Linux, it uses NETLINK_INET_DIAG protocol and performs pid lookup by traversing procfs
  • On OS X, it uses sysctl system calls with "net.inet.tcp.pcblist" header to populate active connections. Got tech details from FreeBSD version of netstat. Pid lookup is not ready yet!

License

Licensed under either of:

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~85–460KB
~11K SLoC