mirror of
https://github.com/bettercap/bettercap
synced 2025-07-06 21:12:05 -07:00
refact: divided os specific code for arp parsing
This commit is contained in:
parent
6106ec80a2
commit
debdeba956
2 changed files with 43 additions and 39 deletions
39
net/arp.go
39
net/arp.go
|
@ -2,11 +2,7 @@ package net
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/evilsocket/bettercap-ng/core"
|
||||
)
|
||||
|
||||
type ArpTable map[string]string
|
||||
|
@ -17,9 +13,6 @@ var (
|
|||
arp_table = make(ArpTable)
|
||||
)
|
||||
|
||||
var ArpTableParser = regexp.MustCompile("^[^\\d\\.]+([\\d\\.]+).+\\s+([a-f0-9:]{17}).+\\s+(.+)$")
|
||||
var ArpTableTokens = 4
|
||||
|
||||
func ArpDiff(current, before ArpTable) ArpTable {
|
||||
diff := make(ArpTable)
|
||||
for ip, mac := range current {
|
||||
|
@ -53,35 +46,3 @@ func ArpParsed() bool {
|
|||
defer arp_lock.Unlock()
|
||||
return arp_parsed
|
||||
}
|
||||
|
||||
func ArpUpdate(iface string) (ArpTable, error) {
|
||||
arp_lock.Lock()
|
||||
defer arp_lock.Unlock()
|
||||
|
||||
// Signal we parsed the ARP table at least once.
|
||||
arp_parsed = true
|
||||
|
||||
// Run "arp -an" and parse the output.
|
||||
output, err := core.Exec("arp", []string{"-a", "-n"})
|
||||
if err != nil {
|
||||
return arp_table, err
|
||||
}
|
||||
|
||||
new_table := make(ArpTable)
|
||||
for _, line := range strings.Split(output, "\n") {
|
||||
m := ArpTableParser.FindStringSubmatch(line)
|
||||
if len(m) == ArpTableTokens {
|
||||
address := m[1]
|
||||
mac := m[2]
|
||||
ifname := m[3]
|
||||
|
||||
if ifname == iface {
|
||||
new_table[address] = mac
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
arp_table = new_table
|
||||
|
||||
return arp_table, nil
|
||||
}
|
||||
|
|
43
net/arp_unix.go
Normal file
43
net/arp_unix.go
Normal file
|
@ -0,0 +1,43 @@
|
|||
package net
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/evilsocket/bettercap-ng/core"
|
||||
)
|
||||
|
||||
var ArpTableParser = regexp.MustCompile("^[^\\d\\.]+([\\d\\.]+).+\\s+([a-f0-9:]{17}).+\\s+(.+)$")
|
||||
var ArpTableTokens = 4
|
||||
|
||||
func ArpUpdate(iface string) (ArpTable, error) {
|
||||
arp_lock.Lock()
|
||||
defer arp_lock.Unlock()
|
||||
|
||||
// Signal we parsed the ARP table at least once.
|
||||
arp_parsed = true
|
||||
|
||||
// Run "arp -an" and parse the output.
|
||||
output, err := core.Exec("arp", []string{"-a", "-n"})
|
||||
if err != nil {
|
||||
return arp_table, err
|
||||
}
|
||||
|
||||
new_table := make(ArpTable)
|
||||
for _, line := range strings.Split(output, "\n") {
|
||||
m := ArpTableParser.FindStringSubmatch(line)
|
||||
if len(m) == ArpTableTokens {
|
||||
address := m[1]
|
||||
mac := m[2]
|
||||
ifname := m[3]
|
||||
|
||||
if ifname == iface {
|
||||
new_table[address] = mac
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
arp_table = new_table
|
||||
|
||||
return arp_table, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue