tcpdump.rs 658 B

123456789101112131415161718192021
  1. extern crate smoltcp;
  2. use std::env;
  3. use std::os::unix::io::AsRawFd;
  4. use smoltcp::phy::wait as phy_wait;
  5. use smoltcp::phy::{Device, RxToken, RawSocket};
  6. use smoltcp::wire::{PrettyPrinter, EthernetFrame};
  7. use smoltcp::time::Instant;
  8. fn main() {
  9. let ifname = env::args().nth(1).unwrap();
  10. let mut socket = RawSocket::new(ifname.as_ref()).unwrap();
  11. loop {
  12. phy_wait(socket.as_raw_fd(), None).unwrap();
  13. let (rx_token, _) = socket.receive().unwrap();
  14. rx_token.consume(Instant::now(), |buffer| {
  15. println!("{}", PrettyPrinter::<EthernetFrame<&[u8]>>::new("", &buffer));
  16. Ok(())
  17. }).unwrap();
  18. }
  19. }