From 10b9e061be89579f37fca89d4af75c4e8c95e793 Mon Sep 17 00:00:00 2001 From: Giuliano Bellini s294739 Date: Tue, 16 Aug 2022 16:33:01 +0200 Subject: [PATCH] updated docs --- packet_sniffer/report.txt | 8 ++++---- packet_sniffer/src/main.rs | 2 +- .../src/thread_parse_packets_functions.rs | 2 ++ .../src/thread_write_report_functions.rs | 2 ++ .../doc-bin-packet_sniffer | 2 +- .../doc-bin-packet_sniffer.json | 2 +- .../deps/packet_sniffer-dc5f7f27d88e7304 | Bin 8236776 -> 8236776 bytes ...e7304.packet_sniffer.5f51af02-cgu.9.rcgu.o | Bin 159440 -> 159432 bytes packet_sniffer/target/debug/packet_sniffer | Bin 8236776 -> 8236776 bytes .../fn.analyze_network_header.html | 2 +- .../fn.analyze_transport_header.html | 2 +- .../fn.from_port_to_application_protocol.html | 2 +- ...n.modify_or_insert_destination_in_map.html | 2 +- .../fn.modify_or_insert_source_in_map.html | 2 +- .../fn.parse_packets_loop.html | 5 ++++- .../thread_parse_packets_functions/index.html | 2 +- .../fn.get_min_packets_string.html | 2 +- .../fn.get_network_layer_string.html | 2 +- .../fn.get_ports_string.html | 2 +- .../fn.get_transport_layer_string.html | 2 +- .../fn.sleep_and_write_report_loop.html | 5 ++++- .../fn.write_report_file_header.html | 2 +- .../thread_write_report_functions/index.html | 2 +- .../doc/src/packet_sniffer/main.rs.html | 2 +- .../thread_parse_packets_functions.rs.html | 4 ++++ .../thread_write_report_functions.rs.html | 4 ++++ 26 files changed, 40 insertions(+), 22 deletions(-) diff --git a/packet_sniffer/report.txt b/packet_sniffer/report.txt index 4a621b18..2b9378c4 100644 --- a/packet_sniffer/report.txt +++ b/packet_sniffer/report.txt @@ -4,10 +4,10 @@ <><> Packets are sniffed from adapter 'en0' <><> <><> Report updates info -<><> Report start time: 16/08/2022 15:38:48 -<><> Report last update: 16/08/2022 15:38:58 -<><> Report update frequency: every 5 seconds -<><> Number of times report was updated: 2 +<><> Report start time: 16/08/2022 16:25:14 +<><> Report last update: 16/08/2022 16:26:02 +<><> Report update frequency: every 2 seconds +<><> Number of times report was updated: 20 <><> <><> Filters <><> Considering address:port pairs featured by any number of packets diff --git a/packet_sniffer/src/main.rs b/packet_sniffer/src/main.rs index aeb91f54..725bad50 100644 --- a/packet_sniffer/src/main.rs +++ b/packet_sniffer/src/main.rs @@ -255,7 +255,7 @@ fn set_status_by_key(status_pair: Arc<(Mutex, Condvar)>) { InputEvent::Keyboard(KeyEvent::Char('s')) => { *status = Status::Stop; cvar.notify_all(); - println!("\n\t{}", "Capture stopped\r".red()); + println!("\n\t{}", "Capture stopped\n\r".red()); return; } _ => { /* Other events */ } diff --git a/packet_sniffer/src/thread_parse_packets_functions.rs b/packet_sniffer/src/thread_parse_packets_functions.rs index 74b281fc..b2b0756f 100644 --- a/packet_sniffer/src/thread_parse_packets_functions.rs +++ b/packet_sniffer/src/thread_parse_packets_functions.rs @@ -30,6 +30,8 @@ use crate::{AddressPort, AppProtocol, ReportInfo, Status, TransProtocol}; /// ```-t``` option. /// /// * `mutex_map` - Mutex to permit exclusive access to the shared variable in which the parsed packets are inserted. +/// +/// * `status_pair` - Shared variable to check the application current status. pub fn parse_packets_loop(mut cap: Capture, lowest_port: u16, highest_port: u16, network_layer_filter: String, transport_layer_filter: String, mutex_map: Arc>>, diff --git a/packet_sniffer/src/thread_write_report_functions.rs b/packet_sniffer/src/thread_write_report_functions.rs index c8e2dc09..5f975d7a 100644 --- a/packet_sniffer/src/thread_write_report_functions.rs +++ b/packet_sniffer/src/thread_write_report_functions.rs @@ -46,6 +46,8 @@ use crate::{AddressPort, ReportInfo, Status}; /// ```-o``` option. /// /// * `mutex_map` - Mutex to permit exclusive access to the shared variable containing the parsed packets. +/// +/// * `status_pair` - Shared variable to check the application current status. pub fn sleep_and_write_report_loop(lowest_port: u16, highest_port: u16, interval: u64, min_packets: u32, device_name: String, network_layer: String, transport_layer: String, output_file: String, mutex_map: Arc>>, diff --git a/packet_sniffer/target/debug/.fingerprint/packet_sniffer-e082052473f402b2/doc-bin-packet_sniffer b/packet_sniffer/target/debug/.fingerprint/packet_sniffer-e082052473f402b2/doc-bin-packet_sniffer index 17c378a0..e76a5e99 100644 --- a/packet_sniffer/target/debug/.fingerprint/packet_sniffer-e082052473f402b2/doc-bin-packet_sniffer +++ b/packet_sniffer/target/debug/.fingerprint/packet_sniffer-e082052473f402b2/doc-bin-packet_sniffer @@ -1 +1 @@ -22c8030a7ec18d42 \ No newline at end of file +81d1caf43e23eb94 \ No newline at end of file diff --git a/packet_sniffer/target/debug/.fingerprint/packet_sniffer-e082052473f402b2/doc-bin-packet_sniffer.json b/packet_sniffer/target/debug/.fingerprint/packet_sniffer-e082052473f402b2/doc-bin-packet_sniffer.json index 1b10a0cd..a0fdb535 100644 --- a/packet_sniffer/target/debug/.fingerprint/packet_sniffer-e082052473f402b2/doc-bin-packet_sniffer.json +++ b/packet_sniffer/target/debug/.fingerprint/packet_sniffer-e082052473f402b2/doc-bin-packet_sniffer.json @@ -1 +1 @@ -{"rustc":1057704222874089767,"features":"[]","target":1089383778197212572,"profile":7205898968962111825,"path":1684066648322511884,"deps":[[1007160655150010859,"etherparse",false,2001235469302492025],[2546391497213564629,"crossterm",false,12305349783692866968],[10684445640410993552,"clap",false,518261689120114046],[13706948548054529507,"pcap",false,18010210317093663328],[14419135841914355888,"chrono",false,12893910902775493131],[17707344772896049979,"colored",false,16682548037058840226]],"local":[{"Precalculated":"1660659606.777190526s (src/main.rs)"}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file +{"rustc":1057704222874089767,"features":"[]","target":1089383778197212572,"profile":7205898968962111825,"path":1684066648322511884,"deps":[[1007160655150010859,"etherparse",false,2001235469302492025],[2546391497213564629,"crossterm",false,12305349783692866968],[10684445640410993552,"clap",false,518261689120114046],[13706948548054529507,"pcap",false,18010210317093663328],[14419135841914355888,"chrono",false,12893910902775493131],[17707344772896049979,"colored",false,16682548037058840226]],"local":[{"Precalculated":"1660660310.266129890s (src/thread_write_report_functions.rs)"}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/packet_sniffer/target/debug/deps/packet_sniffer-dc5f7f27d88e7304 b/packet_sniffer/target/debug/deps/packet_sniffer-dc5f7f27d88e7304 index 89226869b658a772e4ffa7beb5a38a9f00444be7..c670c872f55c3e438b30c5dc6bf0cfd2e661692c 100755 GIT binary patch delta 741 zcmZ9`%TE(w6vp9xjyQI(bjHyc>#Z$bMr@}lqIgH{^$vJx@m3H<6h%rqrJ|CUxM(zS z!Rj-vj3Hs`ZW2x05)(K60lG6`i5uh6A93fKJUN^5o}8uczm+9?$f|ne>tfQkTEp`_ zTA{ajvExNvt>smLRY6`=x+k>fZ=F!~_3XQkMzG*3rVzgTR8bnmK=7lYvMSVh46&7k0zJ9yA4J zb#KEPqjR|ES4v)@>`xYp-l!Il$!O}c?j*cvuQZd;!hI#LTu#Ve=@hT%DWn5acYoH! zhC-oG8ebx*kYLthB_qCID@k|hx53Ai@1b7^kV>*aRpa#4LRg7i0in4o4AGBC}0S~xPuXl!oyvR;U4Z| j91rji6L^G46fuPo%J5OaG^%)v89c#LJPYRR*_`|fy%g*y delta 740 zcmZ9|J4_RC9KiAWd*Vr<^y=xIRkQ~_Dz=9T_!hAuT2X}hYU>LtoNu7CS1Kx#Ll-q+ z`kNRNH#g&8a)~BRE-oexjv5oAY2sj99F5<`&0q4#Z~49Qt9|;d*6<>w=^uN)K7Tve z{paP+AIx*r6BC%k6bhI|5hZviV+Iw}|22!-xP!a?yfv4Re*yOH?;`*J diff --git a/packet_sniffer/target/debug/deps/packet_sniffer-dc5f7f27d88e7304.packet_sniffer.5f51af02-cgu.9.rcgu.o b/packet_sniffer/target/debug/deps/packet_sniffer-dc5f7f27d88e7304.packet_sniffer.5f51af02-cgu.9.rcgu.o index c3fd57dd6df21d41683823644a87b0af78b5c235..3814a6106e70863818baf3f5431cdf0bea749012 100644 GIT binary patch delta 48346 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 Sno%Q%w%u89jddsPEdLL1$$A3- delta 48364 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 diff --git a/packet_sniffer/target/debug/packet_sniffer b/packet_sniffer/target/debug/packet_sniffer index 89226869b658a772e4ffa7beb5a38a9f00444be7..c670c872f55c3e438b30c5dc6bf0cfd2e661692c 100755 GIT binary patch delta 741 zcmZ9`%TE(w6vp9xjyQI(bjHyc>#Z$bMr@}lqIgH{^$vJx@m3H<6h%rqrJ|CUxM(zS z!Rj-vj3Hs`ZW2x05)(K60lG6`i5uh6A93fKJUN^5o}8uczm+9?$f|ne>tfQkTEp`_ zTA{ajvExNvt>smLRY6`=x+k>fZ=F!~_3XQkMzG*3rVzgTR8bnmK=7lYvMSVh46&7k0zJ9yA4J zb#KEPqjR|ES4v)@>`xYp-l!Il$!O}c?j*cvuQZd;!hI#LTu#Ve=@hT%DWn5acYoH! zhC-oG8ebx*kYLthB_qCID@k|hx53Ai@1b7^kV>*aRpa#4LRg7i0in4o4AGBC}0S~xPuXl!oyvR;U4Z| j91rji6L^G46fuPo%J5OaG^%)v89c#LJPYRR*_`|fy%g*y delta 740 zcmZ9|J4_RC9KiAWd*Vr<^y=xIRkQ~_Dz=9T_!hAuT2X}hYU>LtoNu7CS1Kx#Ll-q+ z`kNRNH#g&8a)~BRE-oexjv5oAY2sj99F5<`&0q4#Z~49Qt9|;d*6<>w=^uN)K7Tve z{paP+AIx*r6BC%k6bhI|5hZviV+Iw}|22!-xP!a?yfv4Re*yOH?;`*J diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.analyze_network_header.html b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.analyze_network_header.html index aa24554e..90b8c43b 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.analyze_network_header.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.analyze_network_header.html @@ -1,6 +1,6 @@ analyze_network_header in packet_sniffer::thread_parse_packets_functions - Rust

Function packet_sniffer::thread_parse_packets_functions::analyze_network_header[−][src]

fn analyze_network_header(
    network_header: Option<IpHeader>,
    exchanged_bytes: &mut u32,
    network_layer: &mut String,
    address1: &mut String,
    address2: &mut String,
    skip_packet: &mut bool
)
Expand description

This function analyzes the network layer header passed as parameter and updates variables +

Function packet_sniffer::thread_parse_packets_functions::analyze_network_header[−][src]

fn analyze_network_header(
    network_header: Option<IpHeader>,
    exchanged_bytes: &mut u32,
    network_layer: &mut String,
    address1: &mut String,
    address2: &mut String,
    skip_packet: &mut bool
)
Expand description

This function analyzes the network layer header passed as parameter and updates variables passed by reference on the basis of the packet header content.

Arguments

    diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.analyze_transport_header.html b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.analyze_transport_header.html index 41196099..c570d077 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.analyze_transport_header.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.analyze_transport_header.html @@ -1,6 +1,6 @@ analyze_transport_header in packet_sniffer::thread_parse_packets_functions - Rust

    Function packet_sniffer::thread_parse_packets_functions::analyze_transport_header[−][src]

    fn analyze_transport_header(
        transport_header: Option<TransportHeader>,
        transport_layer: &mut String,
        port1: &mut u16,
        port2: &mut u16,
        application_protocol_1: &mut Option<AppProtocol>,
        application_protocol_2: &mut Option<AppProtocol>,
        application_protocols: &mut HashSet<AppProtocol>,
        transport_protocol: &mut TransProtocol,
        skip_packet: &mut bool
    )
    Expand description

    This function analyzes the transport layer header passed as parameter and updates variables +

    Function packet_sniffer::thread_parse_packets_functions::analyze_transport_header[−][src]

    fn analyze_transport_header(
        transport_header: Option<TransportHeader>,
        transport_layer: &mut String,
        port1: &mut u16,
        port2: &mut u16,
        application_protocol_1: &mut Option<AppProtocol>,
        application_protocol_2: &mut Option<AppProtocol>,
        application_protocols: &mut HashSet<AppProtocol>,
        transport_protocol: &mut TransProtocol,
        skip_packet: &mut bool
    )
    Expand description

    This function analyzes the transport layer header passed as parameter and updates variables passed by reference on the basis of the packet header content.

    Arguments

      diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.from_port_to_application_protocol.html b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.from_port_to_application_protocol.html index 7582ca71..c2fa9f0d 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.from_port_to_application_protocol.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.from_port_to_application_protocol.html @@ -1,6 +1,6 @@ from_port_to_application_protocol in packet_sniffer::thread_parse_packets_functions - Rust

      Function packet_sniffer::thread_parse_packets_functions::from_port_to_application_protocol[−][src]

      fn from_port_to_application_protocol(port: u16) -> Option<AppProtocol>
      Expand description

      Given an integer in the range 0..=65535, this function returns an Option<AppProtocol> containing +

      Function packet_sniffer::thread_parse_packets_functions::from_port_to_application_protocol[−][src]

      fn from_port_to_application_protocol(port: u16) -> Option<AppProtocol>
      Expand description

      Given an integer in the range 0..=65535, this function returns an Option<AppProtocol> containing the respective application protocol represented by a value of the AppProtocol enum. Only the most common application layer protocols are considered; if a unknown port number is provided, this function returns None.

      diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.modify_or_insert_destination_in_map.html b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.modify_or_insert_destination_in_map.html index f39aa2ce..81fd03f5 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.modify_or_insert_destination_in_map.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.modify_or_insert_destination_in_map.html @@ -1,6 +1,6 @@ modify_or_insert_destination_in_map in packet_sniffer::thread_parse_packets_functions - Rust

      Function packet_sniffer::thread_parse_packets_functions::modify_or_insert_destination_in_map[−][src]

      fn modify_or_insert_destination_in_map(
          mutex_map: Arc<Mutex<HashMap<AddressPort, ReportInfo>>>,
          key: AddressPort,
          exchanged_bytes: u32,
          transport_protocol: TransProtocol,
          application_protocol_1: Option<AppProtocol>,
          application_protocol_2: Option<AppProtocol>,
          application_protocols: HashSet<AppProtocol>
      )
      Expand description

      Function to insert the destination of a packet into the shared map containing the analyzed traffic.

      +

      Function packet_sniffer::thread_parse_packets_functions::modify_or_insert_destination_in_map[−][src]

      fn modify_or_insert_destination_in_map(
          mutex_map: Arc<Mutex<HashMap<AddressPort, ReportInfo>>>,
          key: AddressPort,
          exchanged_bytes: u32,
          transport_protocol: TransProtocol,
          application_protocol_1: Option<AppProtocol>,
          application_protocol_2: Option<AppProtocol>,
          application_protocols: HashSet<AppProtocol>
      )
      Expand description

      Function to insert the destination of a packet into the shared map containing the analyzed traffic.

      Arguments

      • diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.modify_or_insert_source_in_map.html b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.modify_or_insert_source_in_map.html index b969d0ae..8028c39b 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.modify_or_insert_source_in_map.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.modify_or_insert_source_in_map.html @@ -1,6 +1,6 @@ modify_or_insert_source_in_map in packet_sniffer::thread_parse_packets_functions - Rust

        Function packet_sniffer::thread_parse_packets_functions::modify_or_insert_source_in_map[−][src]

        fn modify_or_insert_source_in_map(
            mutex_map: Arc<Mutex<HashMap<AddressPort, ReportInfo>>>,
            key: AddressPort,
            exchanged_bytes: u32,
            transport_protocol: TransProtocol,
            application_protocol_1: Option<AppProtocol>,
            application_protocol_2: Option<AppProtocol>,
            application_protocols: HashSet<AppProtocol>
        )
        Expand description

        Function to insert the source of a packet into the shared map containing the analyzed traffic.

        +

        Function packet_sniffer::thread_parse_packets_functions::modify_or_insert_source_in_map[−][src]

        fn modify_or_insert_source_in_map(
            mutex_map: Arc<Mutex<HashMap<AddressPort, ReportInfo>>>,
            key: AddressPort,
            exchanged_bytes: u32,
            transport_protocol: TransProtocol,
            application_protocol_1: Option<AppProtocol>,
            application_protocol_2: Option<AppProtocol>,
            application_protocols: HashSet<AppProtocol>
        )
        Expand description

        Function to insert the source of a packet into the shared map containing the analyzed traffic.

        Arguments

        • diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.parse_packets_loop.html b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.parse_packets_loop.html index f7810998..8380ccef 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.parse_packets_loop.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/fn.parse_packets_loop.html @@ -1,6 +1,6 @@ parse_packets_loop in packet_sniffer::thread_parse_packets_functions - Rust

          Function packet_sniffer::thread_parse_packets_functions::parse_packets_loop[−][src]

          pub fn parse_packets_loop(
              cap: Capture<Active>,
              lowest_port: u16,
              highest_port: u16,
              network_layer_filter: String,
              transport_layer_filter: String,
              mutex_map: Arc<Mutex<HashMap<AddressPort, ReportInfo>>>,
              status_pair: Arc<(Mutex<Status>, Condvar)>
          )
          Expand description

          The calling thread enters in a loop in which it waits for network packets, parses them according +

          Function packet_sniffer::thread_parse_packets_functions::parse_packets_loop[−][src]

          pub fn parse_packets_loop(
              cap: Capture<Active>,
              lowest_port: u16,
              highest_port: u16,
              network_layer_filter: String,
              transport_layer_filter: String,
              mutex_map: Arc<Mutex<HashMap<AddressPort, ReportInfo>>>,
              status_pair: Arc<(Mutex<Status>, Condvar)>
          )
          Expand description

          The calling thread enters in a loop in which it waits for network packets, parses them according to the user specified filters, and inserts them into the shared map variable.

          Arguments

            @@ -26,6 +26,9 @@ through the -h option.

          • mutex_map - Mutex to permit exclusive access to the shared variable in which the parsed packets are inserted.

          • +
          • +

            status_pair - Shared variable to check the application current status.

            +
          \ No newline at end of file diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/index.html b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/index.html index 8c888696..4d3021bd 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/index.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_parse_packets_functions/index.html @@ -1,6 +1,6 @@ packet_sniffer::thread_parse_packets_functions - Rust

          Module packet_sniffer::thread_parse_packets_functions[−][src]

          Expand description

          Module containing functions executed by the thread in charge of parsing sniffed packets and +

          Module thread_parse_packets_functions

          Module packet_sniffer::thread_parse_packets_functions[−][src]

          Expand description

          Module containing functions executed by the thread in charge of parsing sniffed packets and inserting them in the shared map.

          Functions

          This function analyzes the network layer header passed as parameter and updates variables diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_min_packets_string.html b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_min_packets_string.html index e8d9a12a..a40a7cb6 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_min_packets_string.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_min_packets_string.html @@ -1,6 +1,6 @@ get_min_packets_string in packet_sniffer::thread_write_report_functions - Rust

          Function packet_sniffer::thread_write_report_functions::get_min_packets_string[−][src]

          fn get_min_packets_string(min_packets: u32) -> String
          Expand description

          Given the minimum packets number, the function generates the corresponding String +

          Function packet_sniffer::thread_write_report_functions::get_min_packets_string[−][src]

          fn get_min_packets_string(min_packets: u32) -> String
          Expand description

          Given the minimum packets number, the function generates the corresponding String to be used in the output report file header.

          Arguments

            diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_network_layer_string.html b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_network_layer_string.html index 59dcb020..5091983b 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_network_layer_string.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_network_layer_string.html @@ -1,6 +1,6 @@ get_network_layer_string in packet_sniffer::thread_write_report_functions - Rust

            Function packet_sniffer::thread_write_report_functions::get_network_layer_string[−][src]

            fn get_network_layer_string(network_layer: String) -> String
            Expand description

            Given the network layer textual filter, the function generates the corresponding String +

            Function packet_sniffer::thread_write_report_functions::get_network_layer_string[−][src]

            fn get_network_layer_string(network_layer: String) -> String
            Expand description

            Given the network layer textual filter, the function generates the corresponding String to be used in the output report file header.

            Arguments

              diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_ports_string.html b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_ports_string.html index aebab406..dad8760e 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_ports_string.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_ports_string.html @@ -1,6 +1,6 @@ get_ports_string in packet_sniffer::thread_write_report_functions - Rust

              Function packet_sniffer::thread_write_report_functions::get_ports_string[−][src]

              fn get_ports_string(lowest_port: u16, highest_port: u16) -> String
              Expand description

              Given the lowest and highest port numbers, the function generates the corresponding String +

              Function packet_sniffer::thread_write_report_functions::get_ports_string[−][src]

              fn get_ports_string(lowest_port: u16, highest_port: u16) -> String
              Expand description

              Given the lowest and highest port numbers, the function generates the corresponding String to be used in the output report file header.

              Arguments

                diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_transport_layer_string.html b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_transport_layer_string.html index 30e9f364..aa43bf85 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_transport_layer_string.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.get_transport_layer_string.html @@ -1,6 +1,6 @@ get_transport_layer_string in packet_sniffer::thread_write_report_functions - Rust

                Function packet_sniffer::thread_write_report_functions::get_transport_layer_string[−][src]

                fn get_transport_layer_string(transport_layer: String) -> String
                Expand description

                Given the transport layer textual filter, the function generates the corresponding String +

                Function packet_sniffer::thread_write_report_functions::get_transport_layer_string[−][src]

                fn get_transport_layer_string(transport_layer: String) -> String
                Expand description

                Given the transport layer textual filter, the function generates the corresponding String to be used in the output report file header.

                Arguments

                  diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.sleep_and_write_report_loop.html b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.sleep_and_write_report_loop.html index 0ae59882..2ac81ba1 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.sleep_and_write_report_loop.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.sleep_and_write_report_loop.html @@ -1,6 +1,6 @@ sleep_and_write_report_loop in packet_sniffer::thread_write_report_functions - Rust

                  Function packet_sniffer::thread_write_report_functions::sleep_and_write_report_loop[−][src]

                  pub fn sleep_and_write_report_loop(
                      lowest_port: u16,
                      highest_port: u16,
                      interval: u64,
                      min_packets: u32,
                      device_name: String,
                      network_layer: String,
                      transport_layer: String,
                      output_file: String,
                      mutex_map: Arc<Mutex<HashMap<AddressPort, ReportInfo>>>,
                      status_pair: Arc<(Mutex<Status>, Condvar)>
                  )
                  Expand description

                  The calling thread enters in a loop in which it waits for interval seconds and then re-write +

                  Function packet_sniffer::thread_write_report_functions::sleep_and_write_report_loop[−][src]

                  pub fn sleep_and_write_report_loop(
                      lowest_port: u16,
                      highest_port: u16,
                      interval: u64,
                      min_packets: u32,
                      device_name: String,
                      network_layer: String,
                      transport_layer: String,
                      output_file: String,
                      mutex_map: Arc<Mutex<HashMap<AddressPort, ReportInfo>>>,
                      status_pair: Arc<(Mutex<Status>, Condvar)>
                  )
                  Expand description

                  The calling thread enters in a loop in which it waits for interval seconds and then re-write from scratch the output report file, with updated values.

                  Arguments

                    @@ -39,6 +39,9 @@ Specified by the user through the -m option.

                  • mutex_map - Mutex to permit exclusive access to the shared variable containing the parsed packets.

                  • +
                  • +

                    status_pair - Shared variable to check the application current status.

                    +
                  \ No newline at end of file diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.write_report_file_header.html b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.write_report_file_header.html index 0800b152..7f99e1db 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.write_report_file_header.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/fn.write_report_file_header.html @@ -1,6 +1,6 @@ write_report_file_header in packet_sniffer::thread_write_report_functions - Rust

                  Function packet_sniffer::thread_write_report_functions::write_report_file_header[−][src]

                  fn write_report_file_header(
                      output: File,
                      device_name: String,
                      first_timestamp: String,
                      times_report_updated: i32,
                      interval: u64,
                      lowest_port: u16,
                      highest_port: u16,
                      min_packets: u32,
                      network_layer: String,
                      transport_layer: String
                  )
                  Expand description

                  Writes the output report file header, which contains useful info about the sniffing process.

                  +

                  Function packet_sniffer::thread_write_report_functions::write_report_file_header[−][src]

                  fn write_report_file_header(
                      output: File,
                      device_name: String,
                      first_timestamp: String,
                      times_report_updated: i32,
                      interval: u64,
                      lowest_port: u16,
                      highest_port: u16,
                      min_packets: u32,
                      network_layer: String,
                      transport_layer: String
                  )
                  Expand description

                  Writes the output report file header, which contains useful info about the sniffing process.

                  Arguments

                  • diff --git a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/index.html b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/index.html index 33db7938..8ce5c00a 100644 --- a/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/index.html +++ b/packet_sniffer/target/doc/packet_sniffer/thread_write_report_functions/index.html @@ -1,6 +1,6 @@ packet_sniffer::thread_write_report_functions - Rust

                    Module packet_sniffer::thread_write_report_functions[−][src]

                    Expand description

                    Module containing functions executed by the thread in charge of updating the output report +

                    Module thread_write_report_functions

                    Module packet_sniffer::thread_write_report_functions[−][src]

                    Expand description

                    Module containing functions executed by the thread in charge of updating the output report every interval seconds, with interval specified by the user through the -i command line option.

                    If the -i option is not specified, the report is updated every 5 seconds.

                    diff --git a/packet_sniffer/target/doc/src/packet_sniffer/main.rs.html b/packet_sniffer/target/doc/src/packet_sniffer/main.rs.html index 28a78170..c1528a17 100644 --- a/packet_sniffer/target/doc/src/packet_sniffer/main.rs.html +++ b/packet_sniffer/target/doc/src/packet_sniffer/main.rs.html @@ -523,7 +523,7 @@ InputEvent::Keyboard(KeyEvent::Char('s')) => { *status = Status::Stop; cvar.notify_all(); - println!("\n\t{}", "Capture stopped\r".red()); + println!("\n\t{}", "Capture stopped\n\r".red()); return; } _ => { /* Other events */ } diff --git a/packet_sniffer/target/doc/src/packet_sniffer/thread_parse_packets_functions.rs.html b/packet_sniffer/target/doc/src/packet_sniffer/thread_parse_packets_functions.rs.html index 74556df8..e604915a 100644 --- a/packet_sniffer/target/doc/src/packet_sniffer/thread_parse_packets_functions.rs.html +++ b/packet_sniffer/target/doc/src/packet_sniffer/thread_parse_packets_functions.rs.html @@ -398,6 +398,8 @@ 396 397 398 +399 +400
                    //! Module containing functions executed by the thread in charge of parsing sniffed packets and
                     //! inserting them in the shared map.
                     
                    @@ -430,6 +432,8 @@
                     /// ```-t``` option.
                     ///
                     /// * `mutex_map` - Mutex to permit exclusive access to the shared variable in which the parsed packets are inserted.
                    +///
                    +/// * `status_pair` - Shared variable to check the application current status.
                     pub fn parse_packets_loop(mut cap: Capture<Active>, lowest_port: u16, highest_port: u16,
                                               network_layer_filter: String, transport_layer_filter: String,
                                               mutex_map: Arc<Mutex<HashMap<AddressPort,ReportInfo>>>,
                    diff --git a/packet_sniffer/target/doc/src/packet_sniffer/thread_write_report_functions.rs.html b/packet_sniffer/target/doc/src/packet_sniffer/thread_write_report_functions.rs.html
                    index 3c7ee104..c14ea51b 100644
                    --- a/packet_sniffer/target/doc/src/packet_sniffer/thread_write_report_functions.rs.html
                    +++ b/packet_sniffer/target/doc/src/packet_sniffer/thread_write_report_functions.rs.html
                    @@ -259,6 +259,8 @@
                     257
                     258
                     259
                    +260
                    +261
                     
                    //! Module containing functions executed by the thread in charge of updating the output report
                     //! every ```interval``` seconds, with ```interval``` specified by the user through the
                     //! ```-i``` command line option.
                    @@ -307,6 +309,8 @@
                     /// ```-o``` option.
                     ///
                     /// * `mutex_map` - Mutex to permit exclusive access to the shared variable containing the parsed packets.
                    +///
                    +/// * `status_pair` - Shared variable to check the application current status.
                     pub fn sleep_and_write_report_loop(lowest_port: u16, highest_port: u16, interval: u64, min_packets: u32,
                                                        device_name: String, network_layer: String, transport_layer: String,
                                                        output_file: String, mutex_map: Arc<Mutex<HashMap<AddressPort,ReportInfo>>>,