Struct etherparse::SlicedPacket
source · pub struct SlicedPacket<'a> {
pub link: Option<LinkSlice<'a>>,
pub vlan: Option<VlanSlice<'a>>,
pub ip: Option<InternetSlice<'a>>,
pub transport: Option<TransportSlice<'a>>,
pub payload: &'a [u8],
}
Expand description
A sliced into its component headers. Everything that could not be parsed is stored in a slice in the field “payload”.
Fields§
§link: Option<LinkSlice<'a>>
§vlan: Option<VlanSlice<'a>>
§ip: Option<InternetSlice<'a>>
§transport: Option<TransportSlice<'a>>
§payload: &'a [u8]
The payload field points to the rest of the packet that could not be parsed by etherparse.
Depending on what other fields contain a “Some” values the payload contains the corresponding payload.
For example if transport field contains Some(Udp(_)) then the payload field points to the udp payload. On the other hand if the transport field contains None then the payload contains the payload of next field containing a Some value (in order of transport, ip, vlan, link).
Implementations§
source§impl<'a> SlicedPacket<'a>
impl<'a> SlicedPacket<'a>
sourcepub fn from_ethernet(data: &'a [u8]) -> Result<SlicedPacket<'_>, ReadError>
pub fn from_ethernet(data: &'a [u8]) -> Result<SlicedPacket<'_>, ReadError>
Seperates a network packet slice into different slices containing the headers from the ethernet header downwards.
The result is returned as a SlicerPacket 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!("ip: {:?}", value.ip);
println!("transport: {:?}", value.transport);
}
}
sourcepub fn from_ip(data: &'a [u8]) -> Result<SlicedPacket<'_>, ReadError>
pub fn from_ip(data: &'a [u8]) -> Result<SlicedPacket<'_>, ReadError>
Seperates a network packet slice into different slices containing the headers from the ip header downwards.
The result is returned as a SlicerPacket 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!("ip: {:?}", value.ip);
println!("transport: {:?}", value.transport);
}
}
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 more