Skip to content

Commit 6584ebe

Browse files
authored
Fix decompression of 6LowPan src (#4792)
1 parent b60b29b commit 6584ebe

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

scapy/layers/sixlowpan.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -518,13 +518,18 @@ def _extract_upperaddress(pkt, source=True):
518518
# https://tools.ietf.org/html/rfc2464#section-4
519519
return LINK_LOCAL_PREFIX[:8] + addr[:3] + b"\xff\xfe" + addr[3:]
520520
elif type(underlayer) == Dot15d4Data:
521-
addr = underlayer.src_addr if source else underlayer.dest_addr
521+
if source:
522+
addr = underlayer.src_addr
523+
addrmode = underlayer.underlayer.fcf_srcaddrmode
524+
else:
525+
addr = underlayer.dest_addr
526+
addrmode = underlayer.underlayer.fcf_destaddrmode
522527
addr = struct.pack(">Q", addr)
523-
if underlayer.underlayer.fcf_destaddrmode == 3: # Extended/long
528+
if addrmode == 3: # Extended/long
524529
tmp_ip = LINK_LOCAL_PREFIX[0:8] + addr
525530
# Turn off the bit 7.
526531
return tmp_ip[0:8] + struct.pack("B", (orb(tmp_ip[8]) ^ 0x2)) + tmp_ip[9:16] # noqa: E501
527-
elif underlayer.underlayer.fcf_destaddrmode == 2: # Short
532+
elif addrmode == 2: # Short
528533
return (
529534
LINK_LOCAL_PREFIX[0:8] +
530535
b"\x00\x00\x00\xff\xfe\x00" +

test/scapy/layers/dot15d4.uts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,16 @@ packet.show2()
375375
assert packet[LoWPAN_IPHC].src == 'fe80::ff:fe00:0'
376376
assert packet[LoWPAN_IPHC].dst == 'fe80::ff:fe00:ffff'
377377

378+
= SixLoWPAN - Advanced 4 - SAM=3/SAC=0 decompression
379+
380+
packet = Dot15d4(b'A\xc8t\xcd\xab\xff\xff\xcf\r\xa4\xfe\xffn\x95\xe4z;:\x1a\x9b\x01\xd4^\x1e\xdc\x02\xba\x95\x7f\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\xe6\x95n\xff\xfe\xaf\xff\xfd\x08\x1e@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x16\x80\x10\xff\xff\xff\xff\x00\x01\x00\x00\x00\x00\x00\x00\xe6\x95n\xff\xfe\xa4\x05O')
381+
assert packet[LoWPAN_IPHC].sac == 0
382+
assert packet[LoWPAN_IPHC].sam == 3
383+
assert packet[LoWPAN_IPHC].dac == 0
384+
assert packet[LoWPAN_IPHC].dam == 3
385+
assert packet[LoWPAN_IPHC].src == "fe80::e695:6eff:fea4:dcf"
386+
assert packet[LoWPAN_IPHC].dst == "ff02::1a"
387+
378388
= SixLoWPAN - Using ICMP
379389

380390
#ICMP: Neighbour Solicitation

0 commit comments

Comments
 (0)