mirror of
https://github.com/storytold/xsens-packet-send.git
synced 2026-10-09 00:09:59 +00:00
send packets to unreal from xsens (wip)
This commit is contained in:
+13
@@ -0,0 +1,13 @@
|
|||||||
|
[package]
|
||||||
|
name = "packet-send"
|
||||||
|
version = "0.0.1"
|
||||||
|
authors = []
|
||||||
|
publish = false
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "packet-send"
|
||||||
|
src = "src/main.rs"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
pcap-parser = "0.14.0"
|
||||||
+62
@@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
use pcap_parser::*;
|
||||||
|
use pcap_parser::traits::PcapReaderIterator;
|
||||||
|
use std::fs::File;
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
println!("Test");
|
||||||
|
|
||||||
|
//let path = "anim.pcap";
|
||||||
|
let path = "anim.pcapng";
|
||||||
|
|
||||||
|
let file = File::open(path).unwrap();
|
||||||
|
let mut num_blocks = 0;
|
||||||
|
let capacity = 199999999;
|
||||||
|
let mut reader = PcapNGReader::new(capacity, file).expect("PcapNGReader");
|
||||||
|
let mut if_linktypes = Vec::new();
|
||||||
|
loop {
|
||||||
|
match reader.next() {
|
||||||
|
Ok((offset, block)) => {
|
||||||
|
println!("got new block");
|
||||||
|
num_blocks += 1;
|
||||||
|
match block {
|
||||||
|
PcapBlockOwned::NG(Block::SectionHeader(ref _shb)) => {
|
||||||
|
// starting a new section, clear known interfaces
|
||||||
|
if_linktypes = Vec::new();
|
||||||
|
},
|
||||||
|
PcapBlockOwned::NG(Block::InterfaceDescription(ref idb)) => {
|
||||||
|
if_linktypes.push(idb.linktype);
|
||||||
|
},
|
||||||
|
PcapBlockOwned::NG(Block::EnhancedPacket(ref epb)) => {
|
||||||
|
assert!((epb.if_id as usize) < if_linktypes.len());
|
||||||
|
let linktype = if_linktypes[epb.if_id as usize];
|
||||||
|
#[cfg(feature="data")]
|
||||||
|
let res = pcap_parser::data::get_packetdata(epb.data, linktype, epb.caplen as usize);
|
||||||
|
},
|
||||||
|
PcapBlockOwned::NG(Block::SimplePacket(ref spb)) => {
|
||||||
|
assert!(if_linktypes.len() > 0);
|
||||||
|
let linktype = if_linktypes[0];
|
||||||
|
let blen = (spb.block_len1 - 16) as usize;
|
||||||
|
#[cfg(feature="data")]
|
||||||
|
let res = pcap_parser::data::get_packetdata(spb.data, linktype, blen);
|
||||||
|
},
|
||||||
|
PcapBlockOwned::NG(_) => {
|
||||||
|
// can be statistics (ISB), name resolution (NRB), etc.
|
||||||
|
eprintln!("unsupported block");
|
||||||
|
},
|
||||||
|
PcapBlockOwned::Legacy(_)
|
||||||
|
| PcapBlockOwned::LegacyHeader(_) => unreachable!(),
|
||||||
|
}
|
||||||
|
reader.consume(offset);
|
||||||
|
},
|
||||||
|
Err(PcapError::Eof) => break,
|
||||||
|
Err(PcapError::Incomplete) => {
|
||||||
|
eprintln!("Could not read complete data block.");
|
||||||
|
eprintln!("Hint: the reader buffer size may be too small, or the input file nay be truncated.");
|
||||||
|
break;
|
||||||
|
},
|
||||||
|
Err(e) => panic!("error while reading: {:?}", e),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("num_blocks: {}", num_blocks);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user