mirror of
https://github.com/safing/portmaster
synced 2025-09-01 18:19:12 +00:00
66 lines
2.1 KiB
Go
66 lines
2.1 KiB
Go
// +build linux
|
|
|
|
package proc
|
|
|
|
import (
|
|
"errors"
|
|
"net"
|
|
)
|
|
|
|
const (
|
|
unidentifiedProcessID = -1
|
|
)
|
|
|
|
// GetTCP4PacketInfo searches the network state tables for a TCP4 connection
|
|
func GetTCP4PacketInfo(localIP net.IP, localPort uint16, remoteIP net.IP, remotePort uint16, pktDirection bool) (pid int, direction bool, err error) {
|
|
return search(TCP4, localIP, localPort, pktDirection)
|
|
}
|
|
|
|
// GetTCP6PacketInfo searches the network state tables for a TCP6 connection
|
|
func GetTCP6PacketInfo(localIP net.IP, localPort uint16, remoteIP net.IP, remotePort uint16, pktDirection bool) (pid int, direction bool, err error) {
|
|
return search(TCP6, localIP, localPort, pktDirection)
|
|
}
|
|
|
|
// GetUDP4PacketInfo searches the network state tables for a UDP4 connection
|
|
func GetUDP4PacketInfo(localIP net.IP, localPort uint16, remoteIP net.IP, remotePort uint16, pktDirection bool) (pid int, direction bool, err error) {
|
|
return search(UDP4, localIP, localPort, pktDirection)
|
|
}
|
|
|
|
// GetUDP6PacketInfo searches the network state tables for a UDP6 connection
|
|
func GetUDP6PacketInfo(localIP net.IP, localPort uint16, remoteIP net.IP, remotePort uint16, pktDirection bool) (pid int, direction bool, err error) {
|
|
return search(UDP6, localIP, localPort, pktDirection)
|
|
}
|
|
|
|
func search(protocol uint8, localIP net.IP, localPort uint16, pktDirection bool) (pid int, direction bool, err error) {
|
|
|
|
var status uint8
|
|
if pktDirection {
|
|
pid, status = GetPidOfIncomingConnection(localIP, localPort, protocol)
|
|
if pid >= 0 {
|
|
return pid, true, nil
|
|
}
|
|
// pid, status = GetPidOfConnection(localIP, localPort, protocol)
|
|
// if pid >= 0 {
|
|
// return pid, false, nil
|
|
// }
|
|
} else {
|
|
pid, status = GetPidOfConnection(localIP, localPort, protocol)
|
|
if pid >= 0 {
|
|
return pid, false, nil
|
|
}
|
|
// pid, status = GetPidOfIncomingConnection(localIP, localPort, protocol)
|
|
// if pid >= 0 {
|
|
// return pid, true, nil
|
|
// }
|
|
}
|
|
|
|
switch status {
|
|
case NoSocket:
|
|
return unidentifiedProcessID, direction, errors.New("could not find socket")
|
|
case NoProcess:
|
|
return unidentifiedProcessID, direction, errors.New("could not find PID")
|
|
default:
|
|
return unidentifiedProcessID, direction, nil
|
|
}
|
|
|
|
}
|