module PacketGen::PCAPRUBWrapper
Wrapper around PCAPRUB @author Sylvain Daubert @api private @since 3.1.4
Constants
- DEFAULT_PROMISC
Default promisc value to use
- DEFAULT_SNAPLEN
Default snaplen to use
- TIMEOUT
timeout for PCAPRUB
Public Class Methods
Capture
packets from a network interface @param [String] iface interface name @param [Integer] snaplen @param [Boolean] promisc @param [String] filter BPF filter @param [Boolean] monitor @yieldparam [String] packet_data binary packet data @return [void] @author Sylvain Daubert @author optix2000 - add support for setting monitor mode @since 3.1.5 add monitor argument
# File lib/packetgen/pcaprub_wrapper.rb, line 54 def self.capture(iface:, snaplen: DEFAULT_SNAPLEN, promisc: DEFAULT_PROMISC, filter: nil, monitor: nil, &block) pcap = self.open_iface(iface: iface, snaplen: snaplen, promisc: promisc, monitor: monitor) pcap.setfilter filter unless filter.nil? pcap.each(&block) end
Inject
given data onto wire @param [String] iface interface name @param [String] data to inject @return [void]
# File lib/packetgen/pcaprub_wrapper.rb, line 66 def self.inject(iface:, data:) pcap = self.open_iface(iface: iface) pcap.inject(data) pcap.close end
Open an interface for capturing @param [String] iface interface name @param [Integer] snaplen @param [Boolean] promisc @param [Boolean] monitor @return [PCAPRUB::Pcap] @author Sylvain Daubert @author optix2000 - add support for setting monitor mode @since 3.1.5 add monitor argument
# File lib/packetgen/pcaprub_wrapper.rb, line 31 def self.open_iface(iface:, snaplen: DEFAULT_SNAPLEN, promisc: DEFAULT_PROMISC, monitor: nil) pcap = PCAPRUB::Pcap.create(iface) pcap.setsnaplen(snaplen) pcap.setpromisc(promisc) pcap.settimeout(TIMEOUT) # Monitor MUST be set before pcap is activated pcap.setmonitor monitor unless monitor.nil? pcap.activate end
Read a PCAP file @param [String] filename @yieldparam [String] data binary packet data @return [void] @author Kent Gruber
# File lib/packetgen/pcaprub_wrapper.rb, line 77 def self.read_pcap(filename:, &block) PCAPRUB::Pcap.open_offline(filename).each_packet(&block) end