[][src]Module procfs::net

Information about the networking layer.

This module corresponds to the /proc/net directory and contains various information about the networking layer.

Example

Here's an example that will print out all of the open and listening TCP sockets, and their corresponding processes, if know. This mimics the "netstat" utility, but for TCP only. You can run this example yourself with:

cargo run --example=netstat

let all_procs = procfs::process::all_processes().unwrap();

// build up a map between socket inodes and processes:
let mut map: HashMap<u32, &Process> = HashMap::new();
for process in &all_procs {
    if let Ok(fds) = process.fd() {
        for fd in fds {
            if let FDTarget::Socket(inode) = fd.target {
                map.insert(inode, process);
            }
        }
    }
}

// get the tcp table
let tcp = procfs::net::tcp().unwrap();
let tcp6 = procfs::net::tcp6().unwrap();
println!("{:<26} {:<26} {:<15} {:<8} {}", "Local address", "Remote address", "State", "Inode", "PID/Program name");
for entry in tcp.into_iter().chain(tcp6) {
    // find the process (if any) that has an open FD to this entry's inode
    let local_address = format!("{}", entry.local_address);
    let remote_addr = format!("{}", entry.remote_address);
    let state = format!("{:?}", entry.state);
    if let Some(process) = map.get(&entry.inode) {
        println!("{:<26} {:<26} {:<15} {:<12} {}/{}", local_address, remote_addr, state, entry.inode, process.stat.pid, process.stat.comm);
    } else {
        // We might not always be able to find the process assocated with this socket
        println!("{:<26} {:<26} {:<15} {:<12} -", local_address, remote_addr, state, entry.inode);
    }
}

Structs

DeviceStatus

General statistics for a network interface/device

TcpNetEntry

An entry in the TCP socket table

UdpNetEntry

An entry in the UDP socket table

UnixNetEntry

An entry in the Unix socket tabale

Enums

TcpState
UdpState
UnixState

Functions

dev_status

Returns basic network device statistics for all interfaces

read_tcp_table

Reads TCP socket table from the provided reader.

read_udp_table

Reads UDP socket table from the provided reader.

tcp

Reads the tcp socket table

tcp6

Reads the tcp6 socket table

udp

Reads the udp socket table

udp6

Reads the udp6 socket table

unix

Reads the unix socket table