Is there a way to get a list of all open sockets ( socket address or socket descriptor ) in Linux using C in user-space or kernel?
Thank you
Is there a way to get a list of all open sockets ( socket address or socket descriptor ) in Linux using C in user-space or kernel?
Thank you
This program may be useful for you and demonstrates how to parse the /net/proc/* files sockstat.c
In directory /proc/self/fd there are fake symlinks giving you all your open file descriptors - sockets give something like:
Iterate them using opendir, readdir() and then interrogate them using readlink()
If you know that FD 4 is a socket, you can then call getsockname() on it to get the local address family, address etc, if bound.
Open and read the following:
/proc/net/tcp
- a list of open TCP sockets/proc/net/udp
- a list of open UDP sockets/proc/net/raw
- a list all the "raw" socketsThese are like "regular" files that you open and read with a filehandle and will give you all the information you could possibly need about each socket.
The raw data can be found at /proc/net/tcp, /proc/net/udp, etc. Refer to the header at the first line for a (terse) description.