8.2.4.3.2. Capture
8.2.4.3.2.1. Trigger Criteria
The criteria for when to start and stop the capture process for a port. Even
when capture is enabled with P_CAPTURE`
, the actual capturing of packets can be
delayed until a particular start criteria is met by a received packet.
Likewise, a stop criteria can be specified, based on a received packet. If no
explicit stop criteria is specified, capture stops when the internal buffer
runs full. In buffer overflow situations, if there is an explicit stop
criteria, then the latest packets will be retained (and the early ones
discarded), and otherwise, the earliest packets are retained (and the later
ones discarded).
Corresponding low-level API class: PC_TRIGGER
See also
Detailed script example can be found in pcap_replay_capture
# Capture Trigger Criteria,
await port.capturer.trigger.set(start_criteria=enums.StartTrigger.ON, start_criteria_filter=0, stop_criteria=enums.StopTrigger.FULL, stop_criteria_filter=0)
await port.capturer.trigger.set(start_criteria=enums.StartTrigger.ON, start_criteria_filter=0, stop_criteria=enums.StopTrigger.USERSTOP, stop_criteria_filter=0)
await port.capturer.trigger.set(start_criteria=enums.StartTrigger.FCSERR, start_criteria_filter=0, stop_criteria=enums.StopTrigger.FCSERR, stop_criteria_filter=0)
await port.capturer.trigger.set(start_criteria=enums.StartTrigger.PLDERR, start_criteria_filter=0, stop_criteria=enums.StopTrigger.PLDERR, stop_criteria_filter=0)
await port.capturer.trigger.set(start_criteria=enums.StartTrigger.FILTER, start_criteria_filter=0, stop_criteria=enums.StopTrigger.FILTER, stop_criteria_filter=0)
resp = await port.capturer.trigger.get()
resp.start_criteria
resp.start_criteria_filter
resp.stop_criteria
resp.stop_criteria_filter
8.2.4.3.2.2. Frame to Keep
Which packets to keep once the start criteria has been triggered for a port. Also how big a portion of each packet to retain, saving space for more packets in the capture buffer.
See also
Detailed script example can be found in pcap_replay_capture
Corresponding low-level API class: PC_KEEP
# Capture - Frame to Keep,
await port.capturer.keep.set(kind=enums.PacketType.ALL, index=0, byte_count=0)
await port.capturer.keep.set_all()
await port.capturer.keep.set(kind=enums.PacketType.FCSERR, index=0, byte_count=0)
await port.capturer.keep.set_fcserr()
await port.capturer.keep.set(kind=enums.PacketType.FILTER, index=0, byte_count=0)
await port.capturer.keep.set_filter()
await port.capturer.keep.set(kind=enums.PacketType.NOTPLD, index=0, byte_count=0)
await port.capturer.keep.set_notpld()
await port.capturer.keep.set(kind=enums.PacketType.PLDERR, index=0, byte_count=0)
await port.capturer.keep.set_plderr()
await port.capturer.keep.set(kind=enums.PacketType.TPLD, index=0, byte_count=0)
await port.capturer.keep.set_tpld()
resp = await port.capturer.keep.get()
resp.kind
resp.index
resp.byte_count
8.2.4.3.2.3. State
Whether a port is capturing packets. When on, the port retains the received
packets and makes them available for inspection. The capture criteria are
configured using the PC_xxx
parameters. While capture is on the capture
parameters cannot be changed.
Corresponding low-level API class: P_CAPTURE
# Capture - State
await port.capturer.state.set(on_off=enums.StartOrStop.START)
await port.capturer.state.set_start()
await port.capturer.state.set(on_off=enums.StartOrStop.STOP)
await port.capturer.state.set_stop()
resp = await port.capturer.state.get()
resp.on_off
8.2.4.3.2.4. Statistics
Obtains the number of packets currently in the capture buffer for a port. The count is reset to zero when capture is turned on.
Corresponding low-level API class: PC_STATS
# Capture - Statistics
resp = await port.capturer.stats.get()
resp.start_time
resp.status
8.2.4.3.2.5. Read Captured Packets
Obtains the raw bytes of a captured packet for a port. The packet data may be
truncated if the PC_KEEP
command specified a limit on the number of bytes kept.
Corresponding low-level API class: PC_PACKET
# Read Captured Packets
pkts = await port.capturer.obtain_captured()
for i in range(len(pkts)):
resp = await pkts[i].packet.get()
print(f"Packet content # {i}: {resp.hex_data}")