mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 12:54:27 +00:00
netpfil tests: improve sniffer.py
Multiple improvements to sniffer.py: * Remove ambiguity of configuring recvif, it must be now explicitly specified. * Don't catch exceptions around creating the sniffer, let it properly fail and display the whole stack trace. * Count correct packets so that duplicates can be found. MFC after: 1 week Sponsored by: InnoGames GmbH Differential Revision: https://reviews.freebsd.org/D38120
This commit is contained in:
parent
9cb6ba29cb
commit
a39dedeb31
|
@ -61,11 +61,11 @@ def main():
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
sniffer = Sniffer(args, check_pcp, recvif=args.recvif[0], timeout=20)
|
sniffer = Sniffer(args, check_pcp, args.recvif[0], timeout=20)
|
||||||
|
|
||||||
sniffer.join()
|
sniffer.join()
|
||||||
|
|
||||||
if sniffer.foundCorrectPacket:
|
if sniffer.correctPackets:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
|
@ -100,14 +100,14 @@ def main():
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
sniffer = Sniffer(args, check_stp)
|
sniffer = Sniffer(args, check_stp, args.recvif[0])
|
||||||
|
|
||||||
invalid_stp(args.sendif[0])
|
invalid_stp(args.sendif[0])
|
||||||
|
|
||||||
sniffer.join()
|
sniffer.join()
|
||||||
|
|
||||||
# The 'correct' packet is a corrupt STP packet, so it shouldn't turn up.
|
# The 'correct' packet is a corrupt STP packet, so it shouldn't turn up.
|
||||||
if sniffer.foundCorrectPacket:
|
if sniffer.correctPackets:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -96,14 +96,14 @@ def main():
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
sniffer = None
|
sniffer = None
|
||||||
if not args.recvif is None:
|
if not args.recvif is None:
|
||||||
sniffer = Sniffer(args, check_icmp_too_big)
|
sniffer = Sniffer(args, check_icmp_too_big, args.recvif[0])
|
||||||
|
|
||||||
ping(args.sendif[0], args.to[0], args)
|
ping(args.sendif[0], args.to[0], args)
|
||||||
|
|
||||||
if sniffer:
|
if sniffer:
|
||||||
sniffer.join()
|
sniffer.join()
|
||||||
|
|
||||||
if sniffer.foundCorrectPacket:
|
if sniffer.correctPackets:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
else:
|
else:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
|
@ -317,16 +317,16 @@ def main():
|
||||||
if args.tcpsyn:
|
if args.tcpsyn:
|
||||||
checkfn=check_tcpsyn
|
checkfn=check_tcpsyn
|
||||||
|
|
||||||
sniffer = Sniffer(args, checkfn)
|
sniffer = Sniffer(args, checkfn, args.recvif[0])
|
||||||
|
|
||||||
replysniffer = None
|
replysniffer = None
|
||||||
if not args.replyif is None:
|
if not args.replyif is None:
|
||||||
checkfn=check_ping_reply
|
checkfn=check_ping_reply
|
||||||
replysniffer = Sniffer(args, checkfn, recvif=args.replyif[0])
|
replysniffer = Sniffer(args, checkfn, args.replyif[0])
|
||||||
|
|
||||||
dupsniffer = None
|
dupsniffer = None
|
||||||
if args.checkdup is not None:
|
if args.checkdup is not None:
|
||||||
dupsniffer = Sniffer(args, check_dup, recvif=args.checkdup[0])
|
dupsniffer = Sniffer(args, check_dup, args.checkdup[0])
|
||||||
|
|
||||||
if args.tcpsyn:
|
if args.tcpsyn:
|
||||||
tcpsyn(args.sendif[0], args.to[0], args)
|
tcpsyn(args.sendif[0], args.to[0], args)
|
||||||
|
@ -344,7 +344,7 @@ def main():
|
||||||
if sniffer:
|
if sniffer:
|
||||||
sniffer.join()
|
sniffer.join()
|
||||||
|
|
||||||
if sniffer.foundCorrectPacket:
|
if sniffer.correctPackets:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
else:
|
else:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
@ -352,7 +352,7 @@ def main():
|
||||||
if replysniffer:
|
if replysniffer:
|
||||||
replysniffer.join()
|
replysniffer.join()
|
||||||
|
|
||||||
if replysniffer.foundCorrectPacket:
|
if replysniffer.correctPackets:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
else:
|
else:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
|
@ -31,18 +31,15 @@
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
class Sniffer(threading.Thread):
|
class Sniffer(threading.Thread):
|
||||||
def __init__(self, args, check_function, recvif=None, timeout=3):
|
def __init__(self, args, check_function, recvif, timeout=3):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
|
|
||||||
self._sem = threading.Semaphore(0)
|
self._sem = threading.Semaphore(0)
|
||||||
self._args = args
|
self._args = args
|
||||||
self._timeout = timeout
|
self._timeout = timeout
|
||||||
if recvif is not None:
|
self._recvif = recvif
|
||||||
self._recvif = recvif
|
|
||||||
else:
|
|
||||||
self._recvif = args.recvif[0]
|
|
||||||
self._check_function = check_function
|
self._check_function = check_function
|
||||||
self.foundCorrectPacket = False
|
self.correctPackets = 0
|
||||||
|
|
||||||
self.start()
|
self.start()
|
||||||
if not self._sem.acquire(timeout=30):
|
if not self._sem.acquire(timeout=30):
|
||||||
|
@ -51,7 +48,7 @@ def __init__(self, args, check_function, recvif=None, timeout=3):
|
||||||
def _checkPacket(self, packet):
|
def _checkPacket(self, packet):
|
||||||
ret = self._check_function(self._args, packet)
|
ret = self._check_function(self._args, packet)
|
||||||
if ret:
|
if ret:
|
||||||
self.foundCorrectPacket = True
|
self.correctPackets += 1
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def _startedCb(self):
|
def _startedCb(self):
|
||||||
|
@ -59,9 +56,6 @@ def _startedCb(self):
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.packets = []
|
self.packets = []
|
||||||
try:
|
self.packets = sp.sniff(iface=self._recvif,
|
||||||
self.packets = sp.sniff(iface=self._recvif,
|
stop_filter=self._checkPacket, timeout=self._timeout,
|
||||||
stop_filter=self._checkPacket, timeout=self._timeout,
|
started_callback=self._startedCb)
|
||||||
started_callback=self._startedCb)
|
|
||||||
except Exception as e:
|
|
||||||
print(e, file=sys.stderr)
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ def main():
|
||||||
sp.sendp(udp, iface=args.sendif[0], verbose=False)
|
sp.sendp(udp, iface=args.sendif[0], verbose=False)
|
||||||
|
|
||||||
# Start sniffing on recvif
|
# Start sniffing on recvif
|
||||||
sniffer = Sniffer(args, check_icmp_error)
|
sniffer = Sniffer(args, check_icmp_error, args.recvif[0])
|
||||||
|
|
||||||
# Send the bad error packet
|
# Send the bad error packet
|
||||||
icmp_reachable = sp.Ether() / \
|
icmp_reachable = sp.Ether() / \
|
||||||
|
@ -83,7 +83,7 @@ def main():
|
||||||
sp.sendp(icmp_reachable, iface=args.sendif[0], verbose=False)
|
sp.sendp(icmp_reachable, iface=args.sendif[0], verbose=False)
|
||||||
|
|
||||||
sniffer.join()
|
sniffer.join()
|
||||||
if sniffer.foundCorrectPacket:
|
if sniffer.correctPackets:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
Loading…
Reference in a new issue