代码如下(main.go):
package mainimport ( "flag" "fmt" "net" "strings")const IPV4 = 4const IPV6 = 6func getIPType(ip string) int { for i := 0; i < len(ip); i++ { switch ip[i] { case '.': return IPV4 case ':': return IPV6 } } return 0}func main() { // Define flags macPtr := flag.String("mac", "", "MAC address") sipPtr := flag.String("sip", "", "Source IP address") dipPtr := flag.String("dip", "", "Destination IP address") vlanidPtr := flag.Int("vlanid", -1, "VLAN ID") intfNamePtr := flag.String("intf_name", "", "Interface name") // Parse flags flag.Parse() // Check if all flags are provided if *macPtr == "" || *sipPtr == "" || *dipPtr == "" || *vlanidPtr == 0 || *intfNamePtr == "" { fmt.Println("Usage: go run check.go -mac <mac> -sip <sip> -dip <dip> -vlanid <vlanid> -intf_name <intf_name>") return } // Check if the VLAN ID is valid if *vlanidPtr < 1 || *vlanidPtr > 4095 { fmt.Println("Invalid VLAN ID") return } // Check if the interface name is valid if len(*intfNamePtr) > 100 { fmt.Println("Interface name is too long") return } // Parse the MAC address mac, err := net.ParseMAC(*macPtr) if err != nil { fmt.Println("Invalid MAC address") return } // Check if the source IP address and destination IP address are of the same type if getIPType(*sipPtr) != getIPType(*dipPtr) { fmt.Println("Both source and destination IP addresses must be of the same type IPv4/IPv6") return } // Parse the source IP address sip := net.ParseIP(*sipPtr) if sip == nil { fmt.Println("Invalid source IP address") return } // Parse the destination IP address dip := net.ParseIP(*dipPtr) if dip == nil { fmt.Println("Invalid destination IP address") return } //Print the validated arguments fmt.Printf("MAC address: %s\n", mac) fmt.Printf("Source IP address: %s\n", sip) fmt.Printf("Destination IP address: %s\n", dip) fmt.Printf("VLAN ID: %d\n", *vlanidPtr) fmt.Printf("Interface name: %s\n", strings.TrimSpace(*intfNamePtr))}
编译:
go build -o check main.go
执行
% ./check --help Usage of ./check: -dip string Destination IP address -intf_name string Interface name -mac string MAC address -sip string Source IP address -vlanid int VLAN ID (default -1)
./check -mac A1:2B:C3:4D:E5:6F -sip 192.168.1.1 -dip 127.0.0.1 -intf_name abc -vlanid 10MAC address: a1:2b:c3:4d:e5:6fSource IP address: 192.168.1.1Destination IP address: 127.0.0.1VLAN ID: 10Interface name: abc