Struct etherparse::SlicedPacket
source · pub struct SlicedPacket<'a> {
pub link: Option<LinkSlice<'a>>,
pub vlan: Option<VlanSlice<'a>>,
pub net: Option<NetSlice<'a>>,
pub transport: Option<TransportSlice<'a>>,
}
Expand description
Packet slice split into multiple slices containing the different headers & payload.
Everything that could not be parsed is stored in a slice in the field “payload”.
You can use
depending on your starting header to slice a packet.
§Examples
Basic usage:
match SlicedPacket::from_ethernet(&packet) {
Err(value) => println!("Err {:?}", value),
Ok(value) => {
println!("link: {:?}", value.link);
println!("vlan: {:?}", value.vlan);
println!("net: {:?}", value.net);
println!("transport: {:?}", value.transport);
}
}
Fields§
§link: Option<LinkSlice<'a>>
Ethernet II header if present.
vlan: Option<VlanSlice<'a>>
Single or double vlan headers if present.
net: Option<NetSlice<'a>>
IPv4 or IPv6 header, IP extension headers & payload if present.
transport: Option<TransportSlice<'a>>
TCP or UDP header & payload if present.
Implementations§
source§impl<'a> SlicedPacket<'a>
impl<'a> SlicedPacket<'a>
sourcepub fn from_ethernet(data: &'a [u8]) -> Result<SlicedPacket<'_>, SliceError>
pub fn from_ethernet(data: &'a [u8]) -> Result<SlicedPacket<'_>, SliceError>
Separates a network packet slice into different slices containing the headers from the ethernet header downwards.
The result is returned as a SlicedPacket
struct. This function assumes the given data starts
with an ethernet II header.
§Examples
Basic usage:
match SlicedPacket::from_ethernet(&packet) {
Err(value) => println!("Err {:?}", value),
Ok(value) => {
println!("link: {:?}", value.link);
println!("vlan: {:?}", value.vlan);
println!("net: {:?}", value.net);
println!("transport: {:?}", value.transport);
}
}
sourcepub fn from_ether_type(
ether_type: EtherType,
data: &'a [u8]
) -> Result<SlicedPacket<'_>, SliceError>
pub fn from_ether_type( ether_type: EtherType, data: &'a [u8] ) -> Result<SlicedPacket<'_>, SliceError>
Separates a network packet slice into different slices containing the headers using
the given ether_type
number to identify the first header.
The result is returned as a SlicedPacket
struct. Currently supported
ether type numbers are:
ether_type::IPV4
ether_type::IPV6
ether_type::VLAN_TAGGED_FRAME
ether_type::PROVIDER_BRIDGING
ether_type::VLAN_DOUBLE_TAGGED_FRAME
If an unsupported ether type is given the given slice will be set as payload
and all other fields will be set to None
.
§Example
Basic usage:
use etherparse::{ether_type, SlicedPacket};
match SlicedPacket::from_ether_type(ether_type::IPV4, packet) {
Err(value) => println!("Err {:?}", value),
Ok(value) => {
println!("link: {:?}", value.link);
println!("vlan: {:?}", value.vlan);
println!("net: {:?}", value.net);
println!("transport: {:?}", value.transport);
}
}
sourcepub fn from_ip(data: &'a [u8]) -> Result<SlicedPacket<'_>, SliceError>
pub fn from_ip(data: &'a [u8]) -> Result<SlicedPacket<'_>, SliceError>
Separates a network packet slice into different slices containing the headers from the ip header downwards.
The result is returned as a SlicedPacket
struct. This function assumes the given data starts
with an IPv4 or IPv6 header.
§Examples
Basic usage:
match SlicedPacket::from_ip(&packet) {
Err(value) => println!("Err {:?}", value),
Ok(value) => {
//link & vlan fields are empty when parsing from ip downwards
assert_eq!(None, value.link);
assert_eq!(None, value.vlan);
//ip & transport (udp or tcp)
println!("net: {:?}", value.net);
println!("transport: {:?}", value.transport);
}
}
sourcepub fn payload_ether_type(&self) -> Option<EtherType>
pub fn payload_ether_type(&self) -> Option<EtherType>
If the slice in the payload
field contains an ethernet payload
this method returns the ether type number describing the payload type.
The ether type number can come from an ethernet II header or a VLAN header depending on which headers are present.
In case that ip
and/or transport
fields are the filled None
is returned, as the payload contents then are defined by a
lower layer protocol described in these fields.
sourcepub fn ether_payload(&self) -> Option<EtherPayloadSlice<'a>>
pub fn ether_payload(&self) -> Option<EtherPayloadSlice<'a>>
Returns the last ether payload of the packet (if one is present).
If VLAN header is present the payload after the most inner VLAN header is returned and if there is no VLAN header is present in the link field is returned.
sourcepub fn ip_payload(&self) -> Option<&IpPayloadSlice<'a>>
pub fn ip_payload(&self) -> Option<&IpPayloadSlice<'a>>
Return the IP payload after the the IP header and the IP extension headers (if one is present).
Trait Implementations§
source§impl<'a> Clone for SlicedPacket<'a>
impl<'a> Clone for SlicedPacket<'a>
source§fn clone(&self) -> SlicedPacket<'a>
fn clone(&self) -> SlicedPacket<'a>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<'a> Debug for SlicedPacket<'a>
impl<'a> Debug for SlicedPacket<'a>
source§impl<'a> PartialEq for SlicedPacket<'a>
impl<'a> PartialEq for SlicedPacket<'a>
source§fn eq(&self, other: &SlicedPacket<'a>) -> bool
fn eq(&self, other: &SlicedPacket<'a>) -> bool
self
and other
values to be equal, and is used
by ==
.