diff --git a/scapy/arch/__init__.py b/scapy/arch/__init__.py index 5bd7d8e80c17b5d2a31b475e5e2ea545c076496c..e8613a55fd45d5e96c2ca350eb088311163001dd 100644 --- a/scapy/arch/__init__.py +++ b/scapy/arch/__init__.py @@ -10,7 +10,7 @@ Operating system specific functionality. import socket from scapy.consts import LINUX, OPENBSD, FREEBSD, NETBSD, DARWIN, \ - SOLARIS, WINDOWS, BSD, X86_64, ARM_64, LOOPBACK_NAME, plt, MATPLOTLIB_INLINED, \ + SOLARIS, WINDOWS, BSD, IS_64BITS, LOOPBACK_NAME, plt, MATPLOTLIB_INLINED, \ MATPLOTLIB_DEFAULT_PLOT_KARGS, PYX, parent_function from scapy.error import * import scapy.config diff --git a/scapy/arch/linux.py b/scapy/arch/linux.py index 898356e231efd956005e0ffd314aca580c64f3cf..9fe78381b0e5a792691ba2209ac2700a6cc82c6f 100644 --- a/scapy/arch/linux.py +++ b/scapy/arch/linux.py @@ -11,7 +11,7 @@ import sys,os,struct,socket,time from select import select from fcntl import ioctl -from scapy.consts import LOOPBACK_NAME +from scapy.consts import LOOPBACK_NAME, IS_64BITS import scapy.utils import scapy.utils6 from scapy.packet import Packet, Padding @@ -149,10 +149,7 @@ def attach_filter(s, bpf_filter, iface): # XXX. Argl! We need to give the kernel a pointer on the BPF, # python object header seems to be 20 bytes. 36 bytes for x86 64bits arch. - if scapy.arch.X86_64 or scapy.arch.ARM_64: - bpfh = struct.pack("HL", nb, id(bpf)+36) - else: - bpfh = struct.pack("HI", nb, id(bpf)+20) + bpfh = struct.pack("HL", nb, id(bpf) + (36 if IS_64BITS else 20)) s.setsockopt(SOL_SOCKET, SO_ATTACH_FILTER, bpfh) def set_promisc(s,iff,val=1): diff --git a/scapy/consts.py b/scapy/consts.py index aa09ff78d5cc71ab1e5f778a5cfc96af30182ac1..12b800986dd298010894ad04d6a279734c06e989 100644 --- a/scapy/consts.py +++ b/scapy/consts.py @@ -4,7 +4,7 @@ ## This program is published under a GPLv2 license import os, inspect -from sys import platform +from sys import platform, maxsize import platform as platform_lib from scapy.error import * @@ -40,10 +40,10 @@ DARWIN = platform.startswith("darwin") SOLARIS = platform.startswith("sunos") WINDOWS = platform.startswith("win32") BSD = DARWIN or FREEBSD or OPENBSD or NETBSD +# See https://docs.python.org/3/library/platform.html#cross-platform +IS_64BITS = maxsize > 2**32 if WINDOWS: - X86_64 = False - ARM_64 = False try: if float(platform_lib.release()) >= 8.1: LOOPBACK_NAME = "Microsoft KM-TEST Loopback Adapter" @@ -53,8 +53,6 @@ if WINDOWS: LOOPBACK_NAME = "Microsoft Loopback Adapter" else: uname = os.uname() - X86_64 = uname[4] == 'x86_64' - ARM_64 = uname[4] == 'aarch64' LOOPBACK_NAME = "lo" if LINUX else "lo0" def parent_function():