Skip to content

Error mdnsForceUnicast #83

Open
Open
@juliodiz

Description

multicast-relay.py INFO: [mDNS] Relayed 302 bytes from 10.125.131.10:5353 on eth1.5 [ttl 255] to 224.0.0.251:5353 via eth1.10/10.125.0.1
Traceback (most recent call last):
File "multicast-relay.py", line 1048, in
sys.exit(main())
^^^^^^
File "multicast-relay.py", line 1045, in main
packetRelay.loop()
File "multicast-relay.py", line 628, in loop
data = PacketRelay.mdnsSetUnicastBit(data, ipHeaderLength)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "multicast-relay.py", line 396, in mdnsSetUnicastBit
labelLength = struct.unpack('B', udpData[ptr:ptr+1])[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
struct.error: unpack requires a buffer of 1 bytes

@staticmethod
def mdnsSetUnicastBit(data, ipHeaderLength):
headers = data[:ipHeaderLength+8]
udpData = data[ipHeaderLength+8:]

flags = struct.unpack('!H', udpData[2:4])[0]
if flags & 0x8000 != 0:
    return data

queries = struct.unpack('!H', udpData[4:6])[0]

queryCount = 0
ptr = 12
while ptr < len(udpData):
    if len(udpData[ptr:]) < 1:
        break  # Sair do loop se não houver bytes suficientes para desempacotar

    labelLength = struct.unpack('B', udpData[ptr:ptr+1])[0]
    if not labelLength & 0x3f:
        if labelLength & 0xc0:
            ptr += 1
        queryCount += 1
        if len(udpData[ptr+3:ptr+5]) < 2:
            break  # Sair do loop se não houver bytes suficientes para desempacotar
        data = struct.unpack('!H', udpData[ptr+3:ptr+5])[0]
        udpData = udpData[:ptr+3] + struct.pack('!H', data | 0x8000) + udpData[ptr+5:]
        if queryCount == queries:
            break
        ptr += 5
    else:
        ptr += labelLength+1

return headers + udpData

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions