Index: head/net/scapy/Makefile =================================================================== --- head/net/scapy/Makefile (revision 499769) +++ head/net/scapy/Makefile (revision 499770) @@ -1,69 +1,69 @@ # Created by: vanhu # $FreeBSD$ PORTNAME= scapy PORTVERSION= 2.4.2 DISTVERSIONPREFIX= v -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= net PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} MAINTAINER= bofh@FreeBSD.org COMMENT= Powerful interactive packet manipulation program in python LICENSE= GPLv2 LICENSE_FILE= ${WRKSRC}/LICENSE RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}libdnet>0:net/py-libdnet@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pcap>0:net/py-pcap@${PY_FLAVOR} USES= python USE_PYTHON= autoplist distutils USE_GITHUB= yes GH_ACCOUNT= secdev NO_ARCH= yes OPTIONS_DEFINE= GRAPH IPYTHON P0F_BASE MANUF MATPLOT NMAP PYCRYPTO PYGNUPLOT PYX QUESO_BASE SOX GRAPH_DESC= graph generation and visualization IPYTHON_DESC= Use IPython (enhanced interactive shell) MANUF_DESC= wireshark's MANUF MAC database MATPLOT_DESC= Install python matplotlibs NMAP_DESC= nmap OS signatures database P0F_BASE_DESC= p0f OS signatures database PYCRYPTO_DESC= Use py-crypto for WEP decoding PYGNUPLOT_DESC= Use py-gnuplot wrapper to plot graphs PYX_DESC= PostScript and PDF graphs drawing QUESO_BASE_DESC=queso OS signatures database SOX_DESC= Support for VoIP GRAPH_RUN_DEPENDS= ${LOCALBASE}/bin/MagickCore-config:graphics/ImageMagick6 \ ${LOCALBASE}/bin/dot:graphics/graphviz NMAP_RUN_DEPENDS= ${LOCALBASE}/share/nmap/nmap-os-db:security/nmap MANUF_RUN_DEPENDS= ${LOCALBASE}/share/wireshark/manuf:net/wireshark MATPLOT_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}/matplotlib/__init__.py:math/py-matplotlib@${PY_FLAVOR} P0F_BASE_RUN_DEPENDS= ${LOCALBASE}/etc/p0f.fp:net-mgmt/p0f PYCRYPTO_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}/Crypto/__init__.py:security/py-pycrypto@${PY_FLAVOR} PYGNUPLOT_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}/Gnuplot/__init__.py:math/py-gnuplot@${PY_FLAVOR} PYX_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}/pyx/__init__.py:graphics/py-PyX12@${PY_FLAVOR} QUESO_BASE_RUN_DEPENDS= ${LOCALBASE}/etc/queso.conf.sample:net/queso SOX_RUN_DEPENDS= ${LOCALBASE}/bin/sox:audio/sox .if ${FLAVOR:Upy27:Mpy27} IPYTHON_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}ipython5>0:devel/ipython5 .endif .if ${FLAVOR:Upy36:Mpy3*} IPYTHON_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}ipython>0:devel/ipython .endif post-patch: @${REINPLACE_CMD} "s,share/man/man1,man/man1," ${WRKSRC}/setup.py @${REINPLACE_CMD} "s,pdflatex,pdftex," ${WRKSRC}/scapy/extlib.py @${REINPLACE_CMD} "s,/usr/share/,${LOCALBASE}/share/," \ ${WRKSRC}/scapy/data.py \ ${WRKSRC}/scapy/modules/nmap.py \ ${WRKSRC}/scapy/utils6.py @${REINPLACE_CMD} "s,/etc/,${LOCALBASE}/etc/," \ ${WRKSRC}/scapy/modules/p0f.py .include Index: head/net/scapy/files/1991.patch =================================================================== --- head/net/scapy/files/1991.patch (revision 499769) +++ head/net/scapy/files/1991.patch (nonexistent) @@ -1,171 +0,0 @@ -From 5ff17673eec7fc200a16552e3686015e99d10b5e Mon Sep 17 00:00:00 2001 -From: Pierre LALET -Date: Tue, 16 Apr 2019 16:08:15 +0200 -Subject: [PATCH 1/2] BPF: fix get_working_ifaces() - -It was broken when an interface name did not end by a digit. - -It was also incorrect when an interface name ended by more than one -digit. ---- - scapy/arch/bpf/core.py | 46 ++++++++++++++++++++++++------------------ - test/bpf.uts | 6 ++---- - 2 files changed, 28 insertions(+), 24 deletions(-) - -diff --git scapy/arch/bpf/core.py scapy/arch/bpf/core.py -index cc4732f52..4c9e9470a 100644 ---- scapy/arch/bpf/core.py -+++ scapy/arch/bpf/core.py -@@ -5,22 +5,22 @@ - """ - - from __future__ import absolute_import --from scapy.config import conf --from scapy.error import Scapy_Exception, warning --from scapy.data import ARPHDR_LOOPBACK, ARPHDR_ETHER --from scapy.arch.common import get_if, compile_filter --from scapy.consts import LOOPBACK_NAME -- --from scapy.arch.bpf.consts import BIOCSETF, SIOCGIFFLAGS, BIOCSETIF - -+from ctypes import cdll, cast, pointer -+from ctypes import c_int, c_ulong, c_char_p -+from ctypes.util import find_library -+import fcntl - import os -+import re - import socket --import fcntl - import struct - --from ctypes import cdll, cast, pointer --from ctypes import c_int, c_ulong, c_char_p --from ctypes.util import find_library -+from scapy.arch.bpf.consts import BIOCSETF, SIOCGIFFLAGS, BIOCSETIF -+from scapy.arch.common import get_if, compile_filter -+from scapy.config import conf -+from scapy.consts import LOOPBACK_NAME -+from scapy.data import ARPHDR_LOOPBACK, ARPHDR_ETHER -+from scapy.error import Scapy_Exception, warning - from scapy.modules.six.moves import range - - -@@ -126,6 +126,9 @@ def get_if_list(): - return interfaces - - -+_IFNUM = re.compile("([0-9]*)([ab]?)$") -+ -+ - def get_working_ifaces(): - """ - Returns an ordered list of interfaces that could be used with BPF. -@@ -156,24 +159,27 @@ def get_working_ifaces(): - if ifflags & 0x1: # IFF_UP - - # Get a BPF handle -- fd, _ = get_dev_bpf() -+ fd = get_dev_bpf()[0] - if fd is None: - raise Scapy_Exception("No /dev/bpf are available !") - - # Check if the interface can be used - try: -- fcntl.ioctl(fd, BIOCSETIF, struct.pack("16s16x", ifname.encode())) # noqa: E501 -- interfaces.append((ifname, int(ifname[-1]))) -+ fcntl.ioctl(fd, BIOCSETIF, struct.pack("16s16x", -+ ifname.encode())) - except IOError: - pass -- -- # Close the file descriptor -- os.close(fd) -+ else: -+ ifnum, ifab = _IFNUM.search(ifname).groups() -+ interfaces.append((ifname, int(ifnum) if ifnum else -1, ifab)) -+ finally: -+ # Close the file descriptor -+ os.close(fd) - - # Sort to mimic pcap_findalldevs() order -- interfaces.sort(key=lambda elt: elt[1]) -+ interfaces.sort(key=lambda elt: (elt[1], elt[2], elt[0])) - -- return interfaces -+ return [iface[0] for iface in interfaces] - - - def get_working_if(): -@@ -183,4 +189,4 @@ def get_working_if(): - if not ifaces: - # A better interface will be selected later using the routing table - return LOOPBACK_NAME -- return ifaces[0][0] -+ return ifaces[0] -diff --git test/bpf.uts test/bpf.uts -index 19e06bb14..45d36fd83 100644 ---- test/bpf.uts -+++ test/bpf.uts -@@ -47,12 +47,10 @@ len(iflist) > 0 - = Get working network interfaces - ~ needs_root - --from scapy.arch.bpf.core import get_working_ifaces -+from scapy.arch.bpf.core import get_working_if, get_working_ifaces - ifworking = get_working_ifaces() - assert len(ifworking) -- --from scapy.arch.bpf.core import get_working_if --assert len(ifworking) and get_working_if() == ifworking[0][0] -+assert get_working_if() == ifworking[0] - - - = Misc functions - -From afa5776ecf83f7a427fc1af763005fe249f450f9 Mon Sep 17 00:00:00 2001 -From: Pierre LALET -Date: Wed, 17 Apr 2019 10:22:16 +0200 -Subject: [PATCH 2/2] BPF: test get_working_ifaces() - ---- - test/bpf.uts | 27 +++++++++++++++++++++++++++ - 1 file changed, 27 insertions(+) - -diff --git test/bpf.uts test/bpf.uts -index 45d36fd83..23022530e 100644 ---- test/bpf.uts -+++ test/bpf.uts -@@ -53,6 +53,33 @@ assert len(ifworking) - assert get_working_if() == ifworking[0] - - -+= Get working network interfaces order -+ -+import mock -+from scapy.arch.bpf.core import get_working_ifaces -+ -+@mock.patch("scapy.arch.bpf.core.os.close") -+@mock.patch("scapy.arch.bpf.core.fcntl.ioctl") -+@mock.patch("scapy.arch.bpf.core.get_dev_bpf") -+@mock.patch("scapy.arch.bpf.core.get_if") -+@mock.patch("scapy.arch.bpf.core.get_if_list") -+@mock.patch("scapy.arch.bpf.core.os.getuid") -+def test_get_working_ifaces(mock_getuid, mock_get_if_list, mock_get_if, -+ mock_get_dev_bpf, mock_ioctl, mock_close): -+ mock_getuid.return_value = 0 -+ mock_get_if_list.return_value = ['igb0', 'em0', 'msk0', 'epair0a', 'igb1', -+ 'vlan20', 'igb10', 'igb2'] -+ mock_get_if.return_value = (b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' -+ b'\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00' -+ b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') -+ mock_get_dev_bpf.return_value = (31337,) -+ mock_ioctl.return_value = 0 -+ mock_close.return_value = 0 -+ return get_working_ifaces() -+ -+assert test_get_working_ifaces() == ['em0', 'igb0', 'msk0', 'epair0a', 'igb1', -+ 'igb2', 'igb10', 'vlan20'] -+ - = Misc functions - ~ needs_root - Property changes on: head/net/scapy/files/1991.patch ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/net/scapy/files/patch-1991.patch =================================================================== --- head/net/scapy/files/patch-1991.patch (nonexistent) +++ head/net/scapy/files/patch-1991.patch (revision 499770) @@ -0,0 +1,171 @@ +From 5ff17673eec7fc200a16552e3686015e99d10b5e Mon Sep 17 00:00:00 2001 +From: Pierre LALET +Date: Tue, 16 Apr 2019 16:08:15 +0200 +Subject: [PATCH 1/2] BPF: fix get_working_ifaces() + +It was broken when an interface name did not end by a digit. + +It was also incorrect when an interface name ended by more than one +digit. +--- + scapy/arch/bpf/core.py | 46 ++++++++++++++++++++++++------------------ + test/bpf.uts | 6 ++---- + 2 files changed, 28 insertions(+), 24 deletions(-) + +diff --git scapy/arch/bpf/core.py scapy/arch/bpf/core.py +index cc4732f52..4c9e9470a 100644 +--- scapy/arch/bpf/core.py ++++ scapy/arch/bpf/core.py +@@ -5,22 +5,22 @@ + """ + + from __future__ import absolute_import +-from scapy.config import conf +-from scapy.error import Scapy_Exception, warning +-from scapy.data import ARPHDR_LOOPBACK, ARPHDR_ETHER +-from scapy.arch.common import get_if, compile_filter +-from scapy.consts import LOOPBACK_NAME +- +-from scapy.arch.bpf.consts import BIOCSETF, SIOCGIFFLAGS, BIOCSETIF + ++from ctypes import cdll, cast, pointer ++from ctypes import c_int, c_ulong, c_char_p ++from ctypes.util import find_library ++import fcntl + import os ++import re + import socket +-import fcntl + import struct + +-from ctypes import cdll, cast, pointer +-from ctypes import c_int, c_ulong, c_char_p +-from ctypes.util import find_library ++from scapy.arch.bpf.consts import BIOCSETF, SIOCGIFFLAGS, BIOCSETIF ++from scapy.arch.common import get_if, compile_filter ++from scapy.config import conf ++from scapy.consts import LOOPBACK_NAME ++from scapy.data import ARPHDR_LOOPBACK, ARPHDR_ETHER ++from scapy.error import Scapy_Exception, warning + from scapy.modules.six.moves import range + + +@@ -126,6 +126,9 @@ def get_if_list(): + return interfaces + + ++_IFNUM = re.compile("([0-9]*)([ab]?)$") ++ ++ + def get_working_ifaces(): + """ + Returns an ordered list of interfaces that could be used with BPF. +@@ -156,24 +159,27 @@ def get_working_ifaces(): + if ifflags & 0x1: # IFF_UP + + # Get a BPF handle +- fd, _ = get_dev_bpf() ++ fd = get_dev_bpf()[0] + if fd is None: + raise Scapy_Exception("No /dev/bpf are available !") + + # Check if the interface can be used + try: +- fcntl.ioctl(fd, BIOCSETIF, struct.pack("16s16x", ifname.encode())) # noqa: E501 +- interfaces.append((ifname, int(ifname[-1]))) ++ fcntl.ioctl(fd, BIOCSETIF, struct.pack("16s16x", ++ ifname.encode())) + except IOError: + pass +- +- # Close the file descriptor +- os.close(fd) ++ else: ++ ifnum, ifab = _IFNUM.search(ifname).groups() ++ interfaces.append((ifname, int(ifnum) if ifnum else -1, ifab)) ++ finally: ++ # Close the file descriptor ++ os.close(fd) + + # Sort to mimic pcap_findalldevs() order +- interfaces.sort(key=lambda elt: elt[1]) ++ interfaces.sort(key=lambda elt: (elt[1], elt[2], elt[0])) + +- return interfaces ++ return [iface[0] for iface in interfaces] + + + def get_working_if(): +@@ -183,4 +189,4 @@ def get_working_if(): + if not ifaces: + # A better interface will be selected later using the routing table + return LOOPBACK_NAME +- return ifaces[0][0] ++ return ifaces[0] +diff --git test/bpf.uts test/bpf.uts +index 19e06bb14..45d36fd83 100644 +--- test/bpf.uts ++++ test/bpf.uts +@@ -47,12 +47,10 @@ len(iflist) > 0 + = Get working network interfaces + ~ needs_root + +-from scapy.arch.bpf.core import get_working_ifaces ++from scapy.arch.bpf.core import get_working_if, get_working_ifaces + ifworking = get_working_ifaces() + assert len(ifworking) +- +-from scapy.arch.bpf.core import get_working_if +-assert len(ifworking) and get_working_if() == ifworking[0][0] ++assert get_working_if() == ifworking[0] + + + = Misc functions + +From afa5776ecf83f7a427fc1af763005fe249f450f9 Mon Sep 17 00:00:00 2001 +From: Pierre LALET +Date: Wed, 17 Apr 2019 10:22:16 +0200 +Subject: [PATCH 2/2] BPF: test get_working_ifaces() + +--- + test/bpf.uts | 27 +++++++++++++++++++++++++++ + 1 file changed, 27 insertions(+) + +diff --git test/bpf.uts test/bpf.uts +index 45d36fd83..23022530e 100644 +--- test/bpf.uts ++++ test/bpf.uts +@@ -53,6 +53,33 @@ assert len(ifworking) + assert get_working_if() == ifworking[0] + + ++= Get working network interfaces order ++ ++import mock ++from scapy.arch.bpf.core import get_working_ifaces ++ ++@mock.patch("scapy.arch.bpf.core.os.close") ++@mock.patch("scapy.arch.bpf.core.fcntl.ioctl") ++@mock.patch("scapy.arch.bpf.core.get_dev_bpf") ++@mock.patch("scapy.arch.bpf.core.get_if") ++@mock.patch("scapy.arch.bpf.core.get_if_list") ++@mock.patch("scapy.arch.bpf.core.os.getuid") ++def test_get_working_ifaces(mock_getuid, mock_get_if_list, mock_get_if, ++ mock_get_dev_bpf, mock_ioctl, mock_close): ++ mock_getuid.return_value = 0 ++ mock_get_if_list.return_value = ['igb0', 'em0', 'msk0', 'epair0a', 'igb1', ++ 'vlan20', 'igb10', 'igb2'] ++ mock_get_if.return_value = (b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ++ b'\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00' ++ b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') ++ mock_get_dev_bpf.return_value = (31337,) ++ mock_ioctl.return_value = 0 ++ mock_close.return_value = 0 ++ return get_working_ifaces() ++ ++assert test_get_working_ifaces() == ['em0', 'igb0', 'msk0', 'epair0a', 'igb1', ++ 'igb2', 'igb10', 'vlan20'] ++ + = Misc functions + ~ needs_root + Property changes on: head/net/scapy/files/patch-1991.patch ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property