|
|
|
@ -19,11 +19,12 @@ use digest::Digest;
|
|
|
|
use digest::Update;
|
|
|
|
use digest::Update;
|
|
|
|
use md5::Md5;
|
|
|
|
use md5::Md5;
|
|
|
|
use nom7::branch::alt;
|
|
|
|
use nom7::branch::alt;
|
|
|
|
use nom7::bytes::streaming::{is_not, tag, take};
|
|
|
|
use nom7::bytes::streaming::{is_not, tag, take, take_while};
|
|
|
|
use nom7::character::streaming::char;
|
|
|
|
use nom7::character::streaming::char;
|
|
|
|
use nom7::combinator::{complete, rest, verify};
|
|
|
|
use nom7::combinator::{complete, eof, not, rest, verify};
|
|
|
|
use nom7::multi::length_data;
|
|
|
|
use nom7::multi::length_data;
|
|
|
|
use nom7::number::streaming::{be_u32, be_u8};
|
|
|
|
use nom7::number::streaming::{be_u32, be_u8};
|
|
|
|
|
|
|
|
use nom7::sequence::terminated;
|
|
|
|
use nom7::IResult;
|
|
|
|
use nom7::IResult;
|
|
|
|
use std::fmt;
|
|
|
|
use std::fmt;
|
|
|
|
|
|
|
|
|
|
|
|
@ -70,17 +71,18 @@ fn is_not_lineend(b: u8) -> bool {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//may leave \r at the end to be removed
|
|
|
|
//may leave \r at the end to be removed
|
|
|
|
named!(pub ssh_parse_line<&[u8], &[u8]>,
|
|
|
|
pub fn ssh_parse_line(i: &[u8]) -> IResult<&[u8], &[u8]> {
|
|
|
|
terminated!(
|
|
|
|
fn parser(i: &[u8]) -> IResult<&[u8], &[u8]> {
|
|
|
|
take_while!(is_not_lineend),
|
|
|
|
let (i, bytes) = tag("\r")(i)?;
|
|
|
|
alt!( tag!("\n") | tag!("\r\n") |
|
|
|
|
let (i, _) = not(eof)(i)?;
|
|
|
|
do_parse!(
|
|
|
|
Ok((i, bytes))
|
|
|
|
bytes: tag!("\r") >>
|
|
|
|
}
|
|
|
|
not!(eof!()) >> (bytes)
|
|
|
|
terminated(
|
|
|
|
)
|
|
|
|
take_while(is_not_lineend),
|
|
|
|
)
|
|
|
|
alt(( tag("\n"), tag("\r\n"), parser
|
|
|
|
)
|
|
|
|
))
|
|
|
|
);
|
|
|
|
)(i)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[derive(PartialEq)]
|
|
|
|
#[derive(PartialEq)]
|
|
|
|
pub struct SshBanner<'a> {
|
|
|
|
pub struct SshBanner<'a> {
|
|
|
|
@ -316,7 +318,7 @@ mod tests {
|
|
|
|
Ok((_, _)) => {
|
|
|
|
Ok((_, _)) => {
|
|
|
|
panic!("Expected incomplete result");
|
|
|
|
panic!("Expected incomplete result");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Err(nom::Err::Incomplete(_)) => {
|
|
|
|
Err(Err::Incomplete(_)) => {
|
|
|
|
//OK
|
|
|
|
//OK
|
|
|
|
assert_eq!(1, 1);
|
|
|
|
assert_eq!(1, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|