endian fixes to make timestamps work

This commit is contained in:
Nils Andreas Svee committed 2022-09-04 14:59:57 +02:00
1 parent 724dc6dfc0
commit 109be5afd6
1 file changed
+12 -14
+12 -14
View File
@@ -1,11 +1,9 @@
use bincode::{deserialize, serialize}; use bincode::{deserialize, serialize};
use std::error::Error; use std::error::Error;
use std::net::{IpAddr, Ipv6Addr, SocketAddrV4, SocketAddrV6}; use std::net::IpAddr;
use std::{process, thread, time}; use std::{thread, time};
use crate::Pinger; use crate::Pinger;
use byteorder::*;
use nix::sys::time::TimeValLike;
use nix::time::{clock_gettime, ClockId}; use nix::time::{clock_gettime, ClockId};
use pnet::packet::icmp::IcmpTypes::{Timestamp, TimestampReply}; use pnet::packet::icmp::IcmpTypes::{Timestamp, TimestampReply};
use pnet::packet::ip::IpNextHeaderProtocols; use pnet::packet::ip::IpNextHeaderProtocols;
@@ -66,7 +64,7 @@ impl Pinger for PingerICMPTimestamps {
let time = clock_gettime(ClockId::CLOCK_REALTIME).unwrap(); let time = clock_gettime(ClockId::CLOCK_REALTIME).unwrap();
let time_since_midnight: i64 = let time_since_midnight: i64 =
((time.tv_sec() % 86400 * 1000) + (time.tv_nsec() / 1000000)); (time.tv_sec() % 86400 * 1000) + (time.tv_nsec() / 1000000);
if packet.get_icmp_type() != TimestampReply { if packet.get_icmp_type() != TimestampReply {
continue; continue;
@@ -79,11 +77,11 @@ impl Pinger for PingerICMPTimestamps {
continue; continue;
} }
let rtt: i64 = time_since_midnight - hdr.originate_time as i64; let rtt: i64 = time_since_midnight - hdr.originate_time.to_be() as i64;
let dl_time: i64 = time_since_midnight - hdr.transmit_time as i64; let dl_time: i64 = time_since_midnight - hdr.transmit_time.to_be() as i64;
let ul_time: i64 = hdr.receive_time as i64 - hdr.originate_time as i64; let ul_time: i64 = hdr.receive_time.to_be() as i64 - hdr.originate_time.to_be() as i64;
println!("Type: {:4} | Reflector IP: {:>15} | Seq: {:5} | Current time: {:8} | Originate: {:8} | Received time: {:8} | Transmit time : {:8} | RTT: {:8} | UL time: {:5} | DL time: {:5}", "ICMP", sender.to_string(), hdr.sequence, time_since_midnight, hdr.originate_time, hdr.receive_time, hdr.transmit_time, rtt, ul_time, dl_time); println!("Type: {:4} | Reflector IP: {:>15} | Seq: {:5} | Current time: {:8} | Originate: {:8} | Received time: {:8} | Transmit time : {:8} | RTT: {:8} | UL time: {:5} | DL time: {:5}", "ICMP", sender.to_string(), hdr.sequence, time_since_midnight, hdr.originate_time.to_be(), hdr.receive_time.to_be(), hdr.transmit_time.to_be(), rtt, ul_time, dl_time);
} }
} }
@@ -121,13 +119,13 @@ impl Pinger for PingerICMPTimestamps {
let time_since_midnight: u32 = let time_since_midnight: u32 =
((time.tv_sec() % 86400 * 1000) + (time.tv_nsec() / 1000000)) as u32; ((time.tv_sec() % 86400 * 1000) + (time.tv_nsec() / 1000000)) as u32;
let mut icmp = ICMPTimestamp { let icmp = ICMPTimestamp {
type_: 255, type_: 0,
code: 255, code: 0,
checksum: 65535, checksum: 0,
identifier: id, identifier: id,
sequence: seq, sequence: seq,
originate_time: time_since_midnight, originate_time: time_since_midnight.to_be(),
receive_time: 0, receive_time: 0,
transmit_time: 0, transmit_time: 0,
}; };