mirror of
https://github.com/safing/portmaster
synced 2025-09-01 18:19:12 +00:00
75 lines
1.5 KiB
Go
75 lines
1.5 KiB
Go
package reference
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
protocolNames = map[uint8]string{
|
|
1: "ICMP",
|
|
2: "IGMP",
|
|
6: "TCP",
|
|
17: "UDP",
|
|
27: "RDP",
|
|
58: "ICMP6",
|
|
33: "DCCP",
|
|
136: "UDP-LITE",
|
|
}
|
|
|
|
protocolNumbers = map[string]uint8{
|
|
"ICMP": 1,
|
|
"IGMP": 2,
|
|
"TCP": 6,
|
|
"UDP": 17,
|
|
"RDP": 27,
|
|
"DCCP": 33,
|
|
"ICMP6": 58,
|
|
"UDP-LITE": 136,
|
|
}
|
|
)
|
|
|
|
// GetProtocolName returns the name of a IP protocol number.
|
|
func GetProtocolName(protocol uint8) (name string) {
|
|
name, ok := protocolNames[protocol]
|
|
if ok {
|
|
return name
|
|
}
|
|
return strconv.Itoa(int(protocol))
|
|
}
|
|
|
|
// GetProtocolNumber returns the number of a IP protocol name.
|
|
func GetProtocolNumber(protocol string) (number uint8, ok bool) {
|
|
number, ok = protocolNumbers[strings.ToUpper(protocol)]
|
|
if ok {
|
|
return number, true
|
|
}
|
|
return 0, false
|
|
}
|
|
|
|
// IsPacketProtocol returns whether the given protocol number is a known packet based protocol.
|
|
// Note: Not fully complete. Calling IsPacketProtocol() does not equal calling !IsStreamProtocol().
|
|
func IsPacketProtocol(protocol uint8) bool {
|
|
switch protocol {
|
|
case 1, // ICMP
|
|
17, // UDP
|
|
27, // RDP
|
|
58, // ICMP6
|
|
33, // DCCP
|
|
136: // UDP-LITE
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// IsStreamProtocol returns whether the given protocol number is a known stream based protocol.
|
|
// Note: Not fully complete. Calling IsPacketProtocol() does not equal calling !IsStreamProtocol().
|
|
func IsStreamProtocol(protocol uint8) bool {
|
|
switch protocol {
|
|
case 6: // TCP
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|