From d64930e3bbfeca6c04d9874d31d244a0916158e1 Mon Sep 17 00:00:00 2001 From: Alexander Bluhm Date: Fri, 22 Mar 2019 00:11:05 +0100 Subject: [PATCH] Send IP packet on OpenBSD Loopback with correct address family. Register the matching inet and inet6 address family number for the IP and IPv6 layer of the loopback device. This way it should work for all operating systems. Keep IP as the default layer if the type of the bottom up packet is unspecified. --- scapy/layers/inet.py | 6 +++--- scapy/layers/inet6.py | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/scapy/layers/inet.py b/scapy/layers/inet.py index aa5d0b41cea..e2203af460c 100644 --- a/scapy/layers/inet.py +++ b/scapy/layers/inet.py @@ -33,7 +33,7 @@ DestField, FieldListField, FlagsField, IntField, MultiEnumField, \ PacketListField, ShortEnumField, SourceIPField, StrField, \ StrFixedLenField, XByteField, XShortField, Emph -from scapy.packet import Packet, bind_layers, NoPayload +from scapy.packet import Packet, bind_layers, bind_bottom_up, NoPayload from scapy.volatile import RandShort, RandInt, RandBin, RandNum, VolatileValue from scapy.sendrecv import sr, sr1 from scapy.plist import PacketList, SndRcvList @@ -940,8 +940,8 @@ def mysummary(self): bind_layers(CookedLinux, IP, proto=2048) bind_layers(GRE, IP, proto=2048) bind_layers(SNAP, IP, code=2048) -bind_layers(Loopback, IP, type=0) -bind_layers(Loopback, IP, type=2) +bind_bottom_up(Loopback, IP, type=0) +bind_layers(Loopback, IP, type=socket.AF_INET) bind_layers(IPerror, IPerror, frag=0, proto=4) bind_layers(IPerror, ICMPerror, frag=0, proto=1) bind_layers(IPerror, TCPerror, frag=0, proto=6) diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py index ff58708e4c5..98ac22cac80 100644 --- a/scapy/layers/inet6.py +++ b/scapy/layers/inet6.py @@ -4027,9 +4027,7 @@ def _load_dict(d): bind_layers(CookedLinux, IPv6, proto=0x86dd) bind_layers(GRE, IPv6, proto=0x86dd) bind_layers(SNAP, IPv6, code=0x86dd) -bind_layers(Loopback, IPv6, type=0x18) -bind_layers(Loopback, IPv6, type=0x1c) -bind_layers(Loopback, IPv6, type=0x1e) +bind_layers(Loopback, IPv6, type=socket.AF_INET6) bind_layers(IPerror6, TCPerror, nh=socket.IPPROTO_TCP) bind_layers(IPerror6, UDPerror, nh=socket.IPPROTO_UDP) bind_layers(IPv6, TCP, nh=socket.IPPROTO_TCP)