mirror of
https://github.com/bettercap/bettercap
synced 2025-08-21 05:53:20 -07:00
misc: small fix or general refactoring i did not bother commenting
This commit is contained in:
parent
b0a197b377
commit
17ba1be16c
12 changed files with 239 additions and 498 deletions
100
modules/zerogod/zerogod_service.go
Normal file
100
modules/zerogod/zerogod_service.go
Normal file
|
@ -0,0 +1,100 @@
|
|||
package zerogod
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
"github.com/bettercap/bettercap/v2/zeroconf"
|
||||
"github.com/evilsocket/islazy/tui"
|
||||
)
|
||||
|
||||
type ServiceData struct {
|
||||
Name string `yaml:"name"` // Instance name (e.g. "My web page")
|
||||
Service string `yaml:"service"` // Service name (e.g. _http._tcp.)
|
||||
Domain string `yaml:"domain"` // If blank, assumes "local"
|
||||
Port int `yaml:"port"` // Service port
|
||||
Records []string `yaml:"records,omitempty"` // Service DNS text records
|
||||
Responder string `yaml:"responder,omitempty"` // Optional IP to use instead of our tcp acceptor
|
||||
IPP map[string]string `yaml:"ipp,omitempty"` // Optional IPP attributes map
|
||||
|
||||
server *zeroconf.Server
|
||||
}
|
||||
|
||||
func (svc ServiceData) FullName() string {
|
||||
return fmt.Sprintf("%s.%s.%s",
|
||||
strings.Trim(svc.Name, "."),
|
||||
strings.Trim(svc.Service, "."),
|
||||
strings.Trim(svc.Domain, "."))
|
||||
}
|
||||
|
||||
func (svc *ServiceData) Register(mod *ZeroGod) (err error) {
|
||||
// now create it again to actually advertise
|
||||
if svc.Responder == "" {
|
||||
// use our own IP
|
||||
if svc.server, err = zeroconf.Register(
|
||||
svc.Name,
|
||||
svc.Service,
|
||||
svc.Domain,
|
||||
svc.Port,
|
||||
svc.Records,
|
||||
nil); err != nil {
|
||||
return fmt.Errorf("could not create service %s: %v", svc.FullName(), err)
|
||||
}
|
||||
|
||||
mod.Info("advertising %s with responder=%s port=%d",
|
||||
tui.Yellow(svc.FullName()),
|
||||
tui.Red(svc.Responder),
|
||||
svc.Port)
|
||||
} else {
|
||||
responderHostName := ""
|
||||
// try first to do a reverse DNS of the ip
|
||||
if addr, err := net.LookupAddr(svc.Responder); err == nil && len(addr) > 0 {
|
||||
responderHostName = addr[0]
|
||||
} else {
|
||||
mod.Debug("could not get responder %s reverse dns entry: %v", svc.Responder, err)
|
||||
}
|
||||
|
||||
// if we don't have a host, create a .nip.io representation
|
||||
if responderHostName == "" {
|
||||
responderHostName = fmt.Sprintf("%s.nip.io.", strings.ReplaceAll(svc.Responder, ".", "-"))
|
||||
}
|
||||
|
||||
// use external responder
|
||||
if svc.server, err = zeroconf.RegisterExternalResponder(
|
||||
svc.Name,
|
||||
svc.Service,
|
||||
svc.Domain,
|
||||
svc.Port,
|
||||
responderHostName,
|
||||
[]string{svc.Responder},
|
||||
svc.Records,
|
||||
nil); err != nil {
|
||||
return fmt.Errorf("could not create service %s: %v", svc.FullName(), err)
|
||||
}
|
||||
|
||||
mod.Info("advertising %s with responder=%s hostname=%s port=%d",
|
||||
tui.Yellow(svc.FullName()),
|
||||
tui.Red(svc.Responder),
|
||||
tui.Yellow(responderHostName),
|
||||
svc.Port)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (svc *ServiceData) Unregister(mod *ZeroGod) error {
|
||||
mod.Info("unregistering instance %s ...", tui.Yellow(svc.FullName()))
|
||||
|
||||
err := (error)(nil)
|
||||
if svc.server == nil {
|
||||
// if we haven't been registered yet, create the server
|
||||
if svc.server, err = zeroconf.Register(svc.Name, svc.Service, svc.Domain, svc.Port, svc.Records, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
svc.server.Shutdown()
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue