Skip to content

Exception when calling sniff for multiple interfaces #3191

Closed
@hobobandy

Description

@hobobandy

Brief description

Basic sniff capture using multiple interfaces.
When passing a list (or dict) of interfaces, Scapy raises an exception (see below).

See 'Related resources' for probable cause/fix.

Environment

Scapy version: 2.4.5
Python version: 3.8.5
Operation System: Ubuntu 20.04.2.0 Desktop

How to reproduce

packets = sniff(iface=["wlan0", "wlan1", "wlan2", "wlan3"], prn=callback, store=0)

Actual result

File "scapy_file.py", line 197, in run
packets = sniff(iface=["wlan0","wlan1","wlan2","wlan3"], prn=callback, store=0)
File "/root/.local/share/virtualenvs/myenv/lib/python3.8/site-packages/scapy/sendrecv.py", line 1264, in sniff
sniffer._run(*args, **kwargs)
File "/root/.local/share/virtualenvs/myenv/lib/python3.8/site-packages/scapy/sendrecv.py", line 1128, in _run
sniff_sockets[L2socket(type=ETH_P_ALL, iface=iface,
File "/root/.local/share/virtualenvs/myenv/lib/python3.8/site-packages/scapy/arch/linux.py", line 501, in init
set_promisc(self.ins, self.iface)
File "/root/.local/share/virtualenvs/myenv/lib/python3.8/site-packages/scapy/arch/linux.py", line 181, in set_promisc
mreq = struct.pack("IHH8s", get_if_index(iff), PACKET_MR_PROMISC, 0, b"")
File "/root/.local/share/virtualenvs/myenv/lib/python3.8/site-packages/scapy/arch/linux.py", line 401, in get_if_index
return int(struct.unpack("I", get_if(iff, SIOCGIFINDEX)[16:20])[0])
File "/root/.local/share/virtualenvs/myenv/lib/python3.8/site-packages/scapy/arch/common.py", line 65, in get_if
return ioctl(sck, cmd, struct.pack("16s16x", iff.encode("utf8")))
AttributeError: 'list' object has no attribute 'encode'

Expected result

Expecting sniff to begin.

Related resources

Source probably related to this issue:
sendrecv.py - line 1111 to line 1128

Since I don't use a custom L2 socket, I simply commented out line 1111 to 1113 and used the default L2 socket:
L2socket = conf.L2listen

Proper fix probably involves looping through list items to instance an L2socket.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions