verify.go 637 B

12345678910111213141516171819202122232425262728293031323334
  1. package verify
  2. import (
  3. "fmt"
  4. "net"
  5. "quickip/internal/model"
  6. )
  7. type Service struct{}
  8. func New() *Service { return &Service{} }
  9. func (s *Service) Verify(input model.InterfaceConfig) error {
  10. iface, err := net.InterfaceByName(input.Interface)
  11. if err != nil {
  12. return err
  13. }
  14. addrs, err := iface.Addrs()
  15. if err != nil {
  16. return err
  17. }
  18. for _, addr := range addrs {
  19. ipNet, ok := addr.(*net.IPNet)
  20. if !ok || ipNet.IP.To4() == nil {
  21. continue
  22. }
  23. prefix, _ := ipNet.Mask.Size()
  24. if ipNet.IP.String() == input.IP && prefix == input.Prefix {
  25. return nil
  26. }
  27. }
  28. return fmt.Errorf("目标接口地址未按预期生效")
  29. }