From fead2008087e2ad09de01aa21c028a56e003b02f Mon Sep 17 00:00:00 2001 From: Odboy Date: Tue, 3 Nov 2026 20:41:58 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E5=8F=AA=E5=B1=95=E7=A4=BAipv4?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/executor/netiface.go | 38 +++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/internal/executor/netiface.go b/internal/executor/netiface.go index 4aacdeb..612a78f 100644 --- a/internal/executor/netiface.go +++ b/internal/executor/netiface.go @@ -4,9 +4,10 @@ import ( "context" "fmt" "net" + "strings" ) -// runNetIface implements `kopsc net iface`: show network interfaces and IPs. +// runNetIface implements `kopsc net iface`: show network interfaces with IPv4 addresses. func runNetIface(ctx context.Context, req BuiltinRequest) error { ifaces, err := net.Interfaces() if err != nil { @@ -14,11 +15,32 @@ func runNetIface(ctx context.Context, req BuiltinRequest) error { } for _, iface := range ifaces { - // Skip loopback if not requested + // Skip loopback if iface.Flags&net.FlagLoopback != 0 { continue } + // Get IP addresses + addrs, err := iface.Addrs() + if err != nil { + continue + } + + // Filter IPv4 addresses only + var ipv4Addrs []string + for _, addr := range addrs { + addrStr := addr.String() + // IPv4 addresses contain '.' but not ':' + if strings.Contains(addrStr, ".") && !strings.Contains(addrStr, ":") { + ipv4Addrs = append(ipv4Addrs, addrStr) + } + } + + // Skip if no IPv4 address + if len(ipv4Addrs) == 0 { + continue + } + // Status status := "DOWN" if iface.Flags&net.FlagUp != 0 { @@ -32,17 +54,11 @@ func runNetIface(ctx context.Context, req BuiltinRequest) error { fmt.Fprintf(req.Stdout, " MAC: %s\n", iface.HardwareAddr.String()) } - // IP addresses - addrs, err := iface.Addrs() - if err != nil { - continue - } - for _, addr := range addrs { - fmt.Fprintf(req.Stdout, " IP: %s\n", addr.String()) + // IPv4 addresses only + for _, addr := range ipv4Addrs { + fmt.Fprintf(req.Stdout, " IPv4: %s\n", addr) } - // Flags - fmt.Fprintf(req.Stdout, " 标志: %s\n", iface.Flags.String()) fmt.Fprintln(req.Stdout) }