Go module to list all TCP connections, with an option to try to find the owning PID and processname.
Works by reading /proc directly on Linux, and by executing netstat
and lsof -i
on Darwin.
Works for IPv4 and IPv6 TCP connections. Only established connections are listed; ports where something is only listening or TIME_WAITs are skipped.
If you want to find all processes you'll need to run this as root.
Tested on Linux and Darwin (10.9).
go install
Only list the connections:
cs, err := procspy.Connections(false, procspy.TcpEstablished)
for c := cs.Next(); c != nil; c = cs.Next() {
...
}
List the connections and try to find the owning process:
cs, err := procspy.Connections(true, procspy.TcpEstablished)
for c := cs.Next(); c != nil; c = cs.Next() {
...
}
(See ./example_test.go)
package main
import (
"fmt"
"github.com/platinasystems/procspy"
)
func main() {
lookupProcesses := true
cs, err := procspy.Connections(lookupProcesses, procspy.TcpEstablished)
if err != nil {
panic(err)
}
fmt.Printf("TCP Connections:\n")
for c := cs.Next(); c != nil; c = cs.Next() {
fmt.Printf(" - %v\n", c)
}
}