net/netcheck: don't send flood of PCP unmap requests to router

Updates #810
This commit is contained in:
Brad Fitzpatrick 2020-12-06 19:46:11 -08:00
parent 9503be083d
commit 05e5233e07
1 changed files with 9 additions and 5 deletions

View File

@ -710,6 +710,7 @@ func (rs *reportState) probePortMapServices() {
uc.WriteTo(pcpPacket(myIP, tempPort, false), port5351) uc.WriteTo(pcpPacket(myIP, tempPort, false), port5351)
res := make([]byte, 1500) res := make([]byte, 1500)
sentPCPDelete := false
for { for {
n, addr, err := uc.ReadFrom(res) n, addr, err := uc.ReadFrom(res)
if err != nil { if err != nil {
@ -727,6 +728,8 @@ func (rs *reportState) probePortMapServices() {
if n == 60 && res[0] == 0x02 { // right length and version 2 if n == 60 && res[0] == 0x02 { // right length and version 2
rs.setOptBool(&rs.report.PCP, true) rs.setOptBool(&rs.report.PCP, true)
if !sentPCPDelete {
sentPCPDelete = true
// And now delete the mapping. // And now delete the mapping.
// (PCP is the only protocol of the three that requires // (PCP is the only protocol of the three that requires
// we cause a side effect to detect whether it's present, // we cause a side effect to detect whether it's present,
@ -736,6 +739,7 @@ func (rs *reportState) probePortMapServices() {
} }
} }
} }
}
var pmpPacket = []byte{0, 0} // version 0, opcode 0 = "Public address request" var pmpPacket = []byte{0, 0} // version 0, opcode 0 = "Public address request"