Skip to content
Snippets Groups Projects
Commit fb86938f authored by Pierre LALET's avatar Pierre LALET
Browse files

Use the provided interface in attach_filter()

This is related to the e-mail thread[1] on Scapy mailing list, based
on the proposed PR on Bitbucker Suraj Deshmukh [2].

[1] http://article.gmane.org/gmane.comp.security.scapy.general/5297
[2] https://bitbucket.org/secdev/scapy/pull-requests/127/issue-5121-now-iface-option-of-sniff/diff
parent 7c485806
No related branches found
No related tags found
No related merge requests found
......@@ -69,7 +69,7 @@ ARM_64 = not WINDOWS and (os.uname()[4] == 'aarch64')
# def get_if_raw_addr(iff):
# def get_if_list():
# def get_working_if():
# def attach_filter(s, filter):
# def attach_filter(s, filter, iface):
# def set_promisc(s,iff,val=1):
# def read_routes():
# def get_if(iff,cmd):
......
......@@ -108,7 +108,8 @@ def get_working_if():
if ifflags & IFF_UP:
return i
return LOOPBACK_NAME
def attach_filter(s, filter):
def attach_filter(s, bpf_filter, iface):
# XXX We generate the filter on the interface conf.iface
# because tcpdump open the "any" interface and ppp interfaces
# in cooked mode. As we use them in raw mode, the filter will not
......@@ -118,7 +119,11 @@ def attach_filter(s, filter):
if not TCPDUMP:
return
try:
f = os.popen("%s -i %s -ddd -s 1600 '%s'" % (conf.prog.tcpdump,conf.iface,filter))
f = os.popen("%s -i %s -ddd -s 1600 '%s'" % (
conf.prog.tcpdump,
conf.iface if iface is None else iface,
bpf_filter,
))
except OSError,msg:
log_interactive.warning("Failed to execute tcpdump: (%s)")
return
......@@ -323,7 +328,7 @@ class L3PacketSocket(SuperSocket):
else:
filter = "not (%s)" % conf.except_filter
if filter is not None:
attach_filter(self.ins, filter)
attach_filter(self.ins, filter, iface)
_flush_fd(self.ins)
self.ins.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 2**30)
self.outs = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))
......@@ -417,7 +422,7 @@ class L2Socket(SuperSocket):
else:
filter = "not (%s)" % conf.except_filter
if filter is not None:
attach_filter(self.ins, filter)
attach_filter(self.ins, filter, iface)
self.promisc = conf.sniff_promisc if promisc is None else promisc
if self.promisc:
set_promisc(self.ins, self.iface)
......@@ -473,7 +478,7 @@ class L2ListenSocket(SuperSocket):
else:
filter = "not (%s)" % conf.except_filter
if filter is not None:
attach_filter(self.ins, filter)
attach_filter(self.ins, filter, iface)
if promisc is None:
promisc = conf.sniff_promisc
self.promisc = promisc
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment