Skip to content

Commit

Permalink
feat(fing): update windows
Browse files Browse the repository at this point in the history
更新了 windows 下的 send arp
更新了 并发检测
更新了 多网卡检测
  • Loading branch information
abserari committed Feb 4, 2021
1 parent 353a858 commit 9746b90
Show file tree
Hide file tree
Showing 9 changed files with 138 additions and 0 deletions.
15 changes: 15 additions & 0 deletions fing/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
https://blog.cyeam.com/network/2015/03/16/fing

探测局域网里面的设备
16 March 2015
IMG-THUMBNAIL

用Golang实现Fing的功能。
之前用了一个牛逼的App,叫做Fing,它可以获取到本地局域网里面所有设备的IP、MAC地址和设备厂商。一直觉得很牛逼,今天好好想了想,发现也没那么多神秘。

穷举局域网里的IP
局域网IP一般有192和10两种形式。一般来说,10开始的局域网高端一些,能容纳的设备比较多。

穷举所有IP,有一个方式是通过trancert命令,记录访问某个网站经过的路径,那么第一条路径就是访问路由器,得到路由器IP之后,按最后一部分进行穷举。

但是这个方法有点麻烦,简化一点的,就是获取当前设备在局域网里面的IP,以此IP进行穷举。通过Golang获取IP的方法可以参考[1]。获取当前设备IP的方式可以参考:
13 changes: 13 additions & 0 deletions fing/arp/arp.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package main

import (
"fmt"

"github.com/mostlygeek/arp"
)

func main() {
for ip, _ := range arp.Table() {
fmt.Printf("%s : %s\n", ip, arp.Search(ip))
}
}
15 changes: 15 additions & 0 deletions fing/arp_linux.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// +build !windows

package fing

import (
"net"
"time"

"github.com/j-keck/arping"
)

func Mac(ip string) (net.HardwareAddr, time.Duration, error) {
dstIP := net.ParseIP(ip)
return arping.Ping(dstIP)
}
61 changes: 61 additions & 0 deletions fing/arp_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// +build windows

package fing

import (
"fmt"
"log"
"net"
"syscall"
"time"
"unsafe"
)

var SendARP = syscall.MustLoadDLL("iphlpapi.dll").MustFindProc("SendARP")

func ip4ToUint32(ip net.IP) (uint32, error) {
ip = ip.To4()
if ip == nil {
return 0, fmt.Errorf("ip address %v is not ip4", ip)
}
var ret uint32
for i := 4; i > 0; i-- {
ret <<= 8
ret += uint32(ip[i-1])
}
return ret, nil
}

func Mac(ip string) (net.HardwareAddr, time.Duration, error) {
dstIP := net.ParseIP(ip)
haddr, err := sendARP(dstIP)
return haddr, time.Duration(0), err
}

func sendARP(ip net.IP) (net.HardwareAddr, error) {
dst, err := ip4ToUint32(ip)
if err != nil {
return nil, err
}
mac := []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
n := uint32(len(mac))
ret, _, _ := SendARP.Call(
uintptr(dst),
0,
uintptr(unsafe.Pointer(&mac[0])),
uintptr(unsafe.Pointer(&n)))
if ret != 0 {
return nil, syscall.Errno(ret)
}
return mac, nil
}

// ExampleARP -
func ExampleARP() {
ip := "192.168.0.250"
mac, _, err := Mac(ip)
if err != nil {
log.Fatalf("could not find MAC for %q: %v", ip, err)
}
fmt.Printf("MAC address for %v is %v\n", ip, mac)
}
1 change: 1 addition & 0 deletions fing/go-ouitools
Submodule go-ouitools added at ac8139
9 changes: 9 additions & 0 deletions fing/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module github.com/abserari/quicksilver/fing

go 1.15

require (
github.com/dutchcoders/go-ouitools v0.0.0-20150909074929-ac8139d3326a
github.com/j-keck/arping v1.0.1
github.com/mostlygeek/arp v0.0.0-20170424181311-541a2129847a
)
6 changes: 6 additions & 0 deletions fing/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
github.com/dutchcoders/go-ouitools v0.0.0-20150909074929-ac8139d3326a h1:k0tlcLlo0xiIQ+PsvXHcMw5lmrWJ2dgtplMk5SnvAuw=
github.com/dutchcoders/go-ouitools v0.0.0-20150909074929-ac8139d3326a/go.mod h1:iw2+sjeXZHqxa3T+ufyw4bBRZyfp5B4prg1YPMHV4V0=
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/mostlygeek/arp v0.0.0-20170424181311-541a2129847a h1:AfneHvfmYgUIcgdUrrDFklLdEzQAvG9AKRTe1x1mx/0=
github.com/mostlygeek/arp v0.0.0-20170424181311-541a2129847a/go.mod h1:jZxafo9CAqaKFQE4zitrg5QNlA6CXUsjwXPlIppF3tk=
6 changes: 6 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,24 @@ go 1.14

require (
github.com/GetStream/stream-go2 v3.2.1+incompatible // indirect
github.com/MarinX/goble v0.0.0-20170619134522-11697b9cda5d
github.com/MarinX/serial v0.0.0-20150614192010-79ee6244367d // indirect
github.com/caddyserver/caddy v1.0.5
github.com/dutchcoders/go-ouitools v0.0.0-20150909074929-ac8139d3326a
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8
github.com/fsnotify/fsnotify v1.4.9
github.com/gin-gonic/gin v1.6.3
github.com/go-redis/redis/v7 v7.4.0
github.com/go-sql-driver/mysql v1.5.0
github.com/google/go-github/v33 v33.0.0 // indirect
github.com/gorilla/mux v1.7.4
github.com/influxdata/influxdb-client-go/v2 v2.2.0
github.com/j-keck/arping v1.0.1
github.com/jinzhu/configor v1.2.0 // indirect
github.com/jinzhu/gorm v1.9.16
github.com/json-iterator/go v1.1.10
github.com/mattn/go-sqlite3 v2.0.3+incompatible
github.com/mostlygeek/arp v0.0.0-20170424181311-541a2129847a
github.com/nats-io/nats-server/v2 v2.1.8 // indirect
github.com/nats-io/nats.go v1.10.0
github.com/nats-io/nuid v1.0.1
Expand Down
12 changes: 12 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym
github.com/DataDog/sketches-go v0.0.0-20190923095040-43f19ad77ff7/go.mod h1:Q5DbzQ+3AkgGwymQO7aZFNP7ns2lZKGtvRBzRXfdi60=
github.com/GetStream/stream-go2 v3.2.1+incompatible h1:hvTIS7EUkvOMyJvizMPiIuhKeM/6yLjd3ABvC45ZakA=
github.com/GetStream/stream-go2 v3.2.1+incompatible/go.mod h1:aZVTfyICTDMILqfEe7yd+65nbo+/xy2Lz1KMv75fOR0=
github.com/MarinX/goble v0.0.0-20170619134522-11697b9cda5d h1:twD4UeKnvG2Cz9S19i6amczl/7fu7yraBCaYlwteKBc=
github.com/MarinX/goble v0.0.0-20170619134522-11697b9cda5d/go.mod h1:9Z+yoL3/Bo8gcyZy+fuZaMZvBJgt6cnB3KzfeKkOmK0=
github.com/MarinX/serial v0.0.0-20150614192010-79ee6244367d h1:cN4CW++8xk+ik+XhFqWtMkiy7p8YPMDrESBp6I4Ys3U=
github.com/MarinX/serial v0.0.0-20150614192010-79ee6244367d/go.mod h1:PmQFcUhmMkIn+G0RrO9wkG10FpwaO/phsV76wNRARuQ=
github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks=
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
Expand Down Expand Up @@ -116,6 +120,8 @@ github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44am
github.com/dnaeon/go-vcr v0.0.0-20180814043457-aafff18a5cc2/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/dnsimple/dnsimple-go v0.30.0/go.mod h1:O5TJ0/U6r7AfT8niYNlmohpLbCSG+c71tQlGr9SeGrg=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dutchcoders/go-ouitools v0.0.0-20150909074929-ac8139d3326a h1:k0tlcLlo0xiIQ+PsvXHcMw5lmrWJ2dgtplMk5SnvAuw=
github.com/dutchcoders/go-ouitools v0.0.0-20150909074929-ac8139d3326a/go.mod h1:iw2+sjeXZHqxa3T+ufyw4bBRZyfp5B4prg1YPMHV4V0=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
Expand All @@ -134,6 +140,8 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54=
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
Expand Down Expand Up @@ -296,6 +304,8 @@ github.com/influxdata/influxdb-client-go/v2 v2.2.0 h1:2R/le0s/MZpHtc+ijuXKe2c4KG
github.com/influxdata/influxdb-client-go/v2 v2.2.0/go.mod h1:fa/d1lAdUHxuc1jedx30ZfNG573oQTQmUni3N6pcW+0=
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU=
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo=
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/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o=
github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8=
github.com/jinzhu/configor v1.2.0 h1:u78Jsrxw2+3sGbGMgpY64ObKU4xWCNmNRJIjGVqxYQA=
Expand Down Expand Up @@ -400,6 +410,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
github.com/mostlygeek/arp v0.0.0-20170424181311-541a2129847a h1:AfneHvfmYgUIcgdUrrDFklLdEzQAvG9AKRTe1x1mx/0=
github.com/mostlygeek/arp v0.0.0-20170424181311-541a2129847a/go.mod h1:jZxafo9CAqaKFQE4zitrg5QNlA6CXUsjwXPlIppF3tk=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04/go.mod h1:5sN+Lt1CaY4wsPvgQH/jsuJi4XO2ssZbdsIizr4CVC8=
github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0=
Expand Down

0 comments on commit 9746b90

Please sign in to comment.