mirror of
https://github.com/bettercap/bettercap
synced 2025-07-08 05:51:37 -07:00
new: parsing UPNP discovery responses to get metadata about the endpoints
This commit is contained in:
parent
02f445c42c
commit
3d312a9cdf
2 changed files with 37 additions and 11 deletions
|
@ -166,19 +166,13 @@ func (q *Queue) TrackError() {
|
|||
|
||||
func (q *Queue) getPacketMeta(pkt gopacket.Packet) map[string]string {
|
||||
meta := make(map[string]string)
|
||||
|
||||
if mdns := MDNSGetMeta(pkt); mdns != nil {
|
||||
for k, v := range mdns {
|
||||
meta[k] = v
|
||||
}
|
||||
meta = mdns
|
||||
} else if nbns := NBNSGetMeta(pkt); nbns != nil {
|
||||
meta = nbns
|
||||
} else if upnp := UPNPGetMeta(pkt); upnp != nil {
|
||||
meta = upnp
|
||||
}
|
||||
|
||||
if nbns := NBNSGetMeta(pkt); nbns != nil {
|
||||
for k, v := range nbns {
|
||||
meta[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
return meta
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,18 @@
|
|||
package packets
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
// "net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/bettercap/bettercap/core"
|
||||
|
||||
"github.com/google/gopacket"
|
||||
"github.com/google/gopacket/layers"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -19,3 +29,25 @@ var (
|
|||
"MX: 2\r\n" +
|
||||
"\r\n")
|
||||
)
|
||||
|
||||
func UPNPGetMeta(pkt gopacket.Packet) map[string]string {
|
||||
if ludp := pkt.Layer(layers.LayerTypeUDP); ludp != nil {
|
||||
if udp := ludp.(*layers.UDP); udp != nil && udp.SrcPort == UPNPPort && len(udp.Payload) > 0 {
|
||||
request := &http.Request{}
|
||||
reader := bufio.NewReader(bytes.NewReader(udp.Payload))
|
||||
if response, err := http.ReadResponse(reader, request); err == nil {
|
||||
meta := make(map[string]string)
|
||||
for name, values := range response.Header {
|
||||
if name != "Cache-Control" && len(values) > 0 {
|
||||
if data := strings.Join(values, ", "); core.Trim(data) != "" {
|
||||
meta["upnp:"+name] = data
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return meta
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue