mirror of
https://github.com/bettercap/bettercap
synced 2025-08-14 02:36:57 -07:00
new: working on win32 user space packet routing
This commit is contained in:
parent
ebcd59f4ba
commit
d54cac6355
2 changed files with 42 additions and 2 deletions
|
@ -32,6 +32,8 @@ type Stats struct {
|
|||
Errors uint64
|
||||
}
|
||||
|
||||
type PacketHandler func(eth *layers.Ethernet, ip4 *layers.IPv4, pkt gopacket.Packet)
|
||||
|
||||
type Queue struct {
|
||||
sync.Mutex
|
||||
|
||||
|
@ -45,6 +47,7 @@ type Queue struct {
|
|||
handle *pcap.Handle
|
||||
source *gopacket.PacketSource
|
||||
active bool
|
||||
router PacketHandler
|
||||
}
|
||||
|
||||
func NewQueue(iface *bnet.Endpoint) (q *Queue, err error) {
|
||||
|
@ -55,6 +58,7 @@ func NewQueue(iface *bnet.Endpoint) (q *Queue, err error) {
|
|||
|
||||
iface: iface,
|
||||
active: true,
|
||||
router: nil,
|
||||
}
|
||||
|
||||
if q.handle, err = pcap.OpenLive(iface.Name(), 1024, true, pcap.BlockForever); err != nil {
|
||||
|
@ -115,6 +119,13 @@ func (q *Queue) trackActivity(eth *layers.Ethernet, ip4 *layers.IPv4, address ne
|
|||
}
|
||||
}
|
||||
|
||||
func (q *Queue) Route(r PacketHandler) {
|
||||
q.Lock()
|
||||
defer q.Unlock()
|
||||
|
||||
q.router = r
|
||||
}
|
||||
|
||||
func (q *Queue) worker() {
|
||||
for pkt := range q.source.Packets() {
|
||||
if q.active == false {
|
||||
|
@ -135,6 +146,10 @@ func (q *Queue) worker() {
|
|||
eth := leth.(*layers.Ethernet)
|
||||
ip4 := lip4.(*layers.IPv4)
|
||||
|
||||
if q.router != nil {
|
||||
q.router(eth, ip4, pkt)
|
||||
}
|
||||
|
||||
// coming from our network
|
||||
if bytes.Compare(q.iface.IP, ip4.SrcIP) != 0 && q.iface.Net.Contains(ip4.SrcIP) {
|
||||
q.trackActivity(eth, ip4, ip4.SrcIP, pktSize, true)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue