mirror of
https://github.com/bettercap/bettercap
synced 2025-08-19 21:13:18 -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
|
@ -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