use crate::*;
use ipnet::IpNet;
#[test]
fn test() {
async_std::task::block_on(async {
if let Err(e) = it_works().await {
eprintln!("ERROR: {}", e);
};
})
}
use std::net::IpAddr;
async fn it_works() -> Result<()> {
let ipnet = "192.168.11.1/24".parse::<IpNet>().context(ParseAddrFail)?;
let tun = Systun::from_ipnet(&ipnet).await?;
nettool::icmp::send_ping(ipnet.addr()).await.unwrap();
let mut reader = tun.reader();
let mut pkt = reader.read().await?;
assert_eq!(pkt.source_addr(), "192.168.11.0".parse::<IpAddr>().unwrap());
assert_eq!(pkt.dest_addr(), ipnet.addr());
assert_eq!(pkt.version(), 4);
assert_eq!(pkt.ihl(), 5);
assert_eq!(pkt.type_of_service(), 0);
assert_eq!(pkt.total_length(), 52);
assert_eq!(pkt.flags(), 0);
assert_eq!(pkt.ttl(), 64);
assert_eq!(pkt.protocol(), 1); assert_eq!(pkt.checksum(), pkt.cal_checksum());
let mut icmp = protocol::icmp::from(pkt.payload_mut());
assert_eq!(icmp.typ(), 8);
let echo = icmp.echo();
let echo_data = echo.data();
for i in 0..echo_data.len() {
assert_eq!(i as u8, echo_data[i]);
}
assert_eq!(echo.checksum(), echo.cal_checksum());
Ok(())
}