Linux API to determine sockets owned by a process

后端 未结 7 2109
被撕碎了的回忆
被撕碎了的回忆 2020-12-23 01:50

Is there a Linux library that will enable me to tell what IP sockets are owned by what processes? I guess I\'m looking for the programmatic equivalent of lsof -i

7条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-23 02:14

    To determine sockets owned by a process you can just use netstat. Here's an example w/output (shortened) of netstat with options that will do what you want.

    $ sudo netstat -apeen
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
    tcp        0      0 127.0.0.1:8118          0.0.0.0:*               LISTEN      138        744850      13248/privoxy   
    tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      117        9612        2019/postgres   
    udp        0      0 127.0.0.1:51960         127.0.0.1:51960         ESTABLISHED 117        7957        2019/postgres   
    udp        0      0 0.0.0.0:68              0.0.0.0:*                           0          7740        1989/dhclient   
    Active UNIX domain sockets (servers and established)
    Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path
    unix  2      [ ACC ]     STREAM     LISTENING     7937     2019/postgres       /var/run/postgresql/.s.PGSQL.5432
    unix  2      [ ACC ]     STREAM     LISTENING     958058   8080/emacs          /tmp/emacs1000/server
    unix  2      [ ACC ]     STREAM     LISTENING     6969     1625/Xorg           /tmp/.X11-unix/X0
    unix  2      [ ]         DGRAM                    9325     1989/dhclient       
    unix  3      [ ]         STREAM     CONNECTED     7720     1625/Xorg           @/tmp/.X11-unix/X0
    

    Make sure you run netstat as root otherwise you'll get this message:

    (Not all processes could be identified, non-owned process info
     will not be shown, you would have to be root to see it all.)
    

    An explanation of the -apeen options from the netstat manpage:

    -a, --all
        Show both listening and non-listening sockets. With the
        --interfaces option, show interfaces that are not up
    
    -p, --program
        Show the PID and name of the program to which each socket
        belongs.
    
    -e, --extend
        Display additional information. Use this option twice for
        maximum detail.
    
    --numeric , -n
        Show numerical addresses instead of trying to determine symbolic host, port or user names.
    
    --numeric-hosts
        shows numerical host addresses but does not affect the resolution of port or user names.
    
    --numeric-ports
        shows numerical port numbers but does not affect the resolution of host or user names.
    
    --numeric-users
        shows numerical user IDs but does not affect the resolution of host or port names.
    

提交回复
热议问题