mirror of
https://github.com/bettercap/bettercap
synced 2025-08-19 13:09:49 -07:00
balls
This commit is contained in:
parent
42fc639c10
commit
318932453c
2 changed files with 35 additions and 38 deletions
35
net/arp.go
35
net/arp.go
|
@ -2,7 +2,10 @@ package net
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/evilsocket/bettercap-ng/core"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ArpTable map[string]string
|
type ArpTable map[string]string
|
||||||
|
@ -13,6 +16,38 @@ var (
|
||||||
arpTable = make(ArpTable)
|
arpTable = make(ArpTable)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func ArpUpdate(iface string) (ArpTable, error) {
|
||||||
|
arpLock.Lock()
|
||||||
|
defer arpLock.Unlock()
|
||||||
|
|
||||||
|
// Signal we parsed the ARP table at least once.
|
||||||
|
arpWasParsed = true
|
||||||
|
|
||||||
|
// Run "arp -an" (darwin) or "ip neigh" (linux) and parse the output
|
||||||
|
output, err := core.Exec(ArpCmd, ArpCmdOpts)
|
||||||
|
if err != nil {
|
||||||
|
return arpTable, err
|
||||||
|
}
|
||||||
|
|
||||||
|
newTable := make(ArpTable)
|
||||||
|
for _, line := range strings.Split(output, "\n") {
|
||||||
|
m := ArpTableParser.FindStringSubmatch(line)
|
||||||
|
if len(m) == ArpTableTokens {
|
||||||
|
address := m[ArpTableTokenIndex[0]]
|
||||||
|
mac := m[ArpTableTokenIndex[1]]
|
||||||
|
ifname := m[ArpTableTokenIndex[2]]
|
||||||
|
|
||||||
|
if ifname == iface {
|
||||||
|
newTable[address] = mac
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
arpTable = newTable
|
||||||
|
|
||||||
|
return arpTable, nil
|
||||||
|
}
|
||||||
|
|
||||||
func ArpLookup(iface string, address string, refresh bool) (string, error) {
|
func ArpLookup(iface string, address string, refresh bool) (string, error) {
|
||||||
// Refresh ARP table if first run or if a force refresh has been instructed.
|
// Refresh ARP table if first run or if a force refresh has been instructed.
|
||||||
if ArpParsed() == false || refresh == true {
|
if ArpParsed() == false || refresh == true {
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
package net
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/evilsocket/bettercap-ng/core"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func ArpUpdate(iface string) (ArpTable, error) {
|
|
||||||
arpLock.Lock()
|
|
||||||
defer arpLock.Unlock()
|
|
||||||
|
|
||||||
// Signal we parsed the ARP table at least once.
|
|
||||||
arpWasParsed = true
|
|
||||||
|
|
||||||
// Run "arp -an" (darwin) or "ip neigh" (linux) and parse the output
|
|
||||||
output, err := core.Exec(ArpCmd, ArpCmdOpts)
|
|
||||||
if err != nil {
|
|
||||||
return arpTable, err
|
|
||||||
}
|
|
||||||
|
|
||||||
newTable := make(ArpTable)
|
|
||||||
for _, line := range strings.Split(output, "\n") {
|
|
||||||
m := ArpTableParser.FindStringSubmatch(line)
|
|
||||||
if len(m) == ArpTableTokens {
|
|
||||||
address := m[ArpTableTokenIndex[0]]
|
|
||||||
mac := m[ArpTableTokenIndex[1]]
|
|
||||||
ifname := m[ArpTableTokenIndex[2]]
|
|
||||||
|
|
||||||
if ifname == iface {
|
|
||||||
newTable[address] = mac
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
arpTable = newTable
|
|
||||||
|
|
||||||
return arpTable, nil
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue