pretty-ip/main.go

50 lines
1.2 KiB
Go

package main
import (
"fmt"
"net"
"github.com/charmbracelet/lipgloss"
)
func main() {
// Define styles
headerStyle := lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("63"))
ipStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("203"))
upStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("42"))
downStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("196"))
addrStyle := lipgloss.NewStyle().Faint(true)
interfaces, err := net.Interfaces()
if err != nil {
fmt.Println("Error:", err)
return
}
for _, iface := range interfaces {
state := downStyle.Render("DOWN")
if iface.Flags&net.FlagUp != 0 {
state = upStyle.Render("UP")
}
fmt.Print(headerStyle.Render(iface.Name), " ")
fmt.Printf(addrStyle.Render(" %s"), iface.HardwareAddr)
fmt.Printf(addrStyle.Render(" %d"), iface.MTU)
fmt.Printf(" %s\n", state)
addrs, err := iface.Addrs()
if err != nil {
fmt.Println(" Error getting addresses:", err)
continue
}
for _, addr := range addrs {
ipNet, ok := addr.(*net.IPNet)
if !ok || ipNet.IP.To4() == nil {
continue // Skip if not an IPv4 address
}
fmt.Println(" ", ipStyle.Render(addr.String()))
}
fmt.Println()
}
}