#sockets #networking #information #cross-platform #low-level #retrieve

netstat

Cross-platform library to retrieve network sockets information

3 unstable releases

Uses old Rust 2015

0.7.0 Oct 27, 2018
0.6.2 Oct 12, 2018
0.6.1 Oct 11, 2018
0.6.0 Oct 11, 2018

#17 in #retrieve

Download history 10/week @ 2023-12-10 21/week @ 2023-12-17 13/week @ 2023-12-24 12/week @ 2023-12-31 152/week @ 2024-01-07 121/week @ 2024-01-14 156/week @ 2024-01-21 91/week @ 2024-01-28 130/week @ 2024-02-04 177/week @ 2024-02-11 226/week @ 2024-02-18 235/week @ 2024-02-25 157/week @ 2024-03-03 167/week @ 2024-03-10 112/week @ 2024-03-17 131/week @ 2024-03-24

576 downloads per month
Used in lopxy

MIT/Apache

64KB
1.5K SLoC

netstat

Latest version Documentation License

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 {
        match si.protocol_socket_info {
            ProtocolSocketInfo::Tcp(tcp_si) => println!(
                "TCP {}:{} -> {}:{} {:?} - {}",
                tcp_si.local_addr,
                tcp_si.local_port,
                tcp_si.remote_addr,
                tcp_si.remote_port,
                si.associated_pids,
                tcp_si.state
            ),
            ProtocolSocketInfo::Udp(udp_si) => println!(
                "UDP {}:{} -> *:* {:?}",
                udp_si.local_addr, udp_si.local_port, si.associated_pids
            ),
        }
    }
}

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 should ideally use sysctls, but currently just parses netstat output (proper impletemention is mostly done in unused modules under src/integrations/osx folder, it waits for contributors with mac to finish it)

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

~130KB