Flush using AF_UNSPEC and netfilter package

This commit is contained in:
Quentin McGaw
2026-02-25 22:03:01 +00:00
parent 2bb4deccd5
commit 6467f3b4ad
+7 -10
View File
@@ -5,6 +5,7 @@ import (
"github.com/mdlayher/netlink" "github.com/mdlayher/netlink"
"github.com/ti-mo/netfilter" "github.com/ti-mo/netfilter"
"golang.org/x/sys/unix"
) )
func (n *NetLink) FlushConntrack() error { func (n *NetLink) FlushConntrack() error {
@@ -14,17 +15,14 @@ func (n *NetLink) FlushConntrack() error {
} }
defer conn.Close() defer conn.Close()
families := [...]netfilter.ProtoFamily{netfilter.ProtoIPv4, netfilter.ProtoIPv6} const ipCtnlMsgCtDelete = netfilter.MessageType(2)
for _, family := range families { header := netfilter.Header{
const IPCtnlMsgCtDelete = 2
request, err := netfilter.MarshalNetlink(
netfilter.Header{
SubsystemID: netfilter.NFSubsysCTNetlink, SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(IPCtnlMsgCtDelete), MessageType: ipCtnlMsgCtDelete,
Family: family, Family: unix.AF_UNSPEC,
Flags: netlink.Request | netlink.Acknowledge, Flags: netlink.Request | netlink.Acknowledge,
}, }
nil) request, err := netfilter.MarshalNetlink(header, nil)
if err != nil { if err != nil {
return fmt.Errorf("encoding netlink request: %w", err) return fmt.Errorf("encoding netlink request: %w", err)
} }
@@ -33,6 +31,5 @@ func (n *NetLink) FlushConntrack() error {
if err != nil { if err != nil {
return fmt.Errorf("querying netlink request: %w", err) return fmt.Errorf("querying netlink request: %w", err)
} }
}
return nil return nil
} }