mirror of
https://github.com/bettercap/bettercap.git
synced 2024-11-08 06:30:13 -08:00
66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package zerogod
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
|
|
"github.com/bettercap/bettercap/v2/modules/zerogod/zeroconf"
|
|
"github.com/evilsocket/islazy/str"
|
|
yaml "gopkg.in/yaml.v3"
|
|
)
|
|
|
|
func svcEntriesToData(services map[string]*zeroconf.ServiceEntry) []ServiceData {
|
|
data := make([]ServiceData, 0)
|
|
for _, svc := range services {
|
|
// filter out empty DNS records
|
|
records := ([]string)(nil)
|
|
for _, txt := range svc.Text {
|
|
if txt = str.Trim(txt); len(txt) > 0 {
|
|
records = append(records, txt)
|
|
}
|
|
}
|
|
|
|
data = append(data, ServiceData{
|
|
Name: svc.Instance,
|
|
Service: svc.Service,
|
|
Domain: svc.Domain,
|
|
Port: svc.Port,
|
|
Records: records,
|
|
})
|
|
}
|
|
return data
|
|
}
|
|
|
|
func (mod *ZeroGod) save(address, filename string) error {
|
|
if mod.browser == nil {
|
|
return errors.New("use 'zerogod.discovery on' to start the discovery first")
|
|
}
|
|
|
|
if address == "" {
|
|
return fmt.Errorf("address cannot be empty")
|
|
}
|
|
if filename == "" {
|
|
return fmt.Errorf("filename cannot be empty")
|
|
}
|
|
|
|
if ipServices := mod.browser.GetServicesFor(address); ipServices != nil {
|
|
services := svcEntriesToData(ipServices)
|
|
data, err := yaml.Marshal(services)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = ioutil.WriteFile(filename, data, 0644)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
mod.Info("zeroconf information saved to %s", filename)
|
|
} else {
|
|
return fmt.Errorf("no mDNS information found for address %s", address)
|
|
}
|
|
|
|
return nil
|
|
}
|