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(iface:, snaplen: DEFAULT_SNAPLEN, promisc: DEFAULT_PROMISC, filter: nil, monitor: nil, &block) click to toggle source

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(iface:, data:) click to toggle source

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_iface(iface:, snaplen: DEFAULT_SNAPLEN, promisc: DEFAULT_PROMISC, monitor: nil) click to toggle source

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_pcap(filename:, &block) click to toggle source

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