go.mod: github.com/j-keck/arping v1.0.1
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
f4d2925220
commit
2eac102887
2
go.mod
2
go.mod
@ -13,7 +13,7 @@ require (
|
||||
github.com/d2g/dhcp4client v1.0.0
|
||||
github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5
|
||||
github.com/godbus/dbus/v5 v5.0.3
|
||||
github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56
|
||||
github.com/j-keck/arping v1.0.1
|
||||
github.com/mattn/go-shellwords v1.0.11
|
||||
github.com/onsi/ginkgo v1.13.0
|
||||
github.com/onsi/gomega v1.10.3
|
||||
|
3
go.sum
3
go.sum
@ -332,8 +332,9 @@ github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ
|
||||
github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56 h1:742eGXur0715JMq73aD95/FU0XpVKXqNuTnEfXsLOYQ=
|
||||
github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA=
|
||||
github.com/j-keck/arping v1.0.1 h1:XrO9juQieAQHE7DlwT7zFLUK2u3Oi/4Uz2B3ZTxvhxg=
|
||||
github.com/j-keck/arping v1.0.1/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||
|
2
vendor/github.com/j-keck/arping/README.md
generated
vendored
2
vendor/github.com/j-keck/arping/README.md
generated
vendored
@ -1,3 +1,5 @@
|
||||
[](https://pkg.go.dev/github.com/j-keck/arping)
|
||||
|
||||
# arping
|
||||
|
||||
arping is a native go library to ping a host per arp datagram, or query a host mac address
|
||||
|
36
vendor/github.com/j-keck/arping/arping.go
generated
vendored
36
vendor/github.com/j-keck/arping/arping.go
generated
vendored
@ -65,6 +65,7 @@ import (
|
||||
"net"
|
||||
"os"
|
||||
"time"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -77,6 +78,10 @@ var (
|
||||
|
||||
// Ping sends an arp ping to 'dstIP'
|
||||
func Ping(dstIP net.IP) (net.HardwareAddr, time.Duration, error) {
|
||||
if err := validateIP(dstIP); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
iface, err := findUsableInterfaceForNetwork(dstIP)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
@ -86,6 +91,10 @@ func Ping(dstIP net.IP) (net.HardwareAddr, time.Duration, error) {
|
||||
|
||||
// PingOverIfaceByName sends an arp ping over interface name 'ifaceName' to 'dstIP'
|
||||
func PingOverIfaceByName(dstIP net.IP, ifaceName string) (net.HardwareAddr, time.Duration, error) {
|
||||
if err := validateIP(dstIP); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
iface, err := net.InterfaceByName(ifaceName)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
@ -95,6 +104,10 @@ func PingOverIfaceByName(dstIP net.IP, ifaceName string) (net.HardwareAddr, time
|
||||
|
||||
// PingOverIface sends an arp ping over interface 'iface' to 'dstIP'
|
||||
func PingOverIface(dstIP net.IP, iface net.Interface) (net.HardwareAddr, time.Duration, error) {
|
||||
if err := validateIP(dstIP); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
srcMac := iface.HardwareAddr
|
||||
srcIP, err := findIPInNetworkFromIface(dstIP, iface)
|
||||
if err != nil {
|
||||
@ -114,7 +127,7 @@ func PingOverIface(dstIP net.IP, iface net.Interface) (net.HardwareAddr, time.Du
|
||||
duration time.Duration
|
||||
err error
|
||||
}
|
||||
pingResultChan := make(chan PingResult)
|
||||
pingResultChan := make(chan PingResult, 1)
|
||||
|
||||
go func() {
|
||||
// send arp request
|
||||
@ -149,12 +162,17 @@ func PingOverIface(dstIP net.IP, iface net.Interface) (net.HardwareAddr, time.Du
|
||||
case pingResult := <-pingResultChan:
|
||||
return pingResult.mac, pingResult.duration, pingResult.err
|
||||
case <-time.After(timeout):
|
||||
deinitialize()
|
||||
return nil, 0, ErrTimeout
|
||||
}
|
||||
}
|
||||
|
||||
// GratuitousArp sends an gratuitous arp from 'srcIP'
|
||||
func GratuitousArp(srcIP net.IP) error {
|
||||
if err := validateIP(srcIP); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
iface, err := findUsableInterfaceForNetwork(srcIP)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -164,6 +182,10 @@ func GratuitousArp(srcIP net.IP) error {
|
||||
|
||||
// GratuitousArpOverIfaceByName sends an gratuitous arp over interface name 'ifaceName' from 'srcIP'
|
||||
func GratuitousArpOverIfaceByName(srcIP net.IP, ifaceName string) error {
|
||||
if err := validateIP(srcIP); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
iface, err := net.InterfaceByName(ifaceName)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -173,6 +195,10 @@ func GratuitousArpOverIfaceByName(srcIP net.IP, ifaceName string) error {
|
||||
|
||||
// GratuitousArpOverIface sends an gratuitous arp over interface 'iface' from 'srcIP'
|
||||
func GratuitousArpOverIface(srcIP net.IP, iface net.Interface) error {
|
||||
if err := validateIP(srcIP); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
srcMac := iface.HardwareAddr
|
||||
broadcastMac := []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
|
||||
request := newArpRequest(srcMac, srcIP, broadcastMac, srcIP)
|
||||
@ -195,3 +221,11 @@ func EnableVerboseLog() {
|
||||
func SetTimeout(t time.Duration) {
|
||||
timeout = t
|
||||
}
|
||||
|
||||
func validateIP(ip net.IP) error {
|
||||
// ip must be a valid V4 address
|
||||
if len(ip.To4()) != net.IPv4len {
|
||||
return fmt.Errorf("not a valid v4 Address: %s", ip)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
3
vendor/github.com/j-keck/arping/go.mod
generated
vendored
Normal file
3
vendor/github.com/j-keck/arping/go.mod
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
module github.com/j-keck/arping
|
||||
|
||||
go 1.12
|
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@ -78,7 +78,7 @@ github.com/gogo/protobuf/proto
|
||||
github.com/gogo/protobuf/protoc-gen-gogo/descriptor
|
||||
# github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e
|
||||
github.com/golang/groupcache/lru
|
||||
# github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56
|
||||
# github.com/j-keck/arping v1.0.1
|
||||
## explicit
|
||||
github.com/j-keck/arping
|
||||
# github.com/mattn/go-shellwords v1.0.11
|
||||
|
Loading…
x
Reference in New Issue
Block a user