feature parity with python
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
use indicatif::{ProgressBar, ProgressIterator};
|
||||
use png;
|
||||
use std::fs::File;
|
||||
use std::io::BufWriter;
|
||||
use std::io::Write;
|
||||
use std::path::Path;
|
||||
|
||||
use pcap_parser::traits::PcapReaderIterator;
|
||||
use pcap_parser::*;
|
||||
@@ -103,26 +107,32 @@ fn main() -> anyhow::Result<()> {
|
||||
println!("found {} packets, saved {}, {} size", i, data.len(), size);
|
||||
let mut dump = File::create_new("dump.bin");
|
||||
let mut frames = vec![];
|
||||
let mut parts = None;
|
||||
let mut parts = vec![];
|
||||
for packet in data.iter() {
|
||||
if let Ok(ref mut dump) = dump {
|
||||
dump.write_all(&packet);
|
||||
}
|
||||
let hdr = Header::read(packet)?;
|
||||
let data = packet[HDR_SIZE..].to_vec();
|
||||
match parts {
|
||||
None => {
|
||||
parts = Some(vec![data]);
|
||||
}
|
||||
Some(ref mut v) => {
|
||||
v.push(data);
|
||||
if hdr.part == 0 {
|
||||
frames.push(parts.take());
|
||||
}
|
||||
}
|
||||
if hdr.part == 0 && parts.len() > 0 {
|
||||
frames.push(parts.concat());
|
||||
parts.clear();
|
||||
}
|
||||
parts.push(data);
|
||||
}
|
||||
println!("found {} frames", frames.len());
|
||||
let pb = ProgressBar::new(frames.len() as u64);
|
||||
for (i, frame) in frames.iter().enumerate().progress_with(pb) {
|
||||
let name = format!("{:03}.png", i);
|
||||
let path = Path::new(&name);
|
||||
let file = File::create(path).unwrap();
|
||||
let ref mut w = BufWriter::new(file);
|
||||
let mut encoder = png::Encoder::new(w, 288, 384);
|
||||
encoder.set_color(png::ColorType::Grayscale);
|
||||
encoder.set_depth(png::BitDepth::Sixteen);
|
||||
let mut writer = encoder.write_header()?;
|
||||
writer.write_image_data(&frame);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user