How to determine which TCP/UDP ports are being opened by a given process (linux)

lsofnetstatportprocesstcp

I know how to do the opposite (find out what process has a given port open) using lsof or netstat, but extensive research on Google hasn't helped me solve the reverse problem.

I know I could use "netstat -np" combined with some grep and sed, but it seems hacky. Is there a reversed version of "lsof -i tcp:80" that will show me all the local ports opened by a given process?

Best Answer

Take a look at the man page, you'll find that you can use the -p option to specify a process id, and the -i option to limit the display to internet domain sockets (-i4 for just ipv4 and -i6 for just ipv6). So if you string them together...

lsof -p <pid> -i

...you get not quite what you want, because by default lsof will or together your requests. So add the -a (and) flag...

lsof -p <pid> -a -i

...and you'll get a list of the IPv4 sockets open by the specified process id.